This commit is contained in:
TheXamlGuy
2024-04-26 22:27:31 +01:00
parent fd8a20c081
commit bab5f218e8
30 changed files with 164 additions and 108 deletions
+3 -2
View File
@@ -26,7 +26,8 @@ public partial class App : Application
services.AddHandler<AppHandler>();
services.AddTransient<IVaultComponent, VaultComponent>();
services.AddInitializer<VaultConfigurationInitializer>();
services.AddTransient<IVaultFactory, VaultFactory>();
services.AddInitializer<VaultsInitializer>();
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime)
{
@@ -38,7 +39,7 @@ public partial class App : Application
services.AddHandler<VaultHandler>();
services.AddTemplate<MainViewModel, MainView>("Main");
services.AddHandler<MainViewModelHandler>();
services.AddHandler<VaultNavigationViewModelHandler>();
services.AddTransient<FooterViewModel>();
+3 -2
View File
@@ -1,5 +1,4 @@
using Microsoft.Extensions.DependencyInjection;
using Toolkit.Foundation;
using Toolkit.Foundation;
namespace Bitvault.Avalonia;
@@ -10,6 +9,8 @@ public class VaultComponent :
ComponentBuilder.Create()
.AddServices(services =>
{
services.AddInitializer<VaultInitializer>();
services.AddTemplate<VaultNavigationViewModel, VaultNavigationView>();
services.AddTemplate<AllNavigationViewModel, AllNavigationView>();
services.AddTemplate<StarredNavigationViewModel, StarredNavigationView>();
+4 -3
View File
@@ -2,10 +2,11 @@
namespace Bitvault;
public class AllNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class AllNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer),
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
IMainNavigationViewModel;
+4 -3
View File
@@ -2,10 +2,11 @@
namespace Bitvault;
public class ArchiveNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class ArchiveNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer),
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
IMainNavigationViewModel;
+1
View File
@@ -6,6 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageReference Include="LiteDB" Version="5.0.19" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.0-preview.3.24172.9" />
</ItemGroup>
<ItemGroup>
+4 -3
View File
@@ -2,10 +2,11 @@
namespace Bitvault;
public class CategoriesNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class CategoriesNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer),
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
IMainNavigationViewModel;
+8 -13
View File
@@ -2,16 +2,11 @@
namespace Bitvault;
public partial class CreateVaultNavigationViewModel :
ObservableViewModel,
IMainNavigationViewModel
{
public CreateVaultNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
{
}
}
public partial class CreateVaultNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
IMainNavigationViewModel;
+4 -3
View File
@@ -4,12 +4,13 @@ using Toolkit.Foundation;
namespace Bitvault;
public partial class CreateVaultViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public partial class CreateVaultViewModel(IServiceProvider provider,
IServiceFactory factory,
IPublisher publisher,
IMediator mediator,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer),
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
IPrimaryConfirmation
{
[MaybeNull]
+4 -3
View File
@@ -5,11 +5,12 @@ namespace Bitvault;
public partial class FooterViewModel :
ObservableCollectionViewModel<IMainNavigationViewModel>
{
public FooterViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public FooterViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
Add<ManageNavigationViewModel>();
}
+3 -2
View File
@@ -1,8 +1,9 @@
using Toolkit.Foundation;
namespace Bitvault
{
public interface IVaultFactory
{
Task CreateAsync(string name, VaultConfiguration configuration);
IComponentHost? Create(string name, VaultConfiguration configuration);
}
}
+5
View File
@@ -0,0 +1,5 @@
using Toolkit.Foundation;
namespace Bitvault;
public interface IVaultHost : IComponentHost;
+4 -9
View File
@@ -2,15 +2,10 @@
namespace Bitvault;
public class LockViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class LockViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer)
{
//public Task<bool> Confirm()
//{
// //return Task.FromResult(false);
//}
}
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer);
+2 -4
View File
@@ -1,5 +1,3 @@
using Toolkit.Foundation;
namespace Bitvault;
namespace Bitvault;
public record Locked : INotification;
public record Locked;
+4 -3
View File
@@ -2,9 +2,10 @@
namespace Bitvault;
public class LockerNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class LockerNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer);
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer);
+4 -3
View File
@@ -2,9 +2,10 @@
namespace Bitvault;
public class LockerViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class LockerViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer);
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer);
+4 -3
View File
@@ -10,13 +10,14 @@ public partial class MainViewModel :
[ObservableProperty]
private FooterViewModel footer;
public MainViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public MainViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer,
IContentTemplate template,
FooterViewModel footer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
FooterViewModel footer) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
Template = template;
Footer = footer;
+4 -3
View File
@@ -2,9 +2,10 @@
namespace Bitvault;
public class MainWindowViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class MainWindowViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer);
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer);
+4 -3
View File
@@ -6,11 +6,12 @@ public partial class ManageNavigationViewModel :
ObservableViewModel,
IMainNavigationViewModel
{
public ManageNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public ManageNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
}
+4 -3
View File
@@ -7,12 +7,13 @@ public partial class ManageViewModel :
ObservableCollectionViewModel,
IMainNavigationViewModel
{
public ManageViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public ManageViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer,
IContentTemplate template) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
IContentTemplate template) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
Template = template;
+4 -3
View File
@@ -2,10 +2,11 @@
namespace Bitvault;
public class StarredNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class StarredNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer),
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
IMainNavigationViewModel;
+2 -4
View File
@@ -1,5 +1,3 @@
using Toolkit.Foundation;
namespace Bitvault;
namespace Bitvault;
public record Unlocked : INotification;
public record Unlocked;
-16
View File
@@ -1,16 +0,0 @@
using Toolkit.Foundation;
namespace Bitvault;
public class VaultConfigurationInitializer(IEnumerable<IConfigurationDescriptor<VaultConfiguration>> configurations,
IVaultFactory factory) : IInitializer
{
public async Task Initialize()
{
foreach (IConfigurationDescriptor<VaultConfiguration> configuration in configurations)
{
await factory.CreateAsync(configuration.Section,
configuration.Value);
}
}
}
+4 -2
View File
@@ -8,7 +8,7 @@ public class VaultFactory(IServiceProvider provider,
IComponentScopeCollection scopes,
IVaultHostCollection vaults) : IVaultFactory
{
public async Task CreateAsync(string name,
public IComponentHost? Create(string name,
VaultConfiguration configuration)
{
if (provider.GetRequiredService<IVaultComponent>() is IVaultComponent component)
@@ -45,7 +45,9 @@ public class VaultFactory(IServiceProvider provider,
host.Services.GetRequiredService<IServiceProvider>()));
vaults.Add(host);
await host.StartAsync();
return host;
}
return default;
}
}
+27 -6
View File
@@ -2,14 +2,35 @@
namespace Bitvault;
public class VaultHandler(IVaultFactory factory) : INotificationHandler<Create<Vault>>
public class VaultStorageHandler :
INotificationHandler<Create<VaultStorage>>
{
public async Task Handle(Create<Vault> args,
public Task Handle(Create<VaultStorage> args,
CancellationToken cancellationToken = default)
{
if (args.Value is Vault vault)
{
await factory.CreateAsync($"Vault:{vault.Name}", new VaultConfiguration { Name = vault.Name });
}
throw new NotImplementedException();
}
}
public record VaultStorage(string Name);
public class VaultHandler(IVaultFactory factory) :
IHandler<Create<Vault>, bool>
{
//public async Task Handle(Create<Vault> 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<bool> Handle(Create<Vault> args, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}
+1 -4
View File
@@ -9,10 +9,7 @@ public class VaultHostCollection :
{
private readonly List<IComponentHost> hosts = [];
public void Add(IComponentHost host)
{
hosts.Add(host);
}
public void Add(IComponentHost host) => hosts.Add(host);
public IEnumerator<IComponentHost> GetEnumerator() =>
hosts.GetEnumerator();
+26
View File
@@ -0,0 +1,26 @@
using Microsoft.Extensions.DependencyInjection;
using Toolkit.Foundation;
namespace Bitvault;
public class VaultInitializer(IServiceProvider provider,
IProxyService<IPublisher> publisher) : IInitializer
{
public async Task Initialize()
{
if (provider.GetService<IComponentHost>() is IComponentHost vault)
{
if (vault.Services.GetRequiredService<VaultConfiguration>() is VaultConfiguration configuration)
{
if (vault.Services.GetRequiredService<IServiceFactory>() is IServiceFactory factory)
{
if (factory.Create<VaultNavigationViewModel>(configuration.Name) is VaultNavigationViewModel viewModel)
{
await publisher.Proxy.Publish(new Create<IMainNavigationViewModel>(viewModel),
nameof(MainViewModel));
}
}
}
}
}
}
+4 -4
View File
@@ -15,19 +15,19 @@ public partial class VaultNavigationViewModel :
[ObservableProperty]
private string name;
public VaultNavigationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public VaultNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer,
IContentTemplate template,
string name) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
string name) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
Template = template;
Name = name;
}
public IContentTemplate Template { get; set; }
@@ -3,7 +3,7 @@ using Toolkit.Foundation;
namespace Bitvault;
public class MainViewModelHandler(IPublisher publisher,
public class VaultNavigationViewModelHandler(IPublisher publisher,
IVaultHostCollection vaults) :
INotificationHandler<Enumerate<IMainNavigationViewModel>>
{
+4 -3
View File
@@ -2,9 +2,10 @@
namespace Bitvault;
public class VaultViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
public class VaultViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer);
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer);
+18
View File
@@ -0,0 +1,18 @@
using Toolkit.Foundation;
namespace Bitvault;
public class VaultsInitializer(IEnumerable<IConfigurationDescriptor<VaultConfiguration>> configurations,
IVaultFactory factory) : IInitializer
{
public async Task Initialize()
{
foreach (IConfigurationDescriptor<VaultConfiguration> configuration in configurations)
{
if (factory.Create(configuration.Section, configuration.Value) is IComponentHost host)
{
await host.StartAsync();
}
}
}
}