From 6412da10cf5f04bdf75f0eec57dbe7570fb99791 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 8 Mar 2023 23:36:27 +0900 Subject: [PATCH] Update mobile impl --- .../Platform/Storage/AndroidStorageItem.cs | 16 ++++++---------- src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs | 9 +++++++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs index 0a34e6077c..8052b3911a 100644 --- a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs +++ b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs @@ -131,19 +131,17 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder return Task.FromResult(new StorageItemProperties()); } - public async Task> GetItemsAsync() + public async IAsyncEnumerable GetItemsAsync() { if (!await EnsureExternalFilesPermission(false)) { - return Array.Empty(); + yield break; } - - List files = new List(); - + var contentResolver = Activity.ContentResolver; if (contentResolver == null) { - return files; + yield break; } var childrenUri = DocumentsContract.BuildChildDocumentsUriUsingTree(Uri!, DocumentsContract.GetTreeDocumentId(Uri)); @@ -168,12 +166,10 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder continue; } - files.Add(mime == DocumentsContract.Document.MimeTypeDir ? new AndroidStorageFolder(Activity, uri, false) : - new AndroidStorageFile(Activity, uri)); + yield return mime == DocumentsContract.Document.MimeTypeDir ? new AndroidStorageFolder(Activity, uri, false) : + new AndroidStorageFile(Activity, uri); } } - - return files; } } diff --git a/src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs b/src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs index 27bd8faf64..baf31ebc73 100644 --- a/src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs +++ b/src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs @@ -114,8 +114,9 @@ internal sealed class IOSStorageFolder : IOSStorageItem, IStorageBookmarkFolder { } - public async Task> GetItemsAsync() + public async IAsyncEnumerable GetItemsAsync() { + // TODO: find out if it can be lazily enumerated. var tcs = new TaskCompletionSource>(); new NSFileCoordinator().CoordinateRead(Url, @@ -142,6 +143,10 @@ internal sealed class IOSStorageFolder : IOSStorageItem, IStorageBookmarkFolder throw new NSErrorException(error); } - return await tcs.Task; + var items = await tcs.Task; + foreach (var item in items) + { + yield return item; + } } }