Marino Faggiana 6 년 전
부모
커밋
8622d7fa49

+ 10 - 2
PickerFileProvider/FileProviderEnumerator.swift

@@ -149,11 +149,19 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
     
         // Report the trashed items since last signal
         //
-        observer.didDeleteItems(withIdentifiers: fileProviderSignalDeleteItemIdentifier)
+        var itemsDelete = [NSFileProviderItemIdentifier]()
+        for (itemIdentifier, _) in fileProviderSignalDeleteItemIdentifier {
+            itemsDelete.append(itemIdentifier)
+        }
+        observer.didDeleteItems(withIdentifiers: itemsDelete)
         
         // Report the updated items since last signal
         //
-        observer.didUpdate(fileProviderSignalUpdateItem)
+        var itemsUpdate = [FileProviderItem]()
+        for (_, item) in fileProviderSignalUpdateItem {
+            itemsUpdate.append(item)
+        }
+        observer.didUpdate(itemsUpdate)
         
         let data = "\(currentAnchor)".data(using: .utf8)
         observer.finishEnumeratingChanges(upTo: NSFileProviderSyncAnchor(data!), moreComing: false)        

+ 25 - 2
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -70,8 +70,14 @@ extension FileProviderExtension {
             
             let parentItemIdentifier = self.providerData.getParentItemIdentifier(metadata: metadataDB)
             if parentItemIdentifier != nil {
+                
                 let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier!, providerData: self.providerData)
+                
+                fileProviderSignalUpdateItem[item.itemIdentifier] = item
+                self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                
                 completionHandler(item, nil)
+                
             } else {
                 completionHandler(nil, NSFileProviderError(.noSuchItem))
             }
@@ -105,7 +111,7 @@ extension FileProviderExtension {
         deleteFile(withIdentifier: itemIdentifier, parentItemIdentifier: parentItemIdentifier, metadata: metadata)
 
         // return immediately
-        fileProviderSignalDeleteItemIdentifier.append(itemIdentifier)
+        fileProviderSignalDeleteItemIdentifier[itemIdentifier] = itemIdentifier
         self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
         
         completionHandler(nil)
@@ -169,8 +175,14 @@ extension FileProviderExtension {
             
             let parentItemIdentifier = self.providerData.getParentItemIdentifier(metadata: metadata)
             if parentItemIdentifier != nil {
+                
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: self.providerData)
+                
+                fileProviderSignalUpdateItem[item.itemIdentifier] = item
+                self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                
                 completionHandler(item, nil)
+                
             } else {
                 completionHandler(nil, NSFileProviderError(.noSuchItem))
             }
@@ -234,9 +246,16 @@ extension FileProviderExtension {
             
             let parentItemIdentifier = self.providerData.getParentItemIdentifier(metadata: metadata)
             if parentItemIdentifier != nil {
+                
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: self.providerData)
+                
+                fileProviderSignalUpdateItem[item.itemIdentifier] = item
+                self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                
                 completionHandler(item, nil)
+                
             } else {
+                
                 completionHandler(nil, NSFileProviderError(.noSuchItem))
             }
             
@@ -324,7 +343,7 @@ extension FileProviderExtension {
             
             let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
             
-            fileProviderSignalUpdateItem.append(item)
+            fileProviderSignalUpdateItem[item.itemIdentifier] = item
             signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
             
             completionHandler(item, nil)
@@ -438,6 +457,10 @@ extension FileProviderExtension {
             }
             
             let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
+            
+            fileProviderSignalUpdateItem[item.itemIdentifier] = item
+            self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+            
             completionHandler(item, nil)
         }
     }

+ 3 - 5
PickerFileProvider/FileProviderExtension+Network.swift

@@ -69,9 +69,7 @@ extension FileProviderExtension {
         }, failure: { (errorMessage, errorCode) in
             
             // remove itemIdentifier on fileProviderSignalDeleteItemIdentifier
-            if let index = fileProviderSignalDeleteItemIdentifier.index(of: itemIdentifier) {
-                fileProviderSignalDeleteItemIdentifier.remove(at: index)
-            }
+            fileProviderSignalDeleteItemIdentifier.removeValue(forKey: itemIdentifier)
             
             self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
         })
@@ -91,7 +89,7 @@ extension FileProviderExtension {
             let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata)
             let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
             
-            fileProviderSignalDeleteItemIdentifier.append(item.itemIdentifier)
+            fileProviderSignalDeleteItemIdentifier[item.itemIdentifier] = item.itemIdentifier
             signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
         }
         
@@ -115,7 +113,7 @@ extension FileProviderExtension {
                 if parentItemIdentifier != nil {
                     let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
                     
-                    fileProviderSignalUpdateItem.append(item)
+                    fileProviderSignalUpdateItem[item.itemIdentifier] = item
                     signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
                 }
             }

+ 2 - 2
PickerFileProvider/FileProviderExtension.swift

@@ -27,8 +27,8 @@ import FileProvider
 var timerUpload: Timer?
 
 // Item for signalEnumerator
-var fileProviderSignalDeleteItemIdentifier = [NSFileProviderItemIdentifier]()
-var fileProviderSignalUpdateItem = [FileProviderItem]()
+var fileProviderSignalDeleteItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
+var fileProviderSignalUpdateItem = [NSFileProviderItemIdentifier:FileProviderItem]()
 
 var currentAnchor: UInt64 = 0
 var fileNamePathImport = [String]()