mirror of
https://github.com/2dust/v2rayN.git
synced 2025-10-13 11:59:13 +00:00
Optimization and improvement, using event subscribers
This commit is contained in:
parent
e96a4818c4
commit
671678724b
10 changed files with 95 additions and 97 deletions
|
@ -12,7 +12,6 @@ public enum EViewAction
|
||||||
ProfilesFocus,
|
ProfilesFocus,
|
||||||
ShareSub,
|
ShareSub,
|
||||||
ShareServer,
|
ShareServer,
|
||||||
ShowHideWindow,
|
|
||||||
ScanScreenTask,
|
ScanScreenTask,
|
||||||
ScanImageTask,
|
ScanImageTask,
|
||||||
BrowseServer,
|
BrowseServer,
|
||||||
|
|
|
@ -5,6 +5,12 @@ namespace ServiceLib.Handler;
|
||||||
|
|
||||||
public static class AppEvents
|
public static class AppEvents
|
||||||
{
|
{
|
||||||
|
public static readonly Subject<Unit> ReloadRequested = new();
|
||||||
|
public static readonly Subject<bool?> ShowHideWindowRequested = new();
|
||||||
|
public static readonly Subject<Unit> AddServerViaScanRequested = new();
|
||||||
|
public static readonly Subject<Unit> AddServerViaClipboardRequested = new();
|
||||||
|
public static readonly Subject<bool> SubscriptionsUpdateRequested = new();
|
||||||
|
|
||||||
public static readonly Subject<Unit> ProfilesRefreshRequested = new();
|
public static readonly Subject<Unit> ProfilesRefreshRequested = new();
|
||||||
public static readonly Subject<Unit> SubscriptionsRefreshRequested = new();
|
public static readonly Subject<Unit> SubscriptionsRefreshRequested = new();
|
||||||
public static readonly Subject<Unit> ProxiesReloadRequested = new();
|
public static readonly Subject<Unit> ProxiesReloadRequested = new();
|
||||||
|
|
|
@ -122,6 +122,12 @@ public sealed class AppManager
|
||||||
AppEvents.ShutdownRequested.OnNext(byUser);
|
AppEvents.ShutdownRequested.OnNext(byUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task RebootAsAdmin()
|
||||||
|
{
|
||||||
|
ProcUtils.RebootAsAdmin();
|
||||||
|
await AppManager.Instance.AppExitAsync(true);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion App
|
#endregion App
|
||||||
|
|
||||||
#region Config
|
#region Config
|
||||||
|
|
|
@ -2,11 +2,9 @@ using System.Reactive;
|
||||||
using System.Reactive.Disposables;
|
using System.Reactive.Disposables;
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using DynamicData;
|
|
||||||
using DynamicData.Binding;
|
using DynamicData.Binding;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using ReactiveUI.Fody.Helpers;
|
using ReactiveUI.Fody.Helpers;
|
||||||
using Splat;
|
|
||||||
|
|
||||||
namespace ServiceLib.ViewModels;
|
namespace ServiceLib.ViewModels;
|
||||||
|
|
||||||
|
@ -225,11 +223,11 @@ public class CheckUpdateViewModel : MyReactiveObject
|
||||||
{
|
{
|
||||||
if (blReload)
|
if (blReload)
|
||||||
{
|
{
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.Reload();
|
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.CloseCore();
|
await CoreManager.Instance.CoreStop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Reactive;
|
using System.Reactive;
|
||||||
using System.Reactive.Concurrency;
|
using System.Reactive.Concurrency;
|
||||||
|
using System.Reactive.Linq;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using ReactiveUI.Fody.Helpers;
|
using ReactiveUI.Fody.Helpers;
|
||||||
|
|
||||||
|
@ -183,7 +184,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||||
});
|
});
|
||||||
RebootAsAdminCmd = ReactiveCommand.CreateFromTask(async () =>
|
RebootAsAdminCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
await RebootAsAdmin();
|
await AppManager.Instance.RebootAsAdmin();
|
||||||
});
|
});
|
||||||
ClearServerStatisticsCmd = ReactiveCommand.CreateFromTask(async () =>
|
ClearServerStatisticsCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
|
@ -216,6 +217,30 @@ public class MainWindowViewModel : MyReactiveObject
|
||||||
|
|
||||||
#endregion WhenAnyValue && ReactiveCommand
|
#endregion WhenAnyValue && ReactiveCommand
|
||||||
|
|
||||||
|
#region AppEvents
|
||||||
|
|
||||||
|
AppEvents.ReloadRequested
|
||||||
|
.AsObservable()
|
||||||
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
|
.Subscribe(async _ => await Reload());
|
||||||
|
|
||||||
|
AppEvents.AddServerViaScanRequested
|
||||||
|
.AsObservable()
|
||||||
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
|
.Subscribe(async _ => await AddServerViaScanAsync());
|
||||||
|
|
||||||
|
AppEvents.AddServerViaClipboardRequested
|
||||||
|
.AsObservable()
|
||||||
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
|
.Subscribe(async _ => await AddServerViaClipboardAsync(null));
|
||||||
|
|
||||||
|
AppEvents.SubscriptionsUpdateRequested
|
||||||
|
.AsObservable()
|
||||||
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
|
.Subscribe(async blProxy => await UpdateSubscriptionProcess("", blProxy));
|
||||||
|
|
||||||
|
#endregion AppEvents
|
||||||
|
|
||||||
_ = Init();
|
_ = Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,11 +306,6 @@ public class MainWindowViewModel : MyReactiveObject
|
||||||
AppEvents.DispatcherStatisticsRequested.OnNext(update);
|
AppEvents.DispatcherStatisticsRequested.OnNext(update);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ShowHideWindow(bool? blShow)
|
|
||||||
{
|
|
||||||
_updateView?.Invoke(EViewAction.ShowHideWindow, blShow);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Actions
|
#endregion Actions
|
||||||
|
|
||||||
#region Servers && Groups
|
#region Servers && Groups
|
||||||
|
@ -465,12 +485,6 @@ public class MainWindowViewModel : MyReactiveObject
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RebootAsAdmin()
|
|
||||||
{
|
|
||||||
ProcUtils.RebootAsAdmin();
|
|
||||||
await AppManager.Instance.AppExitAsync(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ClearServerStatistics()
|
private async Task ClearServerStatistics()
|
||||||
{
|
{
|
||||||
await StatisticsManager.Instance.ClearAllServerStatistics();
|
await StatisticsManager.Instance.ClearAllServerStatistics();
|
||||||
|
@ -547,17 +561,11 @@ public class MainWindowViewModel : MyReactiveObject
|
||||||
await CoreManager.Instance.LoadCore(node);
|
await CoreManager.Instance.LoadCore(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task CloseCore()
|
|
||||||
{
|
|
||||||
await ConfigHandler.SaveConfig(_config);
|
|
||||||
await CoreManager.Instance.CoreStop();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task AutoHideStartup()
|
private async Task AutoHideStartup()
|
||||||
{
|
{
|
||||||
if (_config.UiItem.AutoHideStartup)
|
if (_config.UiItem.AutoHideStartup)
|
||||||
{
|
{
|
||||||
ShowHideWindow(false);
|
AppEvents.ShowHideWindowRequested.OnNext(false);
|
||||||
}
|
}
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ using DynamicData;
|
||||||
using DynamicData.Binding;
|
using DynamicData.Binding;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using ReactiveUI.Fody.Helpers;
|
using ReactiveUI.Fody.Helpers;
|
||||||
using Splat;
|
|
||||||
|
|
||||||
namespace ServiceLib.ViewModels;
|
namespace ServiceLib.ViewModels;
|
||||||
|
|
||||||
|
@ -276,7 +275,7 @@ public class ProfilesViewModel : MyReactiveObject
|
||||||
|
|
||||||
private void Reload()
|
private void Reload()
|
||||||
{
|
{
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.Reload();
|
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SetSpeedTestResult(SpeedTestResult result)
|
public async Task SetSpeedTestResult(SpeedTestResult result)
|
||||||
|
|
|
@ -5,7 +5,6 @@ using System.Text;
|
||||||
using DynamicData.Binding;
|
using DynamicData.Binding;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using ReactiveUI.Fody.Helpers;
|
using ReactiveUI.Fody.Helpers;
|
||||||
using Splat;
|
|
||||||
|
|
||||||
namespace ServiceLib.ViewModels;
|
namespace ServiceLib.ViewModels;
|
||||||
|
|
||||||
|
@ -149,17 +148,17 @@ public class StatusBarViewModel : MyReactiveObject
|
||||||
|
|
||||||
NotifyLeftClickCmd = ReactiveCommand.CreateFromTask(async () =>
|
NotifyLeftClickCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(null);
|
AppEvents.ShowHideWindowRequested.OnNext(null);
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
});
|
});
|
||||||
ShowWindowCmd = ReactiveCommand.CreateFromTask(async () =>
|
ShowWindowCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(true);
|
AppEvents.ShowHideWindowRequested.OnNext(true);
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
});
|
});
|
||||||
HideWindowCmd = ReactiveCommand.CreateFromTask(async () =>
|
HideWindowCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(false);
|
AppEvents.ShowHideWindowRequested.OnNext(false);
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -275,23 +274,20 @@ public class StatusBarViewModel : MyReactiveObject
|
||||||
|
|
||||||
private async Task AddServerViaClipboard()
|
private async Task AddServerViaClipboard()
|
||||||
{
|
{
|
||||||
var service = Locator.Current.GetService<MainWindowViewModel>();
|
AppEvents.AddServerViaClipboardRequested.OnNext(Unit.Default);
|
||||||
if (service != null)
|
await Task.Delay(1000);
|
||||||
await service.AddServerViaClipboardAsync(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task AddServerViaScan()
|
private async Task AddServerViaScan()
|
||||||
{
|
{
|
||||||
var service = Locator.Current.GetService<MainWindowViewModel>();
|
AppEvents.AddServerViaScanRequested.OnNext(Unit.Default);
|
||||||
if (service != null)
|
await Task.Delay(1000);
|
||||||
await service.AddServerViaScanAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task UpdateSubscriptionProcess(bool blProxy)
|
private async Task UpdateSubscriptionProcess(bool blProxy)
|
||||||
{
|
{
|
||||||
var service = Locator.Current.GetService<MainWindowViewModel>();
|
AppEvents.SubscriptionsUpdateRequested.OnNext(blProxy);
|
||||||
if (service != null)
|
await Task.Delay(1000);
|
||||||
await service.UpdateSubscriptionProcess("", blProxy);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RefreshServersBiz()
|
private async Task RefreshServersBiz()
|
||||||
|
@ -453,7 +449,7 @@ public class StatusBarViewModel : MyReactiveObject
|
||||||
if (await ConfigHandler.SetDefaultRouting(_config, item) == 0)
|
if (await ConfigHandler.SetDefaultRouting(_config, item) == 0)
|
||||||
{
|
{
|
||||||
NoticeManager.Instance.SendMessageEx(ResUI.TipChangeRouting);
|
NoticeManager.Instance.SendMessageEx(ResUI.TipChangeRouting);
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.Reload();
|
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||||
_updateView?.Invoke(EViewAction.DispatcherRefreshIcon, null);
|
_updateView?.Invoke(EViewAction.DispatcherRefreshIcon, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -486,7 +482,7 @@ public class StatusBarViewModel : MyReactiveObject
|
||||||
if (Utils.IsWindows())
|
if (Utils.IsWindows())
|
||||||
{
|
{
|
||||||
_config.TunModeItem.EnableTun = false;
|
_config.TunModeItem.EnableTun = false;
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.RebootAsAdmin();
|
await AppManager.Instance.RebootAsAdmin();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -500,7 +496,7 @@ public class StatusBarViewModel : MyReactiveObject
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await ConfigHandler.SaveConfig(_config);
|
await ConfigHandler.SaveConfig(_config);
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.Reload();
|
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool AllowEnableTun()
|
private bool AllowEnableTun()
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
|
using System.Reactive;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Markup.Xaml;
|
||||||
using Splat;
|
|
||||||
using v2rayN.Desktop.Common;
|
|
||||||
using v2rayN.Desktop.Views;
|
using v2rayN.Desktop.Views;
|
||||||
|
|
||||||
namespace v2rayN.Desktop;
|
namespace v2rayN.Desktop;
|
||||||
|
@ -55,16 +54,8 @@ public partial class App : Application
|
||||||
{
|
{
|
||||||
if (desktop.MainWindow != null)
|
if (desktop.MainWindow != null)
|
||||||
{
|
{
|
||||||
var clipboardData = await AvaUtils.GetClipboardData(desktop.MainWindow);
|
AppEvents.AddServerViaClipboardRequested.OnNext(Unit.Default);
|
||||||
if (clipboardData.IsNullOrEmpty())
|
await Task.Delay(1000);
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var service = Locator.Current.GetService<MainWindowViewModel>();
|
|
||||||
if (service != null)
|
|
||||||
{
|
|
||||||
_ = service.AddServerViaClipboardAsync(clipboardData);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@ using Avalonia.Threading;
|
||||||
using DialogHostAvalonia;
|
using DialogHostAvalonia;
|
||||||
using MsBox.Avalonia.Enums;
|
using MsBox.Avalonia.Enums;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using Splat;
|
|
||||||
using v2rayN.Desktop.Base;
|
using v2rayN.Desktop.Base;
|
||||||
using v2rayN.Desktop.Common;
|
using v2rayN.Desktop.Common;
|
||||||
using v2rayN.Desktop.Manager;
|
using v2rayN.Desktop.Manager;
|
||||||
|
@ -40,7 +39,6 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||||
menuClose.Click += MenuClose_Click;
|
menuClose.Click += MenuClose_Click;
|
||||||
|
|
||||||
ViewModel = new MainWindowViewModel(UpdateViewHandler);
|
ViewModel = new MainWindowViewModel(UpdateViewHandler);
|
||||||
Locator.CurrentMutable.RegisterLazySingleton(() => ViewModel, typeof(MainWindowViewModel));
|
|
||||||
|
|
||||||
switch (_config.UiItem.MainGirdOrientation)
|
switch (_config.UiItem.MainGirdOrientation)
|
||||||
{
|
{
|
||||||
|
@ -153,6 +151,12 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||||
.ObserveOn(RxApp.MainThreadScheduler)
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
.Subscribe(content => Shutdown(content))
|
.Subscribe(content => Shutdown(content))
|
||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
|
AppEvents.ShowHideWindowRequested
|
||||||
|
.AsObservable()
|
||||||
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
|
.Subscribe(blShow => ShowHideWindow(blShow))
|
||||||
|
.DisposeWith(disposables);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (Utils.IsWindows())
|
if (Utils.IsWindows())
|
||||||
|
@ -221,12 +225,6 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||||
case EViewAction.SubSettingWindow:
|
case EViewAction.SubSettingWindow:
|
||||||
return await new SubSettingWindow().ShowDialog<bool>(this);
|
return await new SubSettingWindow().ShowDialog<bool>(this);
|
||||||
|
|
||||||
case EViewAction.ShowHideWindow:
|
|
||||||
Dispatcher.UIThread.Post(() =>
|
|
||||||
ShowHideWindow((bool?)obj),
|
|
||||||
DispatcherPriority.Default);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EViewAction.ScanScreenTask:
|
case EViewAction.ScanScreenTask:
|
||||||
await ScanScreenTaskAsync();
|
await ScanScreenTaskAsync();
|
||||||
break;
|
break;
|
||||||
|
@ -236,11 +234,7 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EViewAction.AddServerViaClipboard:
|
case EViewAction.AddServerViaClipboard:
|
||||||
var clipboardData = await AvaUtils.GetClipboardData(this);
|
await AddServerViaClipboardAsync();
|
||||||
if (clipboardData.IsNotEmpty() && ViewModel != null)
|
|
||||||
{
|
|
||||||
await ViewModel.AddServerViaClipboardAsync(clipboardData);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,11 +289,7 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||||
switch (e.Key)
|
switch (e.Key)
|
||||||
{
|
{
|
||||||
case Key.V:
|
case Key.V:
|
||||||
var clipboardData = await AvaUtils.GetClipboardData(this);
|
await AddServerViaClipboardAsync();
|
||||||
if (clipboardData.IsNotEmpty() && ViewModel != null)
|
|
||||||
{
|
|
||||||
await ViewModel.AddServerViaClipboardAsync(clipboardData);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Key.S:
|
case Key.S:
|
||||||
|
@ -326,6 +316,15 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||||
ProcUtils.ProcessStart(Utils.GetBinPath("EnableLoopback.exe"));
|
ProcUtils.ProcessStart(Utils.GetBinPath("EnableLoopback.exe"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task AddServerViaClipboardAsync()
|
||||||
|
{
|
||||||
|
var clipboardData = await AvaUtils.GetClipboardData(this);
|
||||||
|
if (clipboardData.IsNotEmpty() && ViewModel != null)
|
||||||
|
{
|
||||||
|
await ViewModel.AddServerViaClipboardAsync(clipboardData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task ScanScreenTaskAsync()
|
public async Task ScanScreenTaskAsync()
|
||||||
{
|
{
|
||||||
//ShowHideWindow(false);
|
//ShowHideWindow(false);
|
||||||
|
|
|
@ -6,10 +6,8 @@ using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Interop;
|
using System.Windows.Interop;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
|
||||||
using MaterialDesignThemes.Wpf;
|
using MaterialDesignThemes.Wpf;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using Splat;
|
|
||||||
using v2rayN.Manager;
|
using v2rayN.Manager;
|
||||||
|
|
||||||
namespace v2rayN.Views;
|
namespace v2rayN.Views;
|
||||||
|
@ -37,7 +35,6 @@ public partial class MainWindow
|
||||||
menuBackupAndRestore.Click += MenuBackupAndRestore_Click;
|
menuBackupAndRestore.Click += MenuBackupAndRestore_Click;
|
||||||
|
|
||||||
ViewModel = new MainWindowViewModel(UpdateViewHandler);
|
ViewModel = new MainWindowViewModel(UpdateViewHandler);
|
||||||
Locator.CurrentMutable.RegisterLazySingleton(() => ViewModel, typeof(MainWindowViewModel));
|
|
||||||
|
|
||||||
switch (_config.UiItem.MainGirdOrientation)
|
switch (_config.UiItem.MainGirdOrientation)
|
||||||
{
|
{
|
||||||
|
@ -146,10 +143,16 @@ public partial class MainWindow
|
||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
AppEvents.ShutdownRequested
|
AppEvents.ShutdownRequested
|
||||||
.AsObservable()
|
.AsObservable()
|
||||||
.ObserveOn(RxApp.MainThreadScheduler)
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
.Subscribe(content => Shutdown(content))
|
.Subscribe(content => Shutdown(content))
|
||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
|
AppEvents.ShowHideWindowRequested
|
||||||
|
.AsObservable()
|
||||||
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
|
.Subscribe(blShow => ShowHideWindow(blShow))
|
||||||
|
.DisposeWith(disposables);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.Title = $"{Utils.GetVersion()} - {(Utils.IsAdministrator() ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}";
|
this.Title = $"{Utils.GetVersion()} - {(Utils.IsAdministrator() ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}";
|
||||||
|
@ -210,13 +213,6 @@ public partial class MainWindow
|
||||||
case EViewAction.SubSettingWindow:
|
case EViewAction.SubSettingWindow:
|
||||||
return (new SubSettingWindow().ShowDialog() ?? false);
|
return (new SubSettingWindow().ShowDialog() ?? false);
|
||||||
|
|
||||||
case EViewAction.ShowHideWindow:
|
|
||||||
Application.Current?.Dispatcher.Invoke((() =>
|
|
||||||
{
|
|
||||||
ShowHideWindow((bool?)obj);
|
|
||||||
}), DispatcherPriority.Normal);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EViewAction.ScanScreenTask:
|
case EViewAction.ScanScreenTask:
|
||||||
await ScanScreenTaskAsync();
|
await ScanScreenTaskAsync();
|
||||||
break;
|
break;
|
||||||
|
@ -226,11 +222,7 @@ public partial class MainWindow
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EViewAction.AddServerViaClipboard:
|
case EViewAction.AddServerViaClipboard:
|
||||||
var clipboardData = WindowsUtils.GetClipboardData();
|
await AddServerViaClipboardAsync();
|
||||||
if (clipboardData.IsNotEmpty())
|
|
||||||
{
|
|
||||||
ViewModel?.AddServerViaClipboardAsync(clipboardData);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,12 +275,7 @@ public partial class MainWindow
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
AddServerViaClipboardAsync().ContinueWith(_ => { });
|
||||||
var clipboardData = WindowsUtils.GetClipboardData();
|
|
||||||
if (clipboardData.IsNotEmpty())
|
|
||||||
{
|
|
||||||
ViewModel?.AddServerViaClipboardAsync(clipboardData);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -322,6 +309,15 @@ public partial class MainWindow
|
||||||
ProcUtils.ProcessStart(Utils.GetBinPath("EnableLoopback.exe"));
|
ProcUtils.ProcessStart(Utils.GetBinPath("EnableLoopback.exe"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task AddServerViaClipboardAsync()
|
||||||
|
{
|
||||||
|
var clipboardData = WindowsUtils.GetClipboardData();
|
||||||
|
if (clipboardData.IsNotEmpty() && ViewModel != null)
|
||||||
|
{
|
||||||
|
await ViewModel.AddServerViaClipboardAsync(clipboardData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task ScanScreenTaskAsync()
|
private async Task ScanScreenTaskAsync()
|
||||||
{
|
{
|
||||||
ShowHideWindow(false);
|
ShowHideWindow(false);
|
||||||
|
|
Loading…
Reference in a new issue