Browse Source

fix (rollback)

marinofaggiana 5 years ago
parent
commit
e05c6219a7

+ 6 - 26
File Provider Extension/FileProviderData.swift

@@ -47,8 +47,10 @@ class fileProviderData: NSObject {
     var listFavoriteIdentifierRank = [String:NSNumber]()
     
     // Item for signalEnumerator
-    var fileProviderSignalDelete = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
-    var fileProviderSignalUpdate = [NSFileProviderItemIdentifier:FileProviderItem]()
+    var fileProviderSignalDeleteContainerItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
+    var fileProviderSignalUpdateContainerItem = [NSFileProviderItemIdentifier:FileProviderItem]()
+    var fileProviderSignalDeleteWorkingSetItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
+    var fileProviderSignalUpdateWorkingSetItem = [NSFileProviderItemIdentifier:FileProviderItem]()
    
     // UserDefaults
     var ncUserDefaults = UserDefaults(suiteName: NCBrandOptions.sharedInstance.capabilitiesGroups)
@@ -143,7 +145,7 @@ class fileProviderData: NSObject {
                 guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: homeServerUrl) else { continue }
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
                 
-                fileProviderSignalUpdate[item.itemIdentifier] = item
+                fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
                 updateWorkingSet = true
             }
         }
@@ -156,7 +158,7 @@ class fileProviderData: NSObject {
                 guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@", identifier)) else { continue }
                 let itemIdentifier = fileProviderUtility.sharedInstance.getItemIdentifier(metadata: metadata)
                 
-                fileProviderSignalDelete[itemIdentifier] = itemIdentifier
+                fileProviderSignalDeleteWorkingSetItemIdentifier[itemIdentifier] = itemIdentifier
                 updateWorkingSet = true
             }
         }
