From: Claudio Cambra Date: Thu, 12 Jan 2023 20:50:35 +0000 (+0100) Subject: Add completeObserver method to FileProviderEnumerator X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~96^2^2~55^2~277 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2b5425390d6f93938f0cdf55735d34ae5172659b;p=nextcloud-desktop.git Add completeObserver method to FileProviderEnumerator Signed-off-by: Claudio Cambra --- diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift index f3b4092b1..eea37e2b4 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift @@ -18,6 +18,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { private let enumeratedItemIdentifier: NSFileProviderItemIdentifier private let anchor = NSFileProviderSyncAnchor("an anchor".data(using: .utf8)!) + private let maxItemsPerFileProviderPage = 100 var serverUrl: URL? init(enumeratedItemIdentifier: NSFileProviderItemIdentifier, ncAccount: NextcloudAccount?) { @@ -77,4 +78,32 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { func currentSyncAnchor(completionHandler: @escaping (NSFileProviderSyncAnchor?) -> Void) { completionHandler(anchor) } + + // MARK: - Helper methods + + func completeObserver(observer: NSFileProviderEnumerationObserver, numPage: Int, itemMetadatas: [NextcloudItemMetadataTable]?) { + guard itemMetadatas != nil else { observer.finishEnumerating(upTo: nil); return } + var items: [NSFileProviderItem] = [] + + for itemMetadata in itemMetadatas! { + if itemMetadata.e2eEncrypted { continue } + + createFileOrDirectoryLocally(metadata: itemMetadata) + + if let parentItemIdentifier = parentItemIdentifierFromMetadata(itemMetadata) { + let item = FileProviderItem(metadata: itemMetadata, parentItemIdentifier: parentItemIdentifier) + items.append(item) + } + } + + observer.didEnumerate(items) + + if items.count == maxItemsPerFileProviderPage { + let nextPage = numPage + 1 + let providerPage = NSFileProviderPage("\(nextPage)".data(using: .utf8)!) + observer.finishEnumerating(upTo: providerPage) + } else { + observer.finishEnumerating(upTo: nil) + } + } }