using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using v2rayN.Desktop.Views; namespace v2rayN.Desktop; public partial class App : Application { public override void Initialize() { AvaloniaXamlLoader.Load(this); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; DataContext = StatusBarViewModel.Instance; } public override void OnFrameworkInitializationCompleted() { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { AppManager.Instance.InitComponents(); desktop.Exit += OnExit; desktop.MainWindow = new MainWindow(); } base.OnFrameworkInitializationCompleted(); } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { if (e.ExceptionObject != null) { Logging.SaveLog("CurrentDomain_UnhandledException", (Exception)e.ExceptionObject); } } private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) { Logging.SaveLog("TaskScheduler_UnobservedTaskException", e.Exception); } private void OnExit(object? sender, ControlledApplicationLifetimeExitEventArgs e) { } private async void MenuAddServerViaClipboardClick(object? sender, EventArgs e) { if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { if (desktop.MainWindow != null) { AppEvents.AddServerViaClipboardRequested.Publish(); await Task.Delay(1000); } } } private async void MenuExit_Click(object? sender, EventArgs e) { await AppManager.Instance.AppExitAsync(false); AppManager.Instance.Shutdown(true); } }