marinofaggiana 5 years ago
parent
commit
36aa32d4aa

+ 13 - 2
File Provider Extension/FileProviderData.swift

@@ -172,8 +172,19 @@ class fileProviderData: NSObject {
     //
     func fileProviderSignal(metadata: tableMetadata, parentItemIdentifier: NSFileProviderItemIdentifier, delete: Bool, update: Bool) -> FileProviderItem {
         let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-        if update { fileProviderSignalUpdate[item.itemIdentifier] = item }
-        if delete { fileProviderSignalDelete[item.itemIdentifier] = item.itemIdentifier }
+        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

+ 2 - 3
File Provider Extension/FileProviderEnumerator.swift

@@ -205,7 +205,8 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
         for (itemIdentifier, _) in fileProviderData.sharedInstance.fileProviderSignalDelete {
             itemsDelete.append(itemIdentifier)
         }
-       
+        fileProviderData.sharedInstance.fileProviderSignalDelete.removeAll()
+        
         // Report the updated items
         //
         for (itemIdentifier, item) in fileProviderData.sharedInstance.fileProviderSignalUpdate {
@@ -216,8 +217,6 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                 itemsUpdate.append(item)
             }
         }
-        
-        fileProviderData.sharedInstance.fileProviderSignalDelete.removeAll()
         fileProviderData.sharedInstance.fileProviderSignalUpdate.removeAll()
         
         observer.didDeleteItems(withIdentifiers: itemsDelete)