From 20840cbf9c05e81b805c0062a1fa9e3dea9c17d7 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Sat, 27 Apr 2024 14:24:28 +0100 Subject: [PATCH] Changing to only load vaults on demand --- Bitvault.Avalonia/App.axaml.cs | 2 ++ Bitvault.Avalonia/VaultComponent.cs | 3 +- Bitvault/AllNavigationViewModel.cs | 2 +- Bitvault/ArchiveNavigationViewModel.cs | 2 +- Bitvault/CategoriesNavigationViewModel.cs | 2 +- Bitvault/CreateVaultViewModel.cs | 3 +- Bitvault/IMainNavigationViewModel.cs | 2 +- Bitvault/IVaultNavigationViewModel.cs | 3 ++ Bitvault/StarredNavigationViewModel.cs | 2 +- Bitvault/VaultHandler.cs | 36 +++++++++++---------- Bitvault/VaultNavigationViewModel.cs | 2 +- Bitvault/VaultNavigationViewModelHandler.cs | 20 ++++-------- 12 files changed, 39 insertions(+), 40 deletions(-) create mode 100644 Bitvault/IVaultNavigationViewModel.cs diff --git a/Bitvault.Avalonia/App.axaml.cs b/Bitvault.Avalonia/App.axaml.cs index 493e07b..430aa9f 100644 --- a/Bitvault.Avalonia/App.axaml.cs +++ b/Bitvault.Avalonia/App.axaml.cs @@ -39,6 +39,8 @@ public partial class App : Application services.AddHandler(); services.AddTemplate("Main"); + + services.AddTemplate(); services.AddHandler(); services.AddTransient(); diff --git a/Bitvault.Avalonia/VaultComponent.cs b/Bitvault.Avalonia/VaultComponent.cs index e913a4e..aaf7895 100644 --- a/Bitvault.Avalonia/VaultComponent.cs +++ b/Bitvault.Avalonia/VaultComponent.cs @@ -9,9 +9,8 @@ public class VaultComponent : ComponentBuilder.Create() .AddServices(services => { - services.AddInitializer(); + // services.AddInitializer(); - services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); diff --git a/Bitvault/AllNavigationViewModel.cs b/Bitvault/AllNavigationViewModel.cs index 99ade27..6acebdc 100644 --- a/Bitvault/AllNavigationViewModel.cs +++ b/Bitvault/AllNavigationViewModel.cs @@ -9,4 +9,4 @@ public class AllNavigationViewModel(IServiceProvider provider, ISubscriber subscriber, IDisposer disposer) : ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), - IMainNavigationViewModel; \ No newline at end of file + IVaultNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/ArchiveNavigationViewModel.cs b/Bitvault/ArchiveNavigationViewModel.cs index c2310e1..77126fe 100644 --- a/Bitvault/ArchiveNavigationViewModel.cs +++ b/Bitvault/ArchiveNavigationViewModel.cs @@ -9,4 +9,4 @@ public class ArchiveNavigationViewModel(IServiceProvider provider, ISubscriber subscriber, IDisposer disposer) : ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), - IMainNavigationViewModel; \ No newline at end of file + IVaultNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/CategoriesNavigationViewModel.cs b/Bitvault/CategoriesNavigationViewModel.cs index 4f6b192..684a9a1 100644 --- a/Bitvault/CategoriesNavigationViewModel.cs +++ b/Bitvault/CategoriesNavigationViewModel.cs @@ -9,4 +9,4 @@ public class CategoriesNavigationViewModel(IServiceProvider provider, ISubscriber subscriber, IDisposer disposer) : ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), - IMainNavigationViewModel; \ No newline at end of file + IVaultNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/CreateVaultViewModel.cs b/Bitvault/CreateVaultViewModel.cs index e4f0d09..e4c7836 100644 --- a/Bitvault/CreateVaultViewModel.cs +++ b/Bitvault/CreateVaultViewModel.cs @@ -19,7 +19,6 @@ public partial class CreateVaultViewModel(IServiceProvider provider, public async Task Confirm() { - await Publisher.Publish(Create.As(new Vault(Name))); - return true; + return await Mediator.Handle, bool>(Create.As(new Vault(Name))); } } \ No newline at end of file diff --git a/Bitvault/IMainNavigationViewModel.cs b/Bitvault/IMainNavigationViewModel.cs index 0835c19..4f58127 100644 --- a/Bitvault/IMainNavigationViewModel.cs +++ b/Bitvault/IMainNavigationViewModel.cs @@ -1,3 +1,3 @@ namespace Bitvault; -public interface IMainNavigationViewModel; \ No newline at end of file +public interface IMainNavigationViewModel; diff --git a/Bitvault/IVaultNavigationViewModel.cs b/Bitvault/IVaultNavigationViewModel.cs new file mode 100644 index 0000000..4422fb2 --- /dev/null +++ b/Bitvault/IVaultNavigationViewModel.cs @@ -0,0 +1,3 @@ +namespace Bitvault; + +public interface IVaultNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/StarredNavigationViewModel.cs b/Bitvault/StarredNavigationViewModel.cs index b487225..27b2f7f 100644 --- a/Bitvault/StarredNavigationViewModel.cs +++ b/Bitvault/StarredNavigationViewModel.cs @@ -9,4 +9,4 @@ public class StarredNavigationViewModel(IServiceProvider provider, ISubscriber subscriber, IDisposer disposer) : ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), - IMainNavigationViewModel; \ No newline at end of file + IVaultNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/VaultHandler.cs b/Bitvault/VaultHandler.cs index 6a67bd5..d1cda3d 100644 --- a/Bitvault/VaultHandler.cs +++ b/Bitvault/VaultHandler.cs @@ -1,35 +1,37 @@ -using Toolkit.Foundation; +using LiteDB; +using Toolkit.Foundation; namespace Bitvault; public class VaultStorageHandler : - INotificationHandler> + IHandler, bool> { - public Task Handle(Create args, - CancellationToken cancellationToken = default) + public Task Handle(Create args, CancellationToken cancellationToken) { throw new NotImplementedException(); } } +public class DatabaseFactory +{ + +} + public record VaultStorage(string Name); public class VaultHandler(IVaultFactory factory) : IHandler, bool> { - //public async Task Handle(Create args, - // CancellationToken cancellationToken = default) - //{ - // if (args.Value is Vault vault) - // { - // if (factory.Create($"Vault:{vault.Name}", new VaultConfiguration { Name = vault.Name }) is IComponentHost host) - // { - // await host.StartAsync(cancellationToken); - // } - // } - //} - public Task Handle(Create args, CancellationToken cancellationToken) + public async Task Handle(Create args, CancellationToken cancellationToken) { - throw new NotImplementedException(); + if (args.Value is Vault vault) + { + if (factory.Create($"Vault:{vault.Name}", new VaultConfiguration { Name = vault.Name }) is IComponentHost host) + { + await host.StartAsync(cancellationToken); + } + } + + return true; } } \ No newline at end of file diff --git a/Bitvault/VaultNavigationViewModel.cs b/Bitvault/VaultNavigationViewModel.cs index 13d49c9..7c8dbc6 100644 --- a/Bitvault/VaultNavigationViewModel.cs +++ b/Bitvault/VaultNavigationViewModel.cs @@ -4,7 +4,7 @@ using Toolkit.Foundation; namespace Bitvault; public partial class VaultNavigationViewModel : - ObservableCollectionViewModel, + ObservableCollectionViewModel, IMainNavigationViewModel, INotificationHandler, INotificationHandler diff --git a/Bitvault/VaultNavigationViewModelHandler.cs b/Bitvault/VaultNavigationViewModelHandler.cs index 31c61f7..c9a74a9 100644 --- a/Bitvault/VaultNavigationViewModelHandler.cs +++ b/Bitvault/VaultNavigationViewModelHandler.cs @@ -1,27 +1,21 @@ -using Microsoft.Extensions.DependencyInjection; -using Toolkit.Foundation; +using Toolkit.Foundation; namespace Bitvault; public class VaultNavigationViewModelHandler(IPublisher publisher, - IVaultHostCollection vaults) : + IServiceFactory factory, + IEnumerable> descriptors) : INotificationHandler> { public async Task Handle(Enumerate args, CancellationToken cancellationToken = default) { - foreach (IComponentHost vault in vaults) + foreach (IConfigurationDescriptor descriptor in descriptors) { - if (vault.Services.GetRequiredService() is VaultConfiguration configuration) + if (factory.Create(descriptor.Value.Name) is VaultNavigationViewModel viewModel) { - if (vault.Services.GetRequiredService() is IServiceFactory factory) - { - if (factory.Create(configuration.Name) is VaultNavigationViewModel viewModel) - { - await publisher.Publish(new Create(viewModel), - nameof(MainViewModel), cancellationToken); - } - } + await publisher.Publish(new Create(viewModel), + nameof(MainViewModel), cancellationToken); } } }