Ensure we don't saturate the server with propfind requests
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 10 Mar 2023 02:42:30 +0000 (03:42 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:24 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift

index 62297a8f1cf0feb27fc57d49234169a28ed88180..8c17b3736e8cc4044a5c527457898f246a2d2925 100644 (file)
@@ -89,7 +89,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                 let directoryMetadatas = dbManager.directoryMetadatas(account: ncAccount.ncKitAccount)
                 var allMetadatas: [NextcloudItemMetadataTable] = []
 
-                let dispatchGroup = DispatchGroup()
+                let dispatchGroup = DispatchGroup()  // TODO: Maybe own thread?
 
                 for directoryMetadata in directoryMetadatas {
                     dispatchGroup.enter()
@@ -213,10 +213,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
             var allUpdatedMetadatas: [NextcloudItemMetadataTable] = []
             var allDeletedMetadatas: [NextcloudItemMetadataTable] = []
 
-            let dispatchGroup = DispatchGroup()
-            dispatchGroup.notify(queue: .main) { // Wait for all read tasks to finish
-                FileProviderEnumerator.completeChangesObserver(observer, anchor: anchor, ncKit: self.ncKit, newMetadatas: allNewMetadatas, updatedMetadatas: allUpdatedMetadatas, deletedMetadatas: allDeletedMetadatas)
-            }
+            let dispatchGroup = DispatchGroup() // TODO: Maybe own thread?
 
             for directoryMetadata in directoryMetadatas {
                 dispatchGroup.enter()
@@ -263,7 +260,11 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
 
                     dispatchGroup.leave()
                 }
+
+                dispatchGroup.wait()
             }
+
+            FileProviderEnumerator.completeChangesObserver(observer, anchor: anchor, ncKit: self.ncKit, newMetadatas: allNewMetadatas, updatedMetadatas: allUpdatedMetadatas, deletedMetadatas: allDeletedMetadatas)
             return
         } else if enumeratedItemIdentifier == .trashContainer {
             NSLog("Enumerating changes in trash set for user: %@ with serverUrl: %@", ncAccount.username, serverUrl)