Browse Source

Fix: Browser StorageItem methods not working and handle conversion issue (#19708)

* Fix names in browser StorageHelpers methods import

* Fix returning handlers instead of files in BrowserStorageProvider

* Fix returning handles instead of storage items in Move, GetFile and GetFolder methods
Yury 1 month ago
parent
commit
4312daf75a

+ 4 - 4
src/Browser/Avalonia.Browser/Interop/StorageHelper.cs

@@ -56,16 +56,16 @@ internal static partial class StorageHelper
     [JSImport("StorageProvider.createAcceptType", AvaloniaModule.StorageModuleName)]
     public static partial JSObject CreateAcceptType(string description, string[] mimeTypes, string[]? extensions);
 
-    [JSImport("StorageProvider.deleteAsync", AvaloniaModule.StorageModuleName)]
+    [JSImport("StorageItem.deleteAsync", AvaloniaModule.StorageModuleName)]
     public static partial Task DeleteAsync(JSObject fileHandle);
     
-    [JSImport("StorageProvider.moveAsync", AvaloniaModule.StorageModuleName)]
+    [JSImport("StorageItem.moveAsync", AvaloniaModule.StorageModuleName)]
     public static partial Task<JSObject?> MoveAsync(JSObject fileHandle, JSObject destinationFolder);
     
-    [JSImport("StorageProvider.createFile", AvaloniaModule.StorageModuleName)]
+    [JSImport("StorageItem.createFile", AvaloniaModule.StorageModuleName)]
     public static partial Task<JSObject?> CreateFile(JSObject folderHandle, string name);
     
-    [JSImport("StorageProvider.createFolder", AvaloniaModule.StorageModuleName)]
+    [JSImport("StorageItem.createFolder", AvaloniaModule.StorageModuleName)]
     public static partial Task<JSObject?> CreateFolder(JSObject folderHandle, string name);
 
     [JSImport("StorageItem.getFile", AvaloniaModule.StorageModuleName)]

+ 22 - 14
src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs

@@ -235,11 +235,13 @@ internal abstract class JSStorageItem : IStorageBookmarkItem
             throw new InvalidOperationException("Destination folder must be initialized the StorageProvider API.");
         }
 
-        var storageItem = await StorageHelper.MoveAsync(FileHandle, folder.FileHandle);
-        if (storageItem is null)
+        var itemHandle = await StorageHelper.MoveAsync(FileHandle, folder.FileHandle);
+        if (itemHandle is null)
         {
             return null;
         }
+        
+        var storageItem = StorageHelper.StorageItemFromHandle(itemHandle)!;
 
         var kind = storageItem.GetPropertyAsString("kind");
         return kind switch
@@ -356,12 +358,13 @@ internal class JSStorageFolder : JSStorageItem, IStorageBookmarkFolder
     {
         try
         {
-            var storageFile = await StorageHelper.CreateFile(FileHandle, name);
-            if (storageFile is null)
+            var fileHandle = await StorageHelper.CreateFile(FileHandle, name);
+            if (fileHandle is null)
             {
                 return null;
             }
-
+            
+            var storageFile = StorageHelper.StorageItemFromHandle(fileHandle)!;
             return new JSStorageFile(storageFile);
         }
         catch (JSException ex) when (ex.Message == BrowserStorageProvider.NoPermissionsMessage)
@@ -374,13 +377,14 @@ internal class JSStorageFolder : JSStorageItem, IStorageBookmarkFolder
     {
         try
         {
-            var storageFile = await StorageHelper.CreateFolder(FileHandle, name);
-            if (storageFile is null)
+            var folderHandler = await StorageHelper.CreateFolder(FileHandle, name);
+            if (folderHandler is null)
             {
                 return null;
             }
-
-            return new JSStorageFolder(storageFile);
+            
+            var storageFolder = StorageHelper.StorageItemFromHandle(folderHandler)!;
+            return new JSStorageFolder(storageFolder);
         }
         catch (JSException ex) when (ex.Message == BrowserStorageProvider.NoPermissionsMessage)
         {
@@ -392,13 +396,15 @@ internal class JSStorageFolder : JSStorageItem, IStorageBookmarkFolder
     {
         try
         {
-            var storageFile = await StorageHelper.GetFolder(FileHandle, name);
-            if (storageFile is null)
+            var folderHandle = await StorageHelper.GetFolder(FileHandle, name);
+            if (folderHandle is null)
             {
                 return null;
             }
+            
+            var storageFolder = StorageHelper.StorageItemFromHandle(folderHandle)!;
 
-            return new JSStorageFolder(storageFile);
+            return new JSStorageFolder(storageFolder);
         }
         catch (JSException ex) when (ShouldSupressErrorOnFileAccess(ex))
         {
@@ -410,11 +416,13 @@ internal class JSStorageFolder : JSStorageItem, IStorageBookmarkFolder
     {
         try
         {
-            var storageFile = await StorageHelper.GetFile(FileHandle, name);
-            if (storageFile is null)
+            var fileHandle = await StorageHelper.GetFile(FileHandle, name);
+            if (fileHandle is null)
             {
                 return null;
             }
+            
+            var storageFile = StorageHelper.StorageItemFromHandle(fileHandle)!;
 
             return new JSStorageFile(storageFile);
         }