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
pull/19722/head
Yury 4 months ago
committed by GitHub
parent
commit
4312daf75a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      src/Browser/Avalonia.Browser/Interop/StorageHelper.cs
  2. 36
      src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs

8
src/Browser/Avalonia.Browser/Interop/StorageHelper.cs

@ -56,16 +56,16 @@ internal static partial class StorageHelper
[JSImport("StorageProvider.createAcceptType", AvaloniaModule.StorageModuleName)] [JSImport("StorageProvider.createAcceptType", AvaloniaModule.StorageModuleName)]
public static partial JSObject CreateAcceptType(string description, string[] mimeTypes, string[]? extensions); 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); 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); 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); 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); public static partial Task<JSObject?> CreateFolder(JSObject folderHandle, string name);
[JSImport("StorageItem.getFile", AvaloniaModule.StorageModuleName)] [JSImport("StorageItem.getFile", AvaloniaModule.StorageModuleName)]

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

Loading…
Cancel
Save