Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

App.axaml.cs

Blame
  • App.axaml.cs 3.35 KiB
    using System;
    using System.IO;
    using Avalonia;
    using Avalonia.Controls;
    using Avalonia.Controls.ApplicationLifetimes;
    using Avalonia.Input;
    using Avalonia.Markup.Xaml;
    using Blacklight.Util;
    using Blacklight.ViewModels;
    using Blacklight.Views;
    using Lightquark.NET;
    using Microsoft.Extensions.DependencyInjection;
    
    namespace Blacklight;
    
    public partial class App : Application
    {
        
        public static IServiceProvider? Services { get; set; }
        
        public override void Initialize()
        {
            AvaloniaXamlLoader.Load(this);
        }
    
        public override void OnFrameworkInitializationCompleted()
        {
            var services = new ServiceCollection();
    
            services.AddSingleton<MainWindowViewModel>();
            services.AddSingleton<ViewNavigationService>();
            services.AddSingleton<Client>();
            
            services.AddSingleton<ClientViewModel>();
            services.AddSingleton<LoginViewModel>();
            
            var serviceProvider = services.BuildServiceProvider();
            Services = serviceProvider;
    
            serviceProvider.GetRequiredService<ViewNavigationService>();
            var mainWindowViewModel = serviceProvider.GetRequiredService<MainWindowViewModel>();
            var loginViewModel = serviceProvider.GetRequiredService<LoginViewModel>();
            var client = serviceProvider.GetRequiredService<Client>();
            client.OnLogOut = () =>
            {
                mainWindowViewModel.CurrentViewModel = loginViewModel;
                var path = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "blacklight", "login.json");
                try
                {
                    Console.WriteLine("Deleting login.json");
                    File.Delete(path);
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine(ex);
                }
            };
            var clientViewModel = serviceProvider.GetRequiredService<ClientViewModel>();
            
            switch (ApplicationLifetime)
            {
                case IClassicDesktopStyleApplicationLifetime desktopLifetime:
                {
                    var mainWindow = new MainWindow
                    {
                        DataContext = mainWindowViewModel
                    };
    
                    mainWindow.Closing += (_, _) =>
                    {