Add completeObserver method to FileProviderEnumerator

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
Claudio Cambra 2023-01-12 21:50:35 +01:00
parent 7d1b275d50
commit 2b5425390d
No known key found for this signature in database
GPG key ID: C839200C384636B0

View file

@ -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)
}
}
}