From a6cd15bfdbe993809160a3216b15723954a260d1 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 20 Apr 2023 23:54:36 -0400 Subject: [PATCH] Support default extension --- .../Platform/Storage/FileIO/StorageProviderHelpers.cs | 3 ++- .../Avalonia.Browser/Storage/BrowserStorageProvider.cs | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs b/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs index 608f924808..55aac6f3fa 100644 --- a/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs +++ b/src/Avalonia.Base/Platform/Storage/FileIO/StorageProviderHelpers.cs @@ -50,7 +50,8 @@ internal static class StorageProviderHelpers } } - public static string NameWithExtension(string path, string? defaultExtension, FilePickerFileType? filter) + [return: NotNullIfNotNull(nameof(path))] + public static string? NameWithExtension(string? path, string? defaultExtension, FilePickerFileType? filter) { var name = Path.GetFileName(path); if (name != null && !Path.HasExtension(name)) diff --git a/src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs b/src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs index 7c0b09cc16..a28fd4cbde 100644 --- a/src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs +++ b/src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs @@ -6,6 +6,7 @@ using System.Runtime.InteropServices.JavaScript; using System.Threading.Tasks; using Avalonia.Browser.Interop; using Avalonia.Platform.Storage; +using Avalonia.Platform.Storage.FileIO; namespace Avalonia.Browser.Storage; @@ -64,7 +65,9 @@ internal class BrowserStorageProvider : IStorageProvider try { - var item = await StorageHelper.SaveFileDialog(startIn, options.SuggestedFileName, types, excludeAll, PreferPolyfill); + var suggestedName = + StorageProviderHelpers.NameWithExtension(options.SuggestedFileName, options.DefaultExtension, null); + var item = await StorageHelper.SaveFileDialog(startIn, suggestedName, types, excludeAll, PreferPolyfill); return item is not null ? new JSStorageFile(item) : null; } catch (JSException ex) when (ex.Message.Contains(PickerCancelMessage, StringComparison.Ordinal))