Changing to only load vaults on demand
This commit is contained in:
@@ -39,6 +39,8 @@ public partial class App : Application
|
|||||||
services.AddHandler<VaultHandler>();
|
services.AddHandler<VaultHandler>();
|
||||||
|
|
||||||
services.AddTemplate<MainViewModel, MainView>("Main");
|
services.AddTemplate<MainViewModel, MainView>("Main");
|
||||||
|
|
||||||
|
services.AddTemplate<VaultNavigationViewModel, VaultNavigationView>();
|
||||||
services.AddHandler<VaultNavigationViewModelHandler>();
|
services.AddHandler<VaultNavigationViewModelHandler>();
|
||||||
|
|
||||||
services.AddTransient<FooterViewModel>();
|
services.AddTransient<FooterViewModel>();
|
||||||
|
|||||||
@@ -9,9 +9,8 @@ public class VaultComponent :
|
|||||||
ComponentBuilder.Create()
|
ComponentBuilder.Create()
|
||||||
.AddServices(services =>
|
.AddServices(services =>
|
||||||
{
|
{
|
||||||
services.AddInitializer<VaultInitializer>();
|
// services.AddInitializer<VaultInitializer>();
|
||||||
|
|
||||||
services.AddTemplate<VaultNavigationViewModel, VaultNavigationView>();
|
|
||||||
services.AddTemplate<AllNavigationViewModel, AllNavigationView>();
|
services.AddTemplate<AllNavigationViewModel, AllNavigationView>();
|
||||||
services.AddTemplate<StarredNavigationViewModel, StarredNavigationView>();
|
services.AddTemplate<StarredNavigationViewModel, StarredNavigationView>();
|
||||||
services.AddTemplate<CategoriesNavigationViewModel, CategoriesNavigationView>();
|
services.AddTemplate<CategoriesNavigationViewModel, CategoriesNavigationView>();
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ public class AllNavigationViewModel(IServiceProvider provider,
|
|||||||
ISubscriber subscriber,
|
ISubscriber subscriber,
|
||||||
IDisposer disposer) :
|
IDisposer disposer) :
|
||||||
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
||||||
IMainNavigationViewModel;
|
IVaultNavigationViewModel;
|
||||||
@@ -9,4 +9,4 @@ public class ArchiveNavigationViewModel(IServiceProvider provider,
|
|||||||
ISubscriber subscriber,
|
ISubscriber subscriber,
|
||||||
IDisposer disposer) :
|
IDisposer disposer) :
|
||||||
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
||||||
IMainNavigationViewModel;
|
IVaultNavigationViewModel;
|
||||||
@@ -9,4 +9,4 @@ public class CategoriesNavigationViewModel(IServiceProvider provider,
|
|||||||
ISubscriber subscriber,
|
ISubscriber subscriber,
|
||||||
IDisposer disposer) :
|
IDisposer disposer) :
|
||||||
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
||||||
IMainNavigationViewModel;
|
IVaultNavigationViewModel;
|
||||||
@@ -19,7 +19,6 @@ public partial class CreateVaultViewModel(IServiceProvider provider,
|
|||||||
|
|
||||||
public async Task<bool> Confirm()
|
public async Task<bool> Confirm()
|
||||||
{
|
{
|
||||||
await Publisher.Publish(Create.As(new Vault(Name)));
|
return await Mediator.Handle<Create<Vault>, bool>(Create.As(new Vault(Name)));
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public interface IMainNavigationViewModel;
|
public interface IMainNavigationViewModel;
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
namespace Bitvault;
|
||||||
|
|
||||||
|
public interface IVaultNavigationViewModel;
|
||||||
@@ -9,4 +9,4 @@ public class StarredNavigationViewModel(IServiceProvider provider,
|
|||||||
ISubscriber subscriber,
|
ISubscriber subscriber,
|
||||||
IDisposer disposer) :
|
IDisposer disposer) :
|
||||||
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
||||||
IMainNavigationViewModel;
|
IVaultNavigationViewModel;
|
||||||
+19
-17
@@ -1,35 +1,37 @@
|
|||||||
using Toolkit.Foundation;
|
using LiteDB;
|
||||||
|
using Toolkit.Foundation;
|
||||||
|
|
||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public class VaultStorageHandler :
|
public class VaultStorageHandler :
|
||||||
INotificationHandler<Create<VaultStorage>>
|
IHandler<Create<VaultStorage>, bool>
|
||||||
{
|
{
|
||||||
public Task Handle(Create<VaultStorage> args,
|
public Task<bool> Handle(Create<VaultStorage> args, CancellationToken cancellationToken)
|
||||||
CancellationToken cancellationToken = default)
|
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DatabaseFactory
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public record VaultStorage(string Name);
|
public record VaultStorage(string Name);
|
||||||
|
|
||||||
public class VaultHandler(IVaultFactory factory) :
|
public class VaultHandler(IVaultFactory factory) :
|
||||||
IHandler<Create<Vault>, bool>
|
IHandler<Create<Vault>, bool>
|
||||||
{
|
{
|
||||||
//public async Task Handle(Create<Vault> args,
|
public async Task<bool> Handle(Create<Vault> args, CancellationToken cancellationToken)
|
||||||
// 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<bool> Handle(Create<Vault> 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ using Toolkit.Foundation;
|
|||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public partial class VaultNavigationViewModel :
|
public partial class VaultNavigationViewModel :
|
||||||
ObservableCollectionViewModel<IMainNavigationViewModel>,
|
ObservableCollectionViewModel<IVaultNavigationViewModel>,
|
||||||
IMainNavigationViewModel,
|
IMainNavigationViewModel,
|
||||||
INotificationHandler<Unlocked>,
|
INotificationHandler<Unlocked>,
|
||||||
INotificationHandler<Locked>
|
INotificationHandler<Locked>
|
||||||
|
|||||||
@@ -1,27 +1,21 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Toolkit.Foundation;
|
||||||
using Toolkit.Foundation;
|
|
||||||
|
|
||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public class VaultNavigationViewModelHandler(IPublisher publisher,
|
public class VaultNavigationViewModelHandler(IPublisher publisher,
|
||||||
IVaultHostCollection vaults) :
|
IServiceFactory factory,
|
||||||
|
IEnumerable<IConfigurationDescriptor<VaultConfiguration>> descriptors) :
|
||||||
INotificationHandler<Enumerate<IMainNavigationViewModel>>
|
INotificationHandler<Enumerate<IMainNavigationViewModel>>
|
||||||
{
|
{
|
||||||
public async Task Handle(Enumerate<IMainNavigationViewModel> args,
|
public async Task Handle(Enumerate<IMainNavigationViewModel> args,
|
||||||
CancellationToken cancellationToken = default)
|
CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
foreach (IComponentHost vault in vaults)
|
foreach (IConfigurationDescriptor<VaultConfiguration> descriptor in descriptors)
|
||||||
{
|
{
|
||||||
if (vault.Services.GetRequiredService<VaultConfiguration>() is VaultConfiguration configuration)
|
if (factory.Create<VaultNavigationViewModel>(descriptor.Value.Name) is VaultNavigationViewModel viewModel)
|
||||||
{
|
{
|
||||||
if (vault.Services.GetRequiredService<IServiceFactory>() is IServiceFactory factory)
|
await publisher.Publish(new Create<IMainNavigationViewModel>(viewModel),
|
||||||
{
|
nameof(MainViewModel), cancellationToken);
|
||||||
if (factory.Create<VaultNavigationViewModel>(configuration.Name) is VaultNavigationViewModel viewModel)
|
|
||||||
{
|
|
||||||
await publisher.Publish(new Create<IMainNavigationViewModel>(viewModel),
|
|
||||||
nameof(MainViewModel), cancellationToken);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user