@@ -168,28 +170,6 @@ class fileProviderData: NSObject {
     
     // MARK: -
 
-    // Signal update/delete
-    //
-    func fileProviderSignal(metadata: tableMetadata, parentItemIdentifier: NSFileProviderItemIdentifier, delete: Bool, update: Bool) -> FileProviderItem {
-        let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-        if update {
-            if fileProviderSignalUpdate.index(forKey: item.itemIdentifier) != nil {
-                fileProviderSignalUpdate.removeValue(forKey: item.itemIdentifier)
-            }
-            fileProviderSignalUpdate[item.itemIdentifier] = item
-        }
-        if delete {
-            if fileProviderSignalDelete.index(forKey: item.itemIdentifier) != nil {
-                fileProviderSignalDelete.removeValue(forKey: item.itemIdentifier)
-            }
-            fileProviderSignalDelete[item.itemIdentifier] = item.itemIdentifier
-        }
-        
-        signalEnumerator(for: [parentItemIdentifier, .workingSet])
-        
-        return item
-    }
-    
     // Convinent method to signal the enumeration for containers.
     //
     func signalEnumerator(for containerItemIdentifiers: [NSFileProviderItemIdentifier]) {

+ 18 - 9
File Provider Extension/FileProviderEnumerator.swift

@@ -202,22 +202,31 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
         
         // Report the deleted items
         //
-        for (itemIdentifier, _) in fileProviderData.sharedInstance.fileProviderSignalDelete {
-            itemsDelete.append(itemIdentifier)
+        if enumeratedItemIdentifier == .workingSet {
+            for (itemIdentifier, _) in fileProviderData.sharedInstance.fileProviderSignalDeleteWorkingSetItemIdentifier {
+                itemsDelete.append(itemIdentifier)
+            }
+            fileProviderData.sharedInstance.fileProviderSignalDeleteWorkingSetItemIdentifier.removeAll()
+        } else {
+            for (itemIdentifier, _) in fileProviderData.sharedInstance.fileProviderSignalDeleteContainerItemIdentifier {
+                itemsDelete.append(itemIdentifier)
+            }
+            fileProviderData.sharedInstance.fileProviderSignalDeleteContainerItemIdentifier.removeAll()
         }
-        fileProviderData.sharedInstance.fileProviderSignalDelete.removeAll()
         
         // Report the updated items
         //
-        for (itemIdentifier, item) in fileProviderData.sharedInstance.fileProviderSignalUpdate {
-            let metadata = fileProviderUtility.sharedInstance.getTableMetadataFromItemIdentifier(itemIdentifier)
-            if metadata == nil {
-                itemsDelete.append(itemIdentifier)
-            } else {
+        if enumeratedItemIdentifier == .workingSet {
+            for (_, item) in fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem {
+                itemsUpdate.append(item)
+            }
+            fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem.removeAll()
+        } else {
+            for (_, item) in fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem {
                 itemsUpdate.append(item)
             }
+            fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem.removeAll()
         }
-        fileProviderData.sharedInstance.fileProviderSignalUpdate.removeAll()
         
         observer.didDeleteItems(withIdentifiers: itemsDelete)
         observer.didUpdate(itemsUpdate)

+ 20 - 21
File Provider Extension/FileProviderExtension+Actions.swift

@@ -63,10 +63,8 @@ extension FileProviderExtension {
                     return
                 }
                 
-                // Signal update/delete
-                let item = fileProviderData.sharedInstance.fileProviderSignal(metadata: metadataUpdate, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
+                let item = FileProviderItem(metadata: metadataUpdate, parentItemIdentifier: parentItemIdentifier)
                 completionHandler(item, nil)
-                
             } else {
                 completionHandler(nil, NSFileProviderError(.serverUnreachable))
             }
@@ -79,11 +77,6 @@ extension FileProviderExtension {
             completionHandler(NSFileProviderError(.noSuchItem))
             return
         }
-            
-        guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else {
-            completionHandler( NSFileProviderError(.noSuchItem))
-            return
-        }
         
         OCNetworking.sharedManager().deleteFileOrFolder(withAccount: fileProviderData.sharedInstance.account, path: metadata.serverUrl + "/" + metadata.fileName, completion: { (account, message, errorCode) in
             if errorCode == 0 || errorCode == kOCErrorServerPathNotFound {
@@ -102,8 +95,6 @@ extension FileProviderExtension {
                 NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
                 NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
                 
-                // Signal update/delete
-                _ = fileProviderData.sharedInstance.fileProviderSignal(metadata: metadata, parentItemIdentifier: parentItemIdentifier, delete: true, update: false)
                 completionHandler(nil)
 
             } else {
@@ -151,8 +142,7 @@ extension FileProviderExtension {
                     return
                 }
                 
-                // Signal update/delete
-                let item = fileProviderData.sharedInstance.fileProviderSignal(metadata: metadata, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
+                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
                 completionHandler(item, nil)
                 
             } else {
@@ -207,8 +197,7 @@ extension FileProviderExtension {
                     return
                 }
                 
-                // Signal update/delete
-                let item = fileProviderData.sharedInstance.fileProviderSignal(metadata: metadata, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
+                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
                 completionHandler(item, nil)
                 
             } else {
@@ -247,18 +236,25 @@ extension FileProviderExtension {
                 if errorCode == 0 && account == metadata.account {
                     // Change DB
                     metadata.favorite = favorite
-                    _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
+                    guard let metadataUpdate = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
+                        completionHandler(nil, NSFileProviderError(.noSuchItem))
+                        return
+                    }
+                    let item = FileProviderItem(metadata: metadataUpdate, parentItemIdentifier: parentItemIdentifier)
                     
-                    // Signal update/delete
-                    let item =  fileProviderData.sharedInstance.fileProviderSignal(metadata: metadata, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
+                    fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+                    fileProviderData.sharedInstance.signalEnumerator(for: [.workingSet])
+
                     completionHandler(item, nil)
                     
                 } else {
                     // 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])
                     
-                    // Signal update/delete
-                    let item =  fileProviderData.sharedInstance.fileProviderSignal(metadata: metadata, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
                     completionHandler(item, NSFileProviderError(.serverUnreachable))
                 }
             })
@@ -280,8 +276,11 @@ extension FileProviderExtension {
             return
         }
         
-        // Signal update/delete
-        let item =  fileProviderData.sharedInstance.fileProviderSignal(metadata: metadata, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
+        let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
+        
+        fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+        fileProviderData.sharedInstance.signalEnumerator(for: [.workingSet])
+
         completionHandler(item, nil)
     }
     

+ 0 - 3
File Provider Extension/FileProviderExtension.swift

@@ -239,9 +239,6 @@ class FileProviderExtension: NSFileProviderExtension {
                 guard let metadataUpdate = NCManageDatabase.sharedInstance.addMetadata(metadata) else { return }
                 NCManageDatabase.sharedInstance.addLocalFile(metadata: metadataUpdate)
                 
-                // Signal update/delete
-                _ = fileProviderData.sharedInstance.fileProviderSignal(metadata: metadataUpdate, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
-                
                 completionHandler(nil)
 
             } else {