Browse Source

improvements

marinofaggiana 5 years ago
parent
commit
335ef74123

+ 5 - 7
File Provider Extension/FileProviderData.swift

@@ -47,11 +47,9 @@ class fileProviderData: NSObject {
     var listFavoriteIdentifierRank = [String:NSNumber]()
     
     // Item for signalEnumerator
-    var fileProviderSignalDeleteContainerItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
-    var fileProviderSignalUpdateContainerItem = [NSFileProviderItemIdentifier:FileProviderItem]()
-    var fileProviderSignalDeleteWorkingSetItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
-    var fileProviderSignalUpdateWorkingSetItem = [NSFileProviderItemIdentifier:FileProviderItem]()
-    
+    var fileProviderSignalDeleteItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
+    var fileProviderSignalUpdateItem = [NSFileProviderItemIdentifier:FileProviderItem]()
+   
     // UserDefaults
     var ncUserDefaults = UserDefaults(suiteName: NCBrandOptions.sharedInstance.capabilitiesGroups)
     
@@ -163,7 +161,7 @@ class fileProviderData: NSObject {
                 }
                 
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-                fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+                fileProviderSignalUpdateItem[item.itemIdentifier] = item
                 updateWorkingSet = true
             }
         }
@@ -178,7 +176,7 @@ class fileProviderData: NSObject {
                 }
                 
                 let itemIdentifier = fileProviderUtility.sharedInstance.getItemIdentifier(metadata: metadata)
-                fileProviderSignalDeleteWorkingSetItemIdentifier[itemIdentifier] = itemIdentifier
+                fileProviderSignalDeleteItemIdentifier[itemIdentifier] = itemIdentifier
                 updateWorkingSet = true
             }
         }

+ 12 - 28
File Provider Extension/FileProviderEnumerator.swift

@@ -209,40 +209,24 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
         
         // Report the deleted items
         //
-        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()
+        for (itemIdentifier, _) in fileProviderData.sharedInstance.fileProviderSignalDeleteItemIdentifier {
+            itemsDelete.append(itemIdentifier)
         }
-            
+       
         // Report the updated items
         //
