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
release/11.3.7
Yury 4 months ago
committed by Julien Lebosquain
parent
commit
b268c555c3
  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)]
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)]

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.");
}
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);
}

Loading…
Cancel
Save