marinofaggiana 4 ani în urmă
părinte
comite
7bc58bf0d9

+ 34 - 9
File Provider Extension/FileProviderData.swift

@@ -154,20 +154,45 @@ class fileProviderData: NSObject {
     
     // MARK: -
 
-    // Convinent method to signal the enumeration for containers.
-    //
-    func signalEnumerator(for containerItemIdentifiers: [NSFileProviderItemIdentifier]) {
-                
-        currentAnchor += 1
+    @discardableResult
+    func signalEnumerator(metadata: tableMetadata, delete: Bool = false, update: Bool = false) -> FileProviderItem? {
         
-        for containerItemIdentifier in containerItemIdentifiers {
-            
-            NSFileProviderManager.default.signalEnumerator(for: containerItemIdentifier) { error in
+        let metadata = tableMetadata.init(value: metadata)
+        
+        guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else { return nil }
+        
+        let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
+        
+        if delete {
+            fileProviderData.sharedInstance.fileProviderSignalDeleteContainerItemIdentifier[item.itemIdentifier] = item.itemIdentifier
+            fileProviderData.sharedInstance.fileProviderSignalDeleteWorkingSetItemIdentifier[item.itemIdentifier] = item.itemIdentifier
+        }
+        
+        if update {
+            fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
+            fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+        }
+        
+        if !update && !delete {
+            fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+        }
+        
+        if update || delete {
+            currentAnchor += 1
+            NSFileProviderManager.default.signalEnumerator(for: parentItemIdentifier) { error in
                 if let error = error {
-                    print("SignalEnumerator for \(containerItemIdentifier) returned error: \(error)")
+                    print("SignalEnumerator returned error: \(error)")
                 }
             }
         }
+        
+        NSFileProviderManager.default.signalEnumerator(for: .workingSet) { error in
+            if let error = error {
+                print("SignalEnumerator returned error: \(error)")
+            }
+        }
+        
+        return item
     }
     
     /*

+ 4 - 24
File Provider Extension/FileProviderExtension+Actions.swift

@@ -230,11 +230,6 @@ extension FileProviderExtension {
             return
         }
         
-        guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else {
-            completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
-        }
-        
         var favorite = false
         let ocId = metadata.ocId
         
@@ -264,11 +259,8 @@ extension FileProviderExtension {
                     // Change DB
                     metadata.favorite = favorite
                     NCManageDatabase.sharedInstance.addMetadata(metadata)
-                    let item = FileProviderItem(metadata: tableMetadata.init(value: metadata), parentItemIdentifier: parentItemIdentifier)
                     
-                    fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
-                    fileProviderData.sharedInstance.signalEnumerator(for: [.workingSet])
-
+                    let item = fileProviderData.sharedInstance.signalEnumerator(metadata: metadata)
                     completionHandler(item, nil)
                     
                 } else {
@@ -280,11 +272,8 @@ extension FileProviderExtension {
                     
                     // Errore, remove from listFavoriteIdentifierRank
                     fileProviderData.sharedInstance.listFavoriteIdentifierRank.removeValue(forKey: itemIdentifier.rawValue)
-                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-                        
-                    fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
-                    fileProviderData.sharedInstance.signalEnumerator(for: [.workingSet])
-                                
+                    
+                    let item = fileProviderData.sharedInstance.signalEnumerator(metadata: metadata)
                     completionHandler(item, NSFileProviderError(.serverUnreachable))
                 }
             }
@@ -308,16 +297,7 @@ extension FileProviderExtension {
             return
         }
         
-        guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else {
-            completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
-        }
-        
-        let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-        
-        fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
-        fileProviderData.sharedInstance.signalEnumerator(for: [.workingSet])
-
+        let item = fileProviderData.sharedInstance.signalEnumerator(metadata: metadata)
         completionHandler(item, nil)
     }
     

+ 3 - 10
File Provider Extension/FileProviderExtension+NetworkingDelegate.swift

@@ -40,13 +40,10 @@ extension FileProviderExtension: NCNetworkingDelegate {
         
         if errorCode == 0 {
             
-            guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else { return }
-            var item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-            
             // New file
             if ocId != ocIdTemp {
-                fileProviderData.sharedInstance.fileProviderSignalDeleteContainerItemIdentifier[item.itemIdentifier] = item.itemIdentifier
-                fileProviderData.sharedInstance.fileProviderSignalDeleteWorkingSetItemIdentifier[item.itemIdentifier] = item.itemIdentifier
+                // Signal update
+                fileProviderData.sharedInstance.signalEnumerator(metadata: metadata, delete: true)
             }
                         
             metadata.fileName = fileName
@@ -74,11 +71,7 @@ extension FileProviderExtension: NCNetworkingDelegate {
             }
             
             // Signal update
-            item = FileProviderItem(metadata: tableMetadata.init(value: metadata), parentItemIdentifier: parentItemIdentifier)
-            fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-            fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
-            
-            fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+            fileProviderData.sharedInstance.signalEnumerator(metadata: metadata, update: true)
             
         } else {
            

+ 4 - 0
File Provider Extension/FileProviderExtension.swift

@@ -244,6 +244,8 @@ class FileProviderExtension: NSFileProviderExtension {
                 task = downloadRequest?.task
                 self.outstandingSessionTasks[url] = task
                 NSFileProviderManager.default.register(task!, forItemWithIdentifier: NSFileProviderItemIdentifier(identifier.rawValue)) { (error) in }
+                
+                fileProviderData.sharedInstance.signalEnumerator(metadata: metadata, delete: true, update: true)
             }
             
         }) { (account, etag, date, length, error, errorCode, errorDescription) in
@@ -274,6 +276,8 @@ class FileProviderExtension: NSFileProviderExtension {
 
                 completionHandler(NSFileProviderError(.noSuchItem))
             }
+            
+            fileProviderData.sharedInstance.signalEnumerator(metadata: metadata, delete: true, update: true)
         }
     }