using System.IO; using System.Windows; using Astroke.ViewModels; using Astroke.Views.Controls; using JetBrains.Annotations; using Livia.Models; using Livia.Models.Data; using Livia.Properties; using Livia.Utility.DependencyInjection; using Livia.ViewModels; using Livia.Views; using Livia.Views.Utility; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Velopack; namespace Tp1; /// /// Interaction logic for App.xaml /// public partial class App { private readonly ILogger _logger; private readonly IServiceProvider _serviceProvider; private readonly IWarningSystem _warningSystem; private readonly IProcessManager _processManager; private readonly ISerialKeyManager _serialKeyManager; [UsedImplicitly] private Mutex? _mutex; public App() { ServiceConfigurations.AppName = "astroke"; VelopackApp.Build().Run(); ServiceProviderFactory.Init(sc => sc.AddSingleton()); InitializeComponent(); _serviceProvider = ServiceProviderFactory.ServiceProvider; _logger = ActivatorUtilities.GetServiceOrCreateInstance>(ServiceProviderFactory.ServiceProvider); _warningSystem = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); _processManager = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); _serialKeyManager = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); _logger.LogInformation("App Starting"); SettingsLogger.Init(); AppHelper helper = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); Dispatcher.UnhandledException += helper.OnDispatcherUnhandledException; helper.UpdateSettings(); helper.LoadStrings(); } private void OnStartup(object sender, StartupEventArgs eventArgs) { _mutex = new Mutex(true, "Livia", out bool isNewInstance); if (!isNewInstance) { _warningSystem.ShowDialog(WarningWindowKind.Warning, true, "InstanceIsRunningError"); Current.Shutdown(); } if (!File.Exists(Path.Join(Directory.GetCurrentDirectory(), "Analysis.dll"))) { _warningSystem.ShowDialog(WarningWindowKind.Error, true, "SystemCrashing"); _logger.LogError("Cannot start process"); Current.Shutdown(); return; } //set to registration version Settings.Default.ServerAddress = "127.0.0.1"; Settings.Default.ServerPort = 8080; Settings.Default.ShowArchiveDownloadButton = true; Settings.Default.ShowSortedDownloadButton = false; Settings.Default.ShowUpdateButton = false; SettingsWindowViewModel.DisplaySettingsCardEnabled = false; MainWindowViewModel.ShowRemainingQuota = false; LoginControlViewModel.ShowMessage3 = false; bool success = _processManager.Start([ new ServerFileLocation("astroke_back-sqlite.exe", Path.Join(Directory.GetCurrentDirectory(), "astroke_cmd", "astroke_back-sqlite")), new ServerFileLocation("data-storage-sqlite.exe", Path.Join(Directory.GetCurrentDirectory(), "astroke_cmd", "data-storage-sqlite")) ]); if (!success) { _warningSystem.ShowDialog(WarningWindowKind.Error, true, "SystemCrashing"); _logger.LogError("Cannot start process"); Current.Shutdown(); return; } MainWindow mainWindow = ActivatorUtilities.CreateInstance(_serviceProvider); mainWindow.AddMainControl(new AStrokeControl(ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider))); MainWindow = mainWindow; if (!_serialKeyManager.Validate()) { ValidateSerialKeyDialog dialog = new(); bool result = dialog.ShowDialog() ?? false; if (!result) { _logger.LogWarning("ValidateSerialKeyDialog closed without success, shutting down"); Current.Shutdown(); } } mainWindow.Show(); _logger.LogInformation("App Started"); } }