From 9dba61d56dee86ede8847178705ce1d363710ce4 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 17 Mar 2023 23:23:10 +0900 Subject: [PATCH] Minor improvements of clipboard page demo --- .../ControlCatalog/Pages/ClipboardPage.xaml.cs | 3 ++- .../Storage/FileIO/StorageProviderHelpers.cs | 17 ++++++++++++++++- .../Storage/StorageProviderExtensions.cs | 16 +++++++++++++--- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs b/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs index f3890aa49a..b6b2ac7181 100644 --- a/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs +++ b/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs @@ -9,6 +9,7 @@ using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.Platform; using Avalonia.Platform.Storage; +using Avalonia.Platform.Storage.FileIO; namespace ControlCatalog.Pages { @@ -113,7 +114,7 @@ namespace ControlCatalog.Pages { var files = await clipboard.GetDataAsync(DataFormats.Files) as IEnumerable; - ClipboardContent.Text = files != null ? string.Join(Environment.NewLine, files.Select(f => f.Path)) : string.Empty; + ClipboardContent.Text = files != null ? string.Join(Environment.NewLine, files.Select(f => f.TryGetLocalPath() ?? f.Name)) : string.Empty; } } diff --git a/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs b/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs index a8cbffb417..608f924808 100644 --- a/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs +++ b/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Text; @@ -23,7 +24,7 @@ internal static class StorageProviderHelpers return null; } - + public static Uri FilePathToUri(string path) { var uriPath = new StringBuilder(path) @@ -35,6 +36,20 @@ internal static class StorageProviderHelpers return new UriBuilder("file", string.Empty) { Path = uriPath }.Uri; } + public static bool TryFilePathToUri(string path, [NotNullWhen(true)] out Uri? uri) + { + try + { + uri = FilePathToUri(path); + return true; + } + catch + { + uri = null; + return false; + } + } + public static string NameWithExtension(string path, string? defaultExtension, FilePickerFileType? filter) { var name = Path.GetFileName(path); diff --git a/src/Avalonia.Base/Platform/Storage/StorageProviderExtensions.cs b/src/Avalonia.Base/Platform/Storage/StorageProviderExtensions.cs index 1febb4506a..3933d23e4f 100644 --- a/src/Avalonia.Base/Platform/Storage/StorageProviderExtensions.cs +++ b/src/Avalonia.Base/Platform/Storage/StorageProviderExtensions.cs @@ -16,8 +16,13 @@ public static class StorageProviderExtensions { return Task.FromResult(StorageProviderHelpers.TryCreateBclStorageItem(filePath) as IStorageFile); } - - return provider.TryGetFileFromPathAsync(StorageProviderHelpers.FilePathToUri(filePath)); + + if (StorageProviderHelpers.TryFilePathToUri(filePath, out var uri)) + { + return provider.TryGetFileFromPathAsync(uri); + } + + return Task.FromResult(null); } /// @@ -29,7 +34,12 @@ public static class StorageProviderExtensions return Task.FromResult(StorageProviderHelpers.TryCreateBclStorageItem(folderPath) as IStorageFolder); } - return provider.TryGetFolderFromPathAsync(StorageProviderHelpers.FilePathToUri(folderPath)); + if (StorageProviderHelpers.TryFilePathToUri(folderPath, out var uri)) + { + return provider.TryGetFolderFromPathAsync(uri); + } + + return Task.FromResult(null); } ///