Marino Faggiana 6 years ago
parent
commit
1ca261b493

+ 31 - 9
PickerFileProvider/FileProviderEnumerator.swift

@@ -183,24 +183,46 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
         // Report the deleted items
         //
         var itemsDelete = [NSFileProviderItemIdentifier]()
-        for (itemIdentifier, _) in fileProviderSignalDeleteContainerItemIdentifier {
-            itemsDelete.append(itemIdentifier)
+        
+        if enumeratedItemIdentifier == .workingSet {
+            for (itemIdentifier, _) in fileProviderSignalDeleteWorkingSetItemIdentifier {
+                itemsDelete.append(itemIdentifier)
+            }
+            fileProviderSignalDeleteWorkingSetItemIdentifier.removeAll()
+        } else {
+            for (itemIdentifier, _) in fileProviderSignalDeleteContainerItemIdentifier {
+                itemsDelete.append(itemIdentifier)
+            }
+            fileProviderSignalDeleteContainerItemIdentifier.removeAll()
         }
         
         // Report the updated items
         //
         var itemsUpdate = [FileProviderItem]()
-        for (itemIdentifier, item) in fileProviderSignalUpdateContainerItem {
-            let account = providerData.getAccountFromItemIdentifier(itemIdentifier)
-            if account != nil && account == providerData.account {
-                itemsUpdate.append(item)
-            } else {
-                itemsDelete.append(itemIdentifier)
+        
+        if enumeratedItemIdentifier == .workingSet {
+            for (itemIdentifier, item) in fileProviderSignalUpdateWorkingSetItem {
+                let account = providerData.getAccountFromItemIdentifier(itemIdentifier)
+                if account != nil && account == providerData.account {
+                    itemsUpdate.append(item)
+                } else {
+                    itemsDelete.append(itemIdentifier)
+                }
             }
+            fileProviderSignalUpdateWorkingSetItem.removeAll()
+        } else {
+            for (itemIdentifier, item) in fileProviderSignalUpdateContainerItem {
+                let account = providerData.getAccountFromItemIdentifier(itemIdentifier)
+                if account != nil && account == providerData.account {
+                    itemsUpdate.append(item)
+                } else {
+                    itemsDelete.append(itemIdentifier)
+                }
+            }
+            fileProviderSignalUpdateContainerItem.removeAll()
         }
         
         observer.didDeleteItems(withIdentifiers: itemsDelete)
-        
         observer.didUpdate(itemsUpdate)
         
         let data = "\(currentAnchor)".data(using: .utf8)

+ 20 - 6
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -74,6 +74,8 @@ extension FileProviderExtension {
                 let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier!, providerData: self.providerData)
                 
                 fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
+                fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
                 self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
                 
                 completionHandler(item, nil)
@@ -112,6 +114,8 @@ extension FileProviderExtension {
 
         // return immediately
         fileProviderSignalDeleteContainerItemIdentifier[itemIdentifier] = itemIdentifier
+        fileProviderSignalDeleteWorkingSetItemIdentifier[itemIdentifier] = itemIdentifier
+
         self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
         
         completionHandler(nil)
@@ -181,6 +185,8 @@ extension FileProviderExtension {
             let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
                 
             fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
+            fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
             self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
                 
             completionHandler(item, nil)
@@ -250,6 +256,8 @@ extension FileProviderExtension {
             let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
                 
             fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
+            fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
             self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
                 
             completionHandler(item, nil)
@@ -292,10 +300,12 @@ extension FileProviderExtension {
         }
         
         let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
-            
+        
         fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-        signalEnumerator(for: [.workingSet])
-            
+        fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
+        signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+
         completionHandler(item, nil)
         
         if (favorite == true && metadata.favorite == false) || (favorite == false && metadata.favorite == true) {
@@ -322,10 +332,12 @@ extension FileProviderExtension {
         }
         
         let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
-            
+        
         fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-        signalEnumerator(for: [.workingSet])
-            
+        fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
+        signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+
         completionHandler(item, nil)
     }
     
@@ -456,6 +468,8 @@ extension FileProviderExtension {
             let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
             
             fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
+            fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
             self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
             
             completionHandler(item, nil)

+ 8 - 1
PickerFileProvider/FileProviderExtension+Network.swift

@@ -70,7 +70,8 @@ extension FileProviderExtension {
             
             // remove itemIdentifier on fileProviderSignalDeleteItemIdentifier
             fileProviderSignalDeleteContainerItemIdentifier.removeValue(forKey: itemIdentifier)
-            
+            fileProviderSignalDeleteWorkingSetItemIdentifier.removeValue(forKey: itemIdentifier)
+
             self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
         })
     }
@@ -105,6 +106,8 @@ extension FileProviderExtension {
             let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
             
             fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
+            fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
             self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
             
         })
@@ -127,6 +130,8 @@ extension FileProviderExtension {
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
             
                 fileProviderSignalDeleteContainerItemIdentifier[item.itemIdentifier] = item.itemIdentifier
+                fileProviderSignalDeleteWorkingSetItemIdentifier[item.itemIdentifier] = item.itemIdentifier
+
                 signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
             }
         }
@@ -154,6 +159,8 @@ extension FileProviderExtension {
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
                     
                 fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
+                fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+
                 signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
             }
             

+ 2 - 2
PickerFileProvider/FileProviderExtension.swift

@@ -118,7 +118,7 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         
         // update workingset
         if (containerItemIdentifier != NSFileProviderItemIdentifier.workingSet) {
-            self.updateWorkingSet()
+            //self.updateWorkingSet()
         }
 
         if (containerItemIdentifier == NSFileProviderItemIdentifier.rootContainer) {
@@ -230,7 +230,7 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         
         // Update workingSet
         for (itemIdentifier, item) in updateItemsWorkingSet {
-            fileProviderSignalUpdateContainerItem[itemIdentifier] = item
+            fileProviderSignalUpdateWorkingSetItem[itemIdentifier] = item
             self.signalEnumerator(for: [.workingSet])
         }
     }