-        if enumeratedItemIdentifier == .workingSet {
-            for (itemIdentifier, item) in fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem {
-                let account = fileProviderUtility.sharedInstance.getAccountFromItemIdentifier(itemIdentifier)
-                if account != nil && account == fileProviderData.sharedInstance.account {
-                    itemsUpdate.append(item)
-                } else {
-                    itemsDelete.append(itemIdentifier)
-                }
-            }
-        } else {
-            for (itemIdentifier, item) in fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem {
-                let account = fileProviderUtility.sharedInstance.getAccountFromItemIdentifier(itemIdentifier)
-                if account != nil && account == fileProviderData.sharedInstance.account {
-                    itemsUpdate.append(item)
-                } else {
-                    itemsDelete.append(itemIdentifier)
-                }
+        for (itemIdentifier, item) in fileProviderData.sharedInstance.fileProviderSignalUpdateItem {
+            let metadata = fileProviderUtility.sharedInstance.getTableMetadataFromItemIdentifier(itemIdentifier)
+            if metadata == nil {
+                itemsDelete.append(itemIdentifier)
+            } else {
+                itemsUpdate.append(item)
             }
         }
         
+        fileProviderData.sharedInstance.fileProviderSignalDeleteItemIdentifier.removeAll()
+        fileProviderData.sharedInstance.fileProviderSignalUpdateItem.removeAll()
+        
         observer.didDeleteItems(withIdentifiers: itemsDelete)
         observer.didUpdate(itemsUpdate)
         

+ 7 - 12
File Provider Extension/FileProviderExtension+Actions.swift

@@ -64,8 +64,7 @@ extension FileProviderExtension {
                 if parentItemIdentifier != nil {
                     
                     let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier!)
-                    fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-                    fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+                    fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
                     fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
                     
                     completionHandler(item, nil)
@@ -94,8 +93,7 @@ extension FileProviderExtension {
         deleteFile(withIdentifier: itemIdentifier, parentItemIdentifier: parentItemIdentifier, metadata: metadata)
        
         // return immediately
-        fileProviderData.sharedInstance.fileProviderSignalDeleteContainerItemIdentifier[itemIdentifier] = itemIdentifier
-        fileProviderData.sharedInstance.fileProviderSignalDeleteWorkingSetItemIdentifier[itemIdentifier] = itemIdentifier
+        fileProviderData.sharedInstance.fileProviderSignalDeleteItemIdentifier[itemIdentifier] = itemIdentifier
         fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
 
         completionHandler(nil)
@@ -141,8 +139,7 @@ extension FileProviderExtension {
                 }
                 
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-                fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[itemIdentifier] = item
-                fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[itemIdentifier] = item
+                fileProviderData.sharedInstance.fileProviderSignalUpdateItem[itemIdentifier] = item
                 fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
                 
                 completionHandler(item, nil)
@@ -200,8 +197,7 @@ extension FileProviderExtension {
                 }
                 
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-                fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-                fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+                fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
                 fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
                 
                 completionHandler(item, nil)
@@ -235,8 +231,7 @@ extension FileProviderExtension {
         }
         
         let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-        fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-        fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+        fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
         fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
 
         completionHandler(item, nil)
@@ -262,8 +257,7 @@ extension FileProviderExtension {
         }
         
         let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-        fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-        fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+        fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
         fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
         
         completionHandler(item, nil)
@@ -340,6 +334,7 @@ extension FileProviderExtension {
                 metadata.directory = false
                 metadata.etag = ""
                 metadata.ocId = ocId
+                metadata.fileId = ocId
                 metadata.fileName = fileName
                 metadata.fileNameView = fileName
                 metadata.serverUrl = tableDirectory.serverUrl

+ 5 - 39
File Provider Extension/FileProviderExtension+Network.swift

@@ -76,8 +76,7 @@ extension FileProviderExtension {
                 fileProviderData.sharedInstance.listFavoriteIdentifierRank.removeValue(forKey: itemIdentifier.rawValue)
                 
                 let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-                fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-                fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+                fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
                 fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
             }
         })
@@ -107,8 +106,7 @@ extension FileProviderExtension {
         // Register for bytesSent
         NSFileProviderManager.default.register(task, forItemWithIdentifier: NSFileProviderItemIdentifier(item.itemIdentifier.rawValue)) { (error) in }
         
-        fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-        fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+        fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
         fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
     }
     
@@ -127,8 +125,7 @@ extension FileProviderExtension {
             
             // Remove temp ocId
             let itemIdentifier = NSFileProviderItemIdentifier(CCUtility.createMetadataID(fromAccount: metadata.account, serverUrl: metadata.serverUrl, fileNameView: metadata.fileNameView, directory: false))
-            fileProviderData.sharedInstance.fileProviderSignalDeleteContainerItemIdentifier[itemIdentifier] = itemIdentifier
-            fileProviderData.sharedInstance.fileProviderSignalDeleteWorkingSetItemIdentifier[itemIdentifier] = itemIdentifier
+            fileProviderData.sharedInstance.fileProviderSignalDeleteItemIdentifier[itemIdentifier] = itemIdentifier
             
             // Recreate ico
             CCGraphics.createNewImage(from: fileName, ocId: ocId, extension: NSString(string: fileName).pathExtension, filterGrayScale: false, typeFile: metadata.typeFile, writeImage: true)
@@ -139,8 +136,7 @@ extension FileProviderExtension {
             let metadata = NCManageDatabase.sharedInstance.addMetadata(metadata)
             
             let item = FileProviderItem(metadata: metadata!, parentItemIdentifier: parentItemIdentifier)
-            fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-            fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+            fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
             
             uploadFileImportDocument()
             
@@ -152,8 +148,7 @@ extension FileProviderExtension {
             let metadata = NCManageDatabase.sharedInstance.addMetadata(metadata)
             
             let item = FileProviderItem(metadata: metadata!, parentItemIdentifier: parentItemIdentifier)
-            fileProviderData.sharedInstance.fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
-            fileProviderData.sharedInstance.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+            fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
         }
         
         fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
@@ -174,35 +169,6 @@ extension FileProviderExtension {
         }
     }
     
-    func uploadFileItemChanged(for itemIdentifier: NSFileProviderItemIdentifier, fileName: String, url: URL) {
-        
-        var itemIdentifierForUpload = itemIdentifier
-        
-        // Is itemIdentifier = fileName [Apple Works and ... ?]
-        if itemIdentifier.rawValue.contains(fileName) && fileProviderUtility.sharedInstance.fileExists(atPath: CCUtility.getDirectoryProviderStorage()+"/"+itemIdentifier.rawValue) {
-            guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account == %@ AND ocId == %@ AND fileName == %@", fileProviderData.sharedInstance.account, itemIdentifier.rawValue, fileName)) else {
-                return
-            }
-            itemIdentifierForUpload = fileProviderUtility.sharedInstance.getItemIdentifier(metadata: metadata)
-            _ = fileProviderUtility.sharedInstance.moveFile(CCUtility.getDirectoryProviderStorage()+"/"+itemIdentifier.rawValue, toPath: CCUtility.getDirectoryProviderStorage()+"/"+itemIdentifierForUpload.rawValue)
-        }
-        
-        guard let metadata = fileProviderUtility.sharedInstance.getTableMetadataFromItemIdentifier(itemIdentifierForUpload) else {
-            return
-        }
-        
-        metadata.session = k_upload_session_extension
-        metadata.sessionSelector = selectorUploadFile
-        metadata.status = Int(k_metadataStatusWaitUpload)
-
-        guard let metadataForUpload = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
-            return
-        }
-        
-        CCNetworking.shared().delegate = self
-        CCNetworking.shared().uploadFile(metadataForUpload, taskStatus: Int(k_taskStatusResume))
-    }
-    
     func reUpload(_ metadata: tableMetadata) {
         
         metadata.status = Int(k_metadataStatusWaitUpload)

+ 12 - 2
File Provider Extension/FileProviderExtension.swift

@@ -285,9 +285,19 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         assert(pathComponents.count > 2)
 
         let itemIdentifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
-        let fileName = pathComponents[pathComponents.count - 1]
         
-        uploadFileItemChanged(for: itemIdentifier, fileName: fileName, url: url)
+        guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account == %@ AND (ocId == %@ || fileId == %@)", fileProviderData.sharedInstance.account, itemIdentifier.rawValue, itemIdentifier.rawValue)) else { return }
+        
+        metadata.session = k_upload_session_extension
+        metadata.sessionSelector = selectorUploadFile
+        metadata.status = Int(k_metadataStatusWaitUpload)
+        
+        guard let metadataForUpload = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
+            return
+        }
+        
+        CCNetworking.shared().delegate = self
+        CCNetworking.shared().uploadFile(metadataForUpload, taskStatus: Int(k_taskStatusResume))
     }
     
     override func stopProvidingItem(at url: URL) {