Add wallet profile image loading

This commit is contained in:
TheXamlGuy
2024-06-29 21:52:31 +01:00
parent 92a7fc7c42
commit 97c9405283
12 changed files with 85 additions and 36 deletions
+24
View File
@@ -0,0 +1,24 @@
using Toolkit.Foundation;
namespace Wallet;
public class CreateProfileImageHandler(IFileProvider fileProvider,
IImageReader imageReader) :
IHandler<CreateEventArgs<ProfileImage>, IImageDescriptor?>
{
public async Task<IImageDescriptor?> Handle(CreateEventArgs<ProfileImage> args,
CancellationToken cancellationToken)
{
if (await fileProvider.SelectFiles(new FileFilter("Image files", ["jpg", "jpeg", "png"]))
is { Count: 1 } files)
{
if (files.FirstOrDefault() is string file)
{
using FileStream stream = File.OpenRead(file);
return imageReader.Get(stream, 200, 200, true);
}
}
return default;
}
}
+2 -2
View File
@@ -62,8 +62,8 @@ public partial class CreateWalletViewModel :
}
[RelayCommand]
public async Task Import() => ImageDescriptor = await Mediator.Handle<ReadEventArgs<ProfileImage>,
IImageDescriptor>(Read.As<ProfileImage>());
public async Task Import() => ImageDescriptor = await Mediator.Handle<CreateEventArgs<ProfileImage>,
IImageDescriptor>(Create.As<ProfileImage>());
protected override void OnPropertyChanged(PropertyChangedEventArgs args)
{
+7 -1
View File
@@ -13,6 +13,9 @@ public partial class OpenWalletViewModel : Observable
[ObservableProperty]
private string? name;
[ObservableProperty]
private IImageDescriptor imageDescriptor;
[MaybeNull]
[ObservableProperty]
private string password;
@@ -24,10 +27,13 @@ public partial class OpenWalletViewModel : Observable
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer,
string name) : base(provider, factory, mediator, publisher, subscriber, disposer)
string name,
IImageDescriptor imageDescriptor) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
this.validation = validation;
Name = name;
ImageDescriptor = imageDescriptor;
}
[RelayCommand]
-23
View File
@@ -1,23 +0,0 @@
using Toolkit.Foundation;
namespace Wallet;
public class ReadProfileImageHandler(IFileProvider fileProvider,
IImageReader imageReader) :
IHandler<ReadEventArgs<ProfileImage>, IImageDescriptor?>
{
public async Task<IImageDescriptor?> Handle(ReadEventArgs<ProfileImage> args,
CancellationToken cancellationToken)
{
if (await fileProvider.SelectFiles(new FileFilter("Image files", ["jpg", "jpeg", "png"])) is { Count: 1 } files)
{
if (files.FirstOrDefault() is string file)
{
await using FileStream stream = File.OpenRead(file);
return await imageReader.Get(stream, 200, 200, true);
}
}
return default;
}
}
+6 -2
View File
@@ -15,11 +15,15 @@ public class SynchronizeMainViewModelHandler(IPublisher publisher,
is IConfigurationDescriptor<WalletConfiguration> descriptor ? descriptor.Name : null))
{
if (Wallet.Services.GetRequiredService<IConfigurationDescriptor<WalletConfiguration>>()
is IConfigurationDescriptor<WalletConfiguration> descriptor)
is IConfigurationDescriptor<WalletConfiguration> configuration)
{
if (Wallet.Services.GetRequiredService<IServiceFactory>() is IServiceFactory factory)
{
if (factory.Create<WalletNavigationViewModel>(args => args.Initialize(), descriptor.Name, selected)
IDecoratorService<ProfileImage<IImageDescriptor>> profileImageDecorator =
Wallet.Services.GetRequiredService<IDecoratorService<ProfileImage<IImageDescriptor>>>();
ProfileImage<IImageDescriptor>? profileImage = profileImageDecorator.Service;
if (factory.Create<WalletNavigationViewModel>(args => args.Initialize(), configuration.Name, profileImage?.Value, selected)
is WalletNavigationViewModel viewModel)
{
publisher.Publish(Create.As<IMainNavigationViewModel>(viewModel),
+3 -3
View File
@@ -8,7 +8,7 @@ public class WalletCollectionInitializer(IHostEnvironment environment,
IWalletHostCollection Wallets) :
IInitialization
{
public async Task Initialize()
public void Initialize()
{
foreach (string wallet in Directory.EnumerateDirectories(Path.Combine(environment.ContentRootPath, "Wallet")))
{
@@ -16,11 +16,11 @@ public class WalletCollectionInitializer(IHostEnvironment environment,
string section = $"Wallet:{name}";
if (componentFactory.Create<WalletComponent,
WalletConfiguration>(section)
WalletConfiguration>(section, new WalletConfiguration())
is IComponentHost host)
{
Wallets.Add(host);
await host.StartAsync();
host.Start();
}
}
}
+2 -1
View File
@@ -10,9 +10,10 @@ public class WalletComponent(IHostEnvironment environment,
public override IComponentBuilder Configuring(string key,
IComponentBuilder builder)
{
string path = Path.Combine(environment.ContentRootPath, key.Replace(":", "\\"));
builder.SetComponentConfiguration(args =>
{
args.ContentRoot = Path.Combine(environment.ContentRootPath, key.Replace(":", "\\"));
args.ContentRoot = Path.Combine(path);
});
return base.Configuring(key, builder);
+5
View File
@@ -27,6 +27,9 @@ public partial class WalletNavigationViewModel :
[ObservableProperty]
private bool isActivated;
[ObservableProperty]
private IImageDescriptor imageDescriptor;
public WalletNavigationViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
@@ -35,10 +38,12 @@ public partial class WalletNavigationViewModel :
IDisposer disposer,
IContentTemplate template,
string name,
IImageDescriptor imageDescriptor,
bool isSelected) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
Template = template;
Name = name;
ImageDescriptor = imageDescriptor;
IsSelected = isSelected;
}
+22
View File
@@ -0,0 +1,22 @@
using Microsoft.Extensions.Hosting;
using Toolkit.Foundation;
namespace Wallet;
public class WalletProfileImageInitializer(IHostEnvironment environment,
IImageReader reader,
IDecoratorService<ProfileImage<IImageDescriptor>> profileImageDecorator) :
IInitialization
{
public void Initialize()
{
string file = Path.Combine(environment.ContentRootPath, "Thumbnail.png");
if (File.Exists(file))
{
using FileStream stream = File.OpenRead(file);
IImageDescriptor imageDescriptor = reader.Get(stream, 200, 200);
profileImageDecorator.Set(new ProfileImage<IImageDescriptor>(imageDescriptor));
}
}
}