using System.IO; using System.Windows; using iBrain.Models; using iBrain.ViewModels; using iBrain.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 iBrain; /// /// 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 = "ibrain"; VelopackApp.Build().Run(); ServiceProviderFactory.Init(sc => { sc.AddSingleton(); sc.AddSingleton(); sc.AddSingleton(); }); InitializeComponent(); _serviceProvider = ServiceProviderFactory.ServiceProvider; _logger = ActivatorUtilities.GetServiceOrCreateInstance>(ServiceProviderFactory.ServiceProvider); _warningSystem = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); _serialKeyManager = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); _processManager = 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(); } Settings.Default.ShowSelectReportModuleDialog = false; Settings.Default.ShowSortedDownloadButton = false; MainWindowViewModel.ShowRemainingQuota = false; MainWindowViewModel.ShowCheckReportsButton = false; MainWindowViewModel.ShowExportReportButton = false; SettingsWindowViewModel.ShowExportReportSettings = false; LoginControlViewModel.ShowMessage2 = false; LoginControlViewModel.ShowMessage3 = false; Settings.Default.ServerAddress = "127.0.0.1"; Settings.Default.ServerPort = 30489; if (File.Exists(Path.Join(Directory.GetCurrentDirectory(), "iBrain_cmd", "main", "main.exe"))) { bool success = _processManager.Start([ new ServerFileLocation("main.exe", Path.Join(Directory.GetCurrentDirectory(), "iBrain_cmd", "main")), new ServerFileLocation("data-storage.exe", Path.Join(Directory.GetCurrentDirectory(), "iBrain_cmd", "data_storage")) ]); if (!success) { _warningSystem.ShowDialog(WarningWindowKind.Error, true, "SystemCrashing"); _logger.LogError("Cannot start process"); Current.Shutdown(); return; } } MainWindow mainWindow = ActivatorUtilities.CreateInstance(_serviceProvider); mainWindow.AddMainControl(new BuptIBrainControl(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"); } }