Further improve/cleanup/simplify file provider extension init
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 10 Mar 2023 17:37:00 +0000 (18:37 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:25 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift

index ccd35231a264923ad36613edd0cfa31338c7b9d4..d7093598ae91b73f1a98ea44ba235dad8dafeb60 100644 (file)
@@ -56,8 +56,6 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
     var outstandingSessionTasks: [String: URLSessionTask] = [:]
     var outstandingOcIdTemp: [String: String] = [:]
 
-    private var itemIdsForEnumeratorsNeedingSignalling: NSMutableSet = NSMutableSet()
-
     required init(domain: NSFileProviderDomain) {
         self.domain = domain
         // The containing application must create a domain using `NSFileProviderManager.add(_:, completionHandler:)`. The system will then launch the application extension process, call `FileProviderExtension.init(domain:)` to instantiate the extension for that domain, and call methods on the instance.
@@ -68,6 +66,7 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
     
     func invalidate() {
         // TODO: cleanup any resources
+        NSLog("Extension for domain %@ is being torn down", domain.displayName)
     }
 
     // MARK: NSFileProviderReplicatedExtension protocol methods
@@ -98,6 +97,7 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
         }
 
         let dbManager = NextcloudFilesDatabaseManager.shared
+        
         guard let metadata = dbManager.itemMetadataFromFileProviderItemIdentifier(identifier),
               let parentItemIdentifier = parentItemIdentifierFromMetadata(metadata) else {
             completionHandler(nil, NSFileProviderError(.noSuchItem))
@@ -568,7 +568,6 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
 
         guard let ncAccount = ncAccount else {
             NSLog("Not providing enumerator for container with identifier %@ yet as account not set up", containerItemIdentifier.rawValue)
-            itemIdsForEnumeratorsNeedingSignalling.add(containerItemIdentifier)
             throw NSFileProviderError(.notAuthenticated)
         }
 
@@ -608,20 +607,15 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
                 }
             }
 
-            itemIdsForEnumeratorsNeedingSignalling = NSMutableSet()
             return
         }
 
         NSLog("Signalling enumerators for user %@ at server %@", ncAccount!.username, ncAccount!.serverUrl)
-        for itemId in itemIdsForEnumeratorsNeedingSignalling {
-            fpManager.signalEnumerator(for: itemId as! NSFileProviderItemIdentifier) { error in
-                if error != nil {
-                    NSLog("Error signalling enumerator for root container, received error: %@", error!.localizedDescription)
-                }
+        fpManager.signalEnumerator(for: .workingSet) { error in
+            if error != nil {
+                NSLog("Error signalling enumerator for working set, received error: %@", error!.localizedDescription)
             }
         }
-
-        itemIdsForEnumeratorsNeedingSignalling = NSMutableSet()
     }
 
     func setupDomainAccount(user: String, serverUrl: String, password: String) {