Add completion handler to materialised observer
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 13 Mar 2023 12:39:24 +0000 (13:39 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:30 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderMaterialisedEnumerationObserver.swift

index f6f95f2ba0d5440a440b566ecf74d8a0fed89563..4bda429f1d1cfefd4c673a58e1b0f94fa718a133 100644 (file)
@@ -17,10 +17,12 @@ import FileProvider
 
 class FileProviderMaterialisedEnumerationObserver : NSObject, NSFileProviderEnumerationObserver {
     let ncKitAccount: String
+    let completionHandler: (_ deletedOcIds: Set<String>) -> Void
     var allEnumeratedItemIds: Set<String> = Set<String>()
 
-    required init(ncKitAccount: String) {
+    required init(ncKitAccount: String, completionHandler: @escaping(_ deletedOcIds: Set<String>) -> Void) {
         self.ncKitAccount = ncKitAccount
+        self.completionHandler = completionHandler
         super.init()
     }
 
@@ -35,16 +37,18 @@ class FileProviderMaterialisedEnumerationObserver : NSObject, NSFileProviderEnum
     func finishEnumerating(upTo nextPage: NSFileProviderPage?) {
         NSLog("Handling enumerated materialised items.")
         FileProviderMaterialisedEnumerationObserver.handleEnumeratedItems(self.allEnumeratedItemIds,
-                                                                          account: self.ncKitAccount)
+                                                                          account: self.ncKitAccount,
+                                                                          completionHandler: self.completionHandler)
     }
 
     func finishEnumeratingWithError(_ error: Error) {
         NSLog("Ran into error when enumerating materialised items. Handling items enumerated so far")
         FileProviderMaterialisedEnumerationObserver.handleEnumeratedItems(self.allEnumeratedItemIds,
-                                                                          account: self.ncKitAccount)
+                                                                          account: self.ncKitAccount,
+                                                                          completionHandler: self.completionHandler)
     }
 
-    static func handleEnumeratedItems(_ itemIds: Set<String>, account: String) {
+    static func handleEnumeratedItems(_ itemIds: Set<String>, account: String, completionHandler: @escaping(_ deletedOcIds: Set<String>) -> Void) {
         let dbManager = NextcloudFilesDatabaseManager.shared
         let databaseLocalFileMetadatas = dbManager.localFileMetadatas(account: account)
         var noLongerMaterialisedIds = Set<String>()
@@ -64,6 +68,8 @@ class FileProviderMaterialisedEnumerationObserver : NSObject, NSFileProviderEnum
                 for itemId in noLongerMaterialisedIds {
                     dbManager.deleteLocalFileMetadata(ocId: itemId)
                 }
+
+                completionHandler(noLongerMaterialisedIds)
             }
         }
     }