From: Claudio Cambra Date: Thu, 9 Mar 2023 13:51:13 +0000 (+0100) Subject: Enumerate changed in the working set X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~10^2~55^2~189 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=47d50af140c2af0918285b09cbfd9f0f5c77e532;p=nextcloud-desktop.git Enumerate changed in the working set Signed-off-by: Claudio Cambra --- diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift index 0d518069f..c37316791 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift @@ -164,9 +164,53 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { if enumeratedItemIdentifier == .workingSet { NSLog("Enumerating changes in working set for user: %@ with serverUrl: %@", ncAccount.username, serverUrl) - // TODO: Enumerate changes in materialised items, favourites and other special items + // TODO: Enumerate changes in favourites and other special items - observer.finishEnumeratingChanges(upTo: anchor, moreComing: false) + let materialisedFilesMetadatas = NextcloudFilesDatabaseManager.shared.localFileItemMetadatas(account: ncAccount.ncKitAccount) + + var errors = [String : Error]() + var allNewMetadatas: [NextcloudItemMetadataTable] = [] + var allUpdatedMetadatas: [NextcloudItemMetadataTable] = [] + var allDeletedMetadatas: [NextcloudItemMetadataTable] = [] + + let dispatchGroup = DispatchGroup() + dispatchGroup.notify(queue: .main) { // Wait for all read tasks to finish + FileProviderEnumerator.completeChangesObserver(observer, ncKit: self.ncKit, newMetadatas: allNewMetadatas, updatedMetadatas: allUpdatedMetadatas, deletedMetadatas: allDeletedMetadatas) + } + + for materialMetadata in materialisedFilesMetadatas { + dispatchGroup.enter() + + let materialMetadataServerUrl = materialMetadata.serverUrl + "/" + materialMetadata.fileName + FileProviderEnumerator.readServerUrl(materialMetadataServerUrl, ncAccount: ncAccount, ncKit: ncKit) { [self] _, newMetadatas, updatedMetadatas, deletedMetadatas, readError in + guard readError == nil else { + NSLog("Finishing enumeration of changes at %@ with error %@", serverUrl) + dispatchGroup.leave() + return + } + + NSLog("Finished reading serverUrl: %@ for user: %@", self.serverUrl, self.ncAccount.ncKitAccount) + if let newMetadatas = newMetadatas { + allNewMetadatas += newMetadatas + } else { + NSLog("WARNING: Nil new metadatas received for reading of changes at %@ for user: %@", self.serverUrl, self.ncAccount.ncKitAccount) + } + + if let updatedMetadatas = updatedMetadatas { + allUpdatedMetadatas += updatedMetadatas + } else { + NSLog("WARNING: Nil updated metadatas received for reading of changes at %@ for user: %@", self.serverUrl, self.ncAccount.ncKitAccount) + } + + if let deletedMetadatas = deletedMetadatas { + allDeletedMetadatas += deletedMetadatas + } else { + NSLog("WARNING: Nil deleted metadatas received for reading of changes at %@ for user: %@", self.serverUrl, self.ncAccount.ncKitAccount) + } + + dispatchGroup.leave() + } + } return } else if enumeratedItemIdentifier == .trashContainer { NSLog("Enumerating changes in trash set for user: %@ with serverUrl: %@", ncAccount.username, serverUrl) @@ -298,7 +342,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { guard receivedItem.directory else { NSLog("Read item is a file. Converting NKfile for serverUrl: %@ for user: %@", serverUrl, ncKitAccount) let itemMetadata = dbManager.convertNKFileToItemMetadata(receivedItem, account: ncKitAccount) - dbManager.addItemMetadata(itemMetadata) + dbManager.addItemMetadata(itemMetadata) // TODO: Return some value when it is an update completionHandler([itemMetadata], nil, nil, nil, error.error) return }