From 03f1669d98e1fad81bc4832900ae149ac6510ebc Mon Sep 17 00:00:00 2001 From: Rory& Date: Mon, 29 Jul 2024 22:45:36 +0200 Subject: Initial commit --- ModerationClient/App.axaml.cs | 91 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 ModerationClient/App.axaml.cs (limited to 'ModerationClient/App.axaml.cs') diff --git a/ModerationClient/App.axaml.cs b/ModerationClient/App.axaml.cs new file mode 100644 index 0000000..db584de --- /dev/null +++ b/ModerationClient/App.axaml.cs @@ -0,0 +1,91 @@ +using System; +using System.IO; +using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Data.Core; +using Avalonia.Data.Core.Plugins; +using Avalonia.Markup.Xaml; +using LibMatrix.Services; +using MatrixUtils.Abstractions; +using MatrixUtils.Desktop; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using ModerationClient.Services; +using ModerationClient.ViewModels; +using ModerationClient.Views; + +namespace ModerationClient; + +public partial class App : Application { + /// + /// Gets the current instance in use + /// + public new static App Current => (App)Application.Current; + + /// + /// Gets the instance to resolve application services. + /// + public IServiceProvider Services => Host.Services; + + public IHost Host { get; private set; } + + public override void Initialize() { + AvaloniaXamlLoader.Load(this); + } + + // ReSharper disable once AsyncVoidMethod + public override async void OnFrameworkInitializationCompleted() { + var builder = Microsoft.Extensions.Hosting.Host.CreateApplicationBuilder(Environment.GetCommandLineArgs()); + builder.Services.AddTransient(); + ConfigureServices(builder.Services); + // builder.Services.AddHostedService(); + + Host = builder.Build(); + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { + // Line below is needed to remove Avalonia data validation. + // Without this line you will get duplicate validations from both Avalonia and CT + BindingPlugins.DataValidators.RemoveAt(0); + // desktop.MainWindow = new MainWindow { + // DataContext = Host.Services.GetRequiredService() + // }; + desktop.MainWindow = Host.Services.GetRequiredService(); + desktop.Exit += (sender, args) => { + Host.StopAsync(TimeSpan.FromSeconds(5)).GetAwaiter().GetResult(); + Host.Dispose(); + }; + } + + base.OnFrameworkInitializationCompleted(); + await Host.StartAsync(); + } + + /// + /// Configures the services for the application. + /// + private static IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddRoryLibMatrixServices(new() { + AppName = "ModerationClient", + }); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(x => { + var cmdLine = x.GetRequiredService(); + return new TieredStorageService( + cacheStorageProvider: new FileStorageProvider(Directory.CreateTempSubdirectory($"modcli-{cmdLine.Profile}").FullName), + dataStorageProvider: new FileStorageProvider(Directory.CreateTempSubdirectory($"modcli-{cmdLine.Profile}").FullName) + ); + } + ); + + // Register views + services.AddSingleton(); + services.AddTransient(); + services.AddTransient(); + // Register ViewModels + services.AddTransient(); + + return services.BuildServiceProvider(); + } +} \ No newline at end of file -- cgit 1.5.1