livia-test/SiemensCereflow/App.xaml.cs
2025-03-28 14:31:53 +08:00

148 lines
5.8 KiB
C#

using System.Windows;
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 SiemensCereflow.ViewModels;
using SiemensCereflow.Views.Controls;
namespace SiemensCereflow;
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App
{
private readonly ILogger _logger;
private readonly IServiceProvider _serviceProvider;
private readonly IWarningSystem _warningSystem;
[UsedImplicitly] private Mutex? _mutex;
private readonly Dictionary<string, string>? _argsDictionary;
public App()
{
(string parseMsgIndex, string parseArg, _argsDictionary) = LocalCommandLineServerHandler.ParseArgs(["input_dir", "log_dir", "output_dir"]);
if (_argsDictionary?.TryGetValue("suspend_dir", out string? tempFolder) ?? false)
ServiceConfigurations.TempFolder = tempFolder;
if (_argsDictionary?.TryGetValue("log_dir", out string? logFolder) ?? false)
ServiceProviderFactory.LogFolder = logFolder;
InitializeComponent();
ServiceProviderFactory.Init(sc =>
{
sc.AddSingleton<ILiviaControlViewModel, SiemensCereFlowControlViewModel>();
sc.AddSingleton<IServerHandler, LocalCommandLineServerHandler>();
});
AppHelper helper = ActivatorUtilities.GetServiceOrCreateInstance<AppHelper>(ServiceProviderFactory.ServiceProvider);
Dispatcher.UnhandledException += helper.OnDispatcherUnhandledException;
//TODO:: I am not convinced this will work, because we are already using settings before this.
helper.UpdateSettings();
//parse success
if (_argsDictionary != null)
{
if (_argsDictionary.TryGetValue("language", out string? language))
{
if (language == "zh-Hans-CN")
language = "zh-CN";
Settings.Default.Language = language;
}
else
{
SettingsWindowViewModel.LanguageSelectionEnabled = true;
}
if (_argsDictionary.TryGetValue("culture_info", out string? cultureInfo))
{
Settings.Default.CultureInfo = cultureInfo;
SettingsWindowViewModel.DisplaySettingsCardEnabled = false;
}
if (_argsDictionary?.TryGetValue("font_family", out string? fontFamily) ?? false)
{
foreach (LanguageComboBoxItemViewModel viewModel in ViewUtility.LanguageList.Where(viewModel => viewModel.Id == Settings.Default.Language))
{
viewModel.DefaultFont = fontFamily;
ViewSettings.Default.FontFamily = fontFamily;
ViewUtility.LoadFonts();
break;
}
}
}
Settings.Default.Save();
ViewSettings.Default.Save();
helper.LoadStrings();
_serviceProvider = ServiceProviderFactory.ServiceProvider;
_logger = ActivatorUtilities.GetServiceOrCreateInstance<ILogger<App>>(ServiceProviderFactory.ServiceProvider);
_warningSystem = ActivatorUtilities.GetServiceOrCreateInstance<IWarningSystem>(ServiceProviderFactory.ServiceProvider);
_logger.LogInformation("App Starting");
_logger.LogInformation("build time: 2024-04-25 13:54");
SettingsLogger.Init();
_logger.LogInformation($"args = {string.Join(" ", Environment.GetCommandLineArgs())}");
if (string.IsNullOrEmpty(parseMsgIndex))
return;
//in case parse fail. Warning is deferred because other warning system is not available at time error is caught.
_warningSystem.ShowDialog(WarningWindowKind.Warning, true, parseMsgIndex, parseArg);
Current.Shutdown();
}
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();
}
//set to siemens version
MosaicImageGroupControlViewModel.RoiEnabled = false;
MainWindowViewModel.ConfirmExiting = false;
MainWindowViewModel.ShowCheckReportsButton = false;
MainWindowViewModel.ShowExportReportButton = false;
MainWindowViewModel.ShowHistoryButton = false;
MainWindowViewModel.ShowLoadDataButton = false;
MainWindowViewModel.ShowLogoutButton = false;
MainWindowViewModel.ShowSearchButton = false;
MainWindowViewModel.HideTitleBar = true;
MainWindowViewModel.ClearFilesOnExit = false;
MainWindowViewModel.ShowRemainingQuota = false;
SettingsWindowViewModel.SecurityTabEnabled = false;
SettingsWindowViewModel.GeneralTabEnabled = false;
Settings.Default.ShowUpdateButton = false;
Settings.Default.LogoutAfter = 0;
MainWindow mainWindow = ActivatorUtilities.CreateInstance<MainWindow>(_serviceProvider);
mainWindow.AddMainControl(new SiemensCereFlowControl(ActivatorUtilities.GetServiceOrCreateInstance<ILiviaControlViewModel>(ServiceProviderFactory.ServiceProvider)));
MainWindow = mainWindow;
//always maximize
mainWindow.Width = SystemParameters.WorkArea.Width;
mainWindow.Height = SystemParameters.WorkArea.Height;
mainWindow.Left = 0;
mainWindow.Top = 0;
mainWindow.Show();
_logger.LogInformation("App Started");
if (_argsDictionary == null)
return;
mainWindow.ProcessDataCommandLine(_argsDictionary);
}
}