From 506161e4b9fac3508924d5b593d34dec26886313 Mon Sep 17 00:00:00 2001 From: "dan_clark@outlook.com" Date: Thu, 24 Mar 2022 20:09:10 +0000 Subject: [PATCH] WIP memory iconstorage --- TheXamlGuy.TaskbarGroup.Core/Class1.cs | 13 ++++++ TheXamlGuy.TaskbarGroup.Core/IconStorage.cs | 4 ++ .../IconStorageHandler.cs | 12 ++++++ .../Drag.cs | 5 +-- .../Drop.cs | 5 +-- .../DropTarget.cs | 19 +++----- .../IDragHandler.cs | 2 +- .../IDropHandler.cs | 2 +- .../IStorageItemExtensions.cs | 15 +++++++ ...lGuy.TaskbarGroup.Flyout.Foundation.csproj | 1 + .../Views/TaskbarButtonGroupDragHandler.cs | 4 +- .../Views/TaskbarButtonGroupDropHandler.cs | 43 ++++++++----------- TheXamlGuy.TaskbarGroup/App.xaml.cs | 7 +-- .../Windows/TaskbarButtonFlyoutWindow.cs | 1 - 14 files changed, 79 insertions(+), 54 deletions(-) create mode 100644 TheXamlGuy.TaskbarGroup.Core/Class1.cs create mode 100644 TheXamlGuy.TaskbarGroup.Core/IconStorage.cs create mode 100644 TheXamlGuy.TaskbarGroup.Core/IconStorageHandler.cs create mode 100644 TheXamlGuy.TaskbarGroup.Flyout.Foundation/IStorageItemExtensions.cs diff --git a/TheXamlGuy.TaskbarGroup.Core/Class1.cs b/TheXamlGuy.TaskbarGroup.Core/Class1.cs new file mode 100644 index 0000000..7feb395 --- /dev/null +++ b/TheXamlGuy.TaskbarGroup.Core/Class1.cs @@ -0,0 +1,13 @@ +namespace TheXamlGuy.TaskbarGroup.Core +{ + public static class Class1 + { + public static void Test(Stream s) + { + using (FileStream outputFileStream = new(@"C:\Users\Daniel Clark\Pictures\trst.png", FileMode.Create)) + { + s.CopyTo(outputFileStream); + } + } + } +} diff --git a/TheXamlGuy.TaskbarGroup.Core/IconStorage.cs b/TheXamlGuy.TaskbarGroup.Core/IconStorage.cs new file mode 100644 index 0000000..fcfef18 --- /dev/null +++ b/TheXamlGuy.TaskbarGroup.Core/IconStorage.cs @@ -0,0 +1,4 @@ +namespace TheXamlGuy.TaskbarGroup.Core +{ + public record IconStorage(string Path, Stream IconStream); +} diff --git a/TheXamlGuy.TaskbarGroup.Core/IconStorageHandler.cs b/TheXamlGuy.TaskbarGroup.Core/IconStorageHandler.cs new file mode 100644 index 0000000..9f8583b --- /dev/null +++ b/TheXamlGuy.TaskbarGroup.Core/IconStorageHandler.cs @@ -0,0 +1,12 @@ +using System.Diagnostics; + +namespace TheXamlGuy.TaskbarGroup.Core +{ + public class IconStorageHandler : IMessageHandler + { + public void Handle(IconStorage message) + { + Debug.WriteLine("Store icon"); + } + } +} diff --git a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drag.cs b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drag.cs index 071ece5..5c8e390 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drag.cs +++ b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drag.cs @@ -2,8 +2,5 @@ namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation { - public record class Drag(DragEventArgs DragEventArgs) where TTarget : UIElement - { - public TTarget Target { get; } - } + public record class Drag(DragEventArgs DragEventArgs) where TTarget : UIElement; } diff --git a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drop.cs b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drop.cs index e9e430f..7aa50c0 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drop.cs +++ b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/Drop.cs @@ -2,8 +2,5 @@ namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation { - public record class Drop(DragEventArgs DropEventArgs) where TTarget : UIElement - { - public TTarget Target { get; } - } + public record class Drop(DragEventArgs DropEventArgs) where TTarget : UIElement; } diff --git a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/DropTarget.cs b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/DropTarget.cs index 583a7de..9f6e738 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/DropTarget.cs +++ b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/DropTarget.cs @@ -1,7 +1,6 @@ using Microsoft.Xaml.Interactivity; using System; using TheXamlGuy.TaskbarGroup.Core; -using Windows.ApplicationModel.DataTransfer; using Windows.UI.Xaml; namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation @@ -30,24 +29,19 @@ namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation base.OnAttached(); } - private object CreateDragMessage(object sender, DragEventArgs args) + protected override void OnDetaching() { - var dropMessageType = typeof(Drag<>).MakeGenericType(sender.GetType()); - return Activator.CreateInstance(dropMessageType, args); - } + AssociatedObject.DragOver -= OnDragOver; + AssociatedObject.Drop -= OnDrop; - private object CreateDropMessage(object sender, DragEventArgs args) - { - var dropMessageType = typeof(Drop<>).MakeGenericType(sender.GetType()); - return Activator.CreateInstance(dropMessageType, args); + base.OnDetaching(); } private void OnDragOver(object sender, DragEventArgs args) { if (Mediator is not null) { - var message = CreateDragMessage(sender, args); - Mediator.HandleAsync(message); + Mediator.Handle(Activator.CreateInstance(typeof(Drag<>).MakeGenericType(sender.GetType()), args)); } } @@ -55,8 +49,7 @@ namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation { if (Mediator is not null) { - var message = CreateDropMessage(sender, args); - Mediator.HandleAsync(message); + Mediator.Handle(Activator.CreateInstance(typeof(Drop<>).MakeGenericType(sender.GetType()), args)); } } } diff --git a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDragHandler.cs b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDragHandler.cs index 19dab35..d326711 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDragHandler.cs +++ b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDragHandler.cs @@ -3,7 +3,7 @@ using Windows.UI.Xaml; namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation { - public interface IDragHandler : IAsyncMessageHandler> where TTarget : UIElement + public interface IDragHandler : IMessageHandler> where TTarget : UIElement { } diff --git a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDropHandler.cs b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDropHandler.cs index 58cb6cc..5758aab 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDropHandler.cs +++ b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IDropHandler.cs @@ -3,7 +3,7 @@ using Windows.UI.Xaml; namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation { - public interface IDropHandler : IAsyncMessageHandler> where TTarget : UIElement + public interface IDropHandler : IMessageHandler> where TTarget : UIElement { } diff --git a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IStorageItemExtensions.cs b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IStorageItemExtensions.cs new file mode 100644 index 0000000..cb729d3 --- /dev/null +++ b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/IStorageItemExtensions.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Windows.Storage; + +namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation +{ + public static class IStorageItemExtensions + { + public static async Task> RetrievePropertiesAsync(this IStorageItem storageFile, params string[] paramaters) + { + return await (await storageFile.GetBasicPropertiesAsync()).RetrievePropertiesAsync(paramaters); + } + } +} diff --git a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/TheXamlGuy.TaskbarGroup.Flyout.Foundation.csproj b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/TheXamlGuy.TaskbarGroup.Flyout.Foundation.csproj index 194ae72..0967c41 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout.Foundation/TheXamlGuy.TaskbarGroup.Flyout.Foundation.csproj +++ b/TheXamlGuy.TaskbarGroup.Flyout.Foundation/TheXamlGuy.TaskbarGroup.Flyout.Foundation.csproj @@ -130,6 +130,7 @@ + diff --git a/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDragHandler.cs b/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDragHandler.cs index ff1b887..7ebe407 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDragHandler.cs +++ b/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDragHandler.cs @@ -7,7 +7,7 @@ namespace TheXamlGuy.TaskbarGroup.Flyout { public class TaskbarButtonGroupDragHandler : IDragHandler { - public Task Handle(Drag message, CancellationToken canellationToken = default) + public void Handle(Drag message) { message.DragEventArgs.AcceptedOperation = DataPackageOperation.Link; @@ -17,8 +17,6 @@ namespace TheXamlGuy.TaskbarGroup.Flyout message.DragEventArgs.DragUIOverride.IsGlyphVisible = false; message.DragEventArgs.DragUIOverride.IsCaptionVisible = false; } - - return Task.CompletedTask; } } } diff --git a/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDropHandler.cs b/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDropHandler.cs index 9e42bce..6831b64 100644 --- a/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDropHandler.cs +++ b/TheXamlGuy.TaskbarGroup.Flyout/Views/TaskbarButtonGroupDropHandler.cs @@ -1,46 +1,41 @@ using System; -using System.Collections.Generic; +using System.IO; using System.Threading; using System.Threading.Tasks; +using TheXamlGuy.TaskbarGroup.Core; using TheXamlGuy.TaskbarGroup.Flyout.Foundation; using Windows.ApplicationModel.DataTransfer; using Windows.Storage; +using Windows.Storage.FileProperties; namespace TheXamlGuy.TaskbarGroup.Flyout { public class TaskbarButtonGroupDropHandler : IDropHandler { - public async Task Handle(Drop message, CancellationToken canellationToken = default) + private readonly IMediator mediator; + + public TaskbarButtonGroupDropHandler(IMediator mediator) + { + this.mediator = mediator; + } + + public async void Handle(Drop message) { if (message.DropEventArgs.DataView.Contains(StandardDataFormats.StorageItems)) { var items = await message.DropEventArgs.DataView.GetStorageItemsAsync(); - foreach (var storageItem in items) + foreach (IStorageItem storageItem in items) { - if (storageItem is StorageFile storageFile) + if ((await storageItem.RetrievePropertiesAsync("System.AppUserModel.ID")) + .TryGetValue("System.AppUserModel.ID", out var appUserModelId) + || File.Exists(storageItem.Path)) { - if (storageFile.Path is { Length: > 0 }) + if (storageItem is IStorageItemProperties storageItemProperties) { - + using var thumbnail = await storageItemProperties.GetThumbnailAsync(ThumbnailMode.SingleItem, 94); + using var stream = thumbnail.AsStreamForWrite(); + mediator.Handle(new IconStorage(appUserModelId is not null ? $"{appUserModelId}" : storageItem.Path, stream)); } - else - { - var properties = await storageFile.Properties.RetrievePropertiesAsync(new List - { - "System.AppUserModel.ID" - }); - - var appUserModelId = properties["System.AppUserModel.ID"]; - if (appUserModelId is not null) - { - - } - } - } - - if (storageItem is StorageFolder storageFolder) - { - } } } diff --git a/TheXamlGuy.TaskbarGroup/App.xaml.cs b/TheXamlGuy.TaskbarGroup/App.xaml.cs index 2862183..6381db1 100644 --- a/TheXamlGuy.TaskbarGroup/App.xaml.cs +++ b/TheXamlGuy.TaskbarGroup/App.xaml.cs @@ -41,9 +41,10 @@ namespace TheXamlGuy.TaskbarGroup .AddTransient() .AddTransient() .AddTransient() - .AddAsyncHandler() - .AddAsyncHandler() - .AddTransient(); + .AddHandler() + .AddHandler() + .AddTransient() + .AddHandler(); } } } diff --git a/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs b/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs index ab259af..5eef51e 100644 --- a/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs +++ b/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs @@ -8,7 +8,6 @@ namespace TheXamlGuy.TaskbarGroup { public class TaskbarButtonFlyoutWindow : TransparentXamlWindow { - public TaskbarButtonFlyoutWindow() { Deactivated += OnDeactivated;