Sfoglia il codice sorgente

Update mobile impl

Max Katz 2 anni fa
parent
commit
6412da10cf

+ 6 - 10
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<IReadOnlyList<IStorageItem>> GetItemsAsync()
+    public async IAsyncEnumerable<IStorageItem> GetItemsAsync()
     {
         if (!await EnsureExternalFilesPermission(false))
         {
-            return Array.Empty<IStorageItem>();
+            yield break;
         }
-
-        List<IStorageItem> files = new List<IStorageItem>();
-
+        
         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;
     }       
 }
 

+ 7 - 2
src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs

@@ -114,8 +114,9 @@ internal sealed class IOSStorageFolder : IOSStorageItem, IStorageBookmarkFolder
     {
     }
 
-    public async Task<IReadOnlyList<IStorageItem>> GetItemsAsync()
+    public async IAsyncEnumerable<IStorageItem> GetItemsAsync()
     {
+        // TODO: find out if it can be lazily enumerated.
         var tcs = new TaskCompletionSource<IReadOnlyList<IStorageItem>>();
 
         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;
+        }
     }
 }