From 929d72e4e8db115bbeed412076feefe915323c20 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Tue, 2 Jul 2024 12:44:07 +0100 Subject: [PATCH] wip retrieve image from db --- Wallet.Avalonia/App.axaml.cs | 3 +++ Wallet/ItemHandler.cs | 1 + Wallet/ItemImage.cs | 5 +++++ Wallet/ItemImageHandler.cs | 38 ++++++++++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 Wallet/ItemImage.cs create mode 100644 Wallet/ItemImageHandler.cs diff --git a/Wallet.Avalonia/App.axaml.cs b/Wallet.Avalonia/App.axaml.cs index 3c1f658..30e19a4 100644 --- a/Wallet.Avalonia/App.axaml.cs +++ b/Wallet.Avalonia/App.axaml.cs @@ -114,7 +114,10 @@ public partial class App : Application services.AddHandler(); services.AddHandler(); + services.AddHandler(); + services.AddHandler(); + services.AddHandler(); services.AddHandler(); services.AddHandler(); diff --git a/Wallet/ItemHandler.cs b/Wallet/ItemHandler.cs index c64a250..05408bf 100644 --- a/Wallet/ItemHandler.cs +++ b/Wallet/ItemHandler.cs @@ -22,6 +22,7 @@ public class ItemHandler(IDbContextFactory dbContextFactory) : { x.Id, x.Name, + HasImage = x.ImageId != null, x.Description, x.Category, Blob = x.Blobs diff --git a/Wallet/ItemImage.cs b/Wallet/ItemImage.cs new file mode 100644 index 0000000..c61d099 --- /dev/null +++ b/Wallet/ItemImage.cs @@ -0,0 +1,5 @@ +namespace Wallet; + +public record ItemImage; + +public record ItemImage(TValue Value); \ No newline at end of file diff --git a/Wallet/ItemImageHandler.cs b/Wallet/ItemImageHandler.cs new file mode 100644 index 0000000..83074e4 --- /dev/null +++ b/Wallet/ItemImageHandler.cs @@ -0,0 +1,38 @@ +using Wallet.Data; +using Microsoft.EntityFrameworkCore; +using Toolkit.Foundation; + +namespace Wallet; + +public class ItemImageHandler(IDbContextFactory dbContextFactory, + IImageReader imageReader) : + IHandler>, IImageDescriptor?> +{ + public async Task Handle(RequestEventArgs> args, + CancellationToken cancellationToken) + { + if (args.Sender is ItemImage item) + { + Guid id = item.Value; + + using WalletContext context = await dbContextFactory.CreateDbContextAsync(cancellationToken); + var result = await context.Set() + .Where(x => x.Id == id) + .Select(x => new + { + x.Image + }) + .FirstOrDefaultAsync(cancellationToken); + + if (result is not null && + result.Image is BlobEntry image && + image.Data is { Length: > 0 } data) + { + MemoryStream stream = new(data); + return imageReader.Get(stream, 200, 200, true); + } + } + + return default; + } +}