Marino Faggiana 6 жил өмнө
parent
commit
745f4ffb5e

+ 8 - 1
PickerFileProvider/FileProviderData.swift

@@ -36,7 +36,14 @@ class FileProviderData: NSObject {
     // Directory
     var groupURL: URL?
     var fileProviderStorageURL: URL?
-        
+    
+    //
+    let selectorPostImportDocument = "importDocument"
+    let selectorPostItemChanged = "itemChanged"
+    
+    // Metadata Temp for Import
+    let FILEID_IMPORT_METADATA_TEMP = k_uploadSessionID + "FILE_PROVIDER_EXTENSION"
+    
     func setupActiveAccount() -> Bool {
         
         queueTradeSafe.sync(flags: .barrier) {

+ 6 - 6
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -115,7 +115,7 @@ extension FileProviderExtension {
             return
         }
         
-        if metadata.sessionSelectorPost != selectorPostImportDocument {
+        if metadata.sessionSelectorPost != providerData.selectorPostImportDocument {
             
             deleteFile(withIdentifier: itemIdentifier, parentItemIdentifier: parentItemIdentifier, metadata: metadata, serverUrl: serverUrl)
 
@@ -414,7 +414,7 @@ extension FileProviderExtension {
         }
         
         let fileName = self.createFileName(fileURL.lastPathComponent, directoryID: tableDirectory.directoryID, serverUrl: serverUrl)
-        let fileNamePathDirectory = self.providerData.fileProviderStorageURL!.path + "/" + self.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+        let fileNamePathDirectory = self.providerData.fileProviderStorageURL!.path + "/" + providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
             
         do {
             try FileManager.default.createDirectory(atPath: fileNamePathDirectory, withIntermediateDirectories: true, attributes: nil)
@@ -430,12 +430,12 @@ extension FileProviderExtension {
             
         // Metadata TEMP
         metadata.account = self.providerData.account
-        metadata.assetLocalIdentifier = self.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+        metadata.assetLocalIdentifier = providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
         metadata.date = NSDate()
         metadata.directory = false
         metadata.directoryID = tableDirectory.directoryID
         metadata.etag = ""
-        metadata.fileID = self.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+        metadata.fileID = providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
         metadata.size = size
         metadata.status = Double(k_metadataStatusHide)
         metadata.fileName = fileName
@@ -447,11 +447,11 @@ extension FileProviderExtension {
             let metadataNet = CCMetadataNet()
                 
             metadataNet.account = self.providerData.account
-            metadataNet.assetLocalIdentifier = self.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+            metadataNet.assetLocalIdentifier = providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
             metadataNet.fileName = fileName
             metadataNet.path = fileNamePathDirectory + "/" + fileName
             metadataNet.selector = selectorUploadFile
-            metadataNet.selectorPost = selectorPostImportDocument
+            metadataNet.selectorPost = providerData.selectorPostImportDocument
             metadataNet.serverUrl = serverUrl
             metadataNet.session = k_upload_session_extension
             metadataNet.sessionError = ""

+ 18 - 17
PickerFileProvider/FileProviderExtension+Network.swift

@@ -137,10 +137,6 @@ extension FileProviderExtension {
 
         NSFileProviderManager.default.register(task, forItemWithIdentifier: NSFileProviderItemIdentifier(item.itemIdentifier.rawValue)) { (error) in }
         
-        let urlString = (providerData.fileProviderStorageURL!.path + "/"  + item.itemIdentifier.rawValue + "/" + item.filename).addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
-        let url = URL(string: urlString)!
-        self.outstandingUploadTasks[url] = task
-        
         queueTradeSafe.async(flags: .barrier) {
             fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
             fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
@@ -161,17 +157,10 @@ extension FileProviderExtension {
             return
         }
         
-        // remove task on outstandingUploadTasks
-        let itemIdentifier = providerData.getItemIdentifier(metadata: metadata)
-        
-        let urlString = (providerData.fileProviderStorageURL!.path + "/"  + itemIdentifier.rawValue + "/" + fileName).addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
-        let url = URL(string: urlString)!
-        outstandingUploadTasks.removeValue(forKey: url)
-
         if errorCode == 0 {
             
             // importDocument
-            if (selectorPost == selectorPostImportDocument) {
+            if (selectorPost == providerData.selectorPostImportDocument) {
                 
                 NCManageDatabase.sharedInstance.deleteQueueUpload(assetLocalIdentifier: assetLocalIdentifier, selector: selector)
                 
@@ -190,7 +179,7 @@ extension FileProviderExtension {
             }
             
             // itemChanged
-            if (selectorPost == selectorPostItemChanged) {
+            if (selectorPost == providerData.selectorPostItemChanged) {
                 
                 let filePathItemIdentifier = providerData.fileProviderStorageURL!.path + "/" + providerData.getItemIdentifier(metadata: metadata).rawValue + "/" + metadata.fileName
                 _ = self.copyFile(filePathItemIdentifier, toPath: providerData.directoryUser + "/" + metadata.fileID)
@@ -198,7 +187,13 @@ extension FileProviderExtension {
             
             NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: metadata.etag, etagFPE: metadata.etag)
             
-            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
+            // remove
+            metadata.sessionSelector = ""
+            metadata.sessionSelectorPost = ""
+            
+            let metadata = NCManageDatabase.sharedInstance.addMetadata(metadata)
+            
+            let item = FileProviderItem(metadata: metadata!, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
 
             queueTradeSafe.sync(flags: .barrier) {
                 fileProviderSignalUpdateContainerItem[item.itemIdentifier] = item
@@ -210,15 +205,21 @@ extension FileProviderExtension {
         } else {
             
             // importDocument
-            if (selectorPost == selectorPostImportDocument) {
+            if (selectorPost == providerData.selectorPostImportDocument) {
                 
                 NCManageDatabase.sharedInstance.unlockQueueUpload(assetLocalIdentifier: assetLocalIdentifier)
             }
             
             // itemChanged
-            if (selectorPost == selectorPostItemChanged) {
+            if (selectorPost == providerData.selectorPostItemChanged) {
+                
+                let itemIdentifier = providerData.getItemIdentifier(metadata: metadata)
+                
+                let urlString = (providerData.fileProviderStorageURL!.path + "/"  + itemIdentifier.rawValue + "/" + fileName).addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
+                let url = URL(string: urlString)!
                 
                 DispatchQueue.main.asyncAfter(deadline: .now() + Double(k_timerProcessAutoUploadExtension)) {
+                    
                     self.uploadFileItemChanged(for: itemIdentifier, url: url)
                 }
             }
@@ -264,7 +265,7 @@ extension FileProviderExtension {
         metadata.session = k_upload_session_extension
         metadata.sessionID = metadata.fileID
         metadata.sessionSelector = selectorUploadFile
-        metadata.sessionSelectorPost = selectorPostItemChanged
+        metadata.sessionSelectorPost = providerData.selectorPostItemChanged
         
         guard let metadataForUpload = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
             return

+ 0 - 6
PickerFileProvider/FileProviderExtension.swift

@@ -71,12 +71,6 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
     var providerData = FileProviderData()
 
     var outstandingDownloadTasks = [URL: URLSessionTask]()
-    var outstandingUploadTasks = [URL: URLSessionUploadTask]()
-
-    // Metadata Temp for Import
-    let FILEID_IMPORT_METADATA_TEMP = k_uploadSessionID + "FILE_PROVIDER_EXTENSION"
-    let selectorPostImportDocument = "importDocument"
-    let selectorPostItemChanged = "itemChanged"
     
     override init() {
         

+ 1 - 1
PickerFileProvider/FileProviderItem.swift

@@ -112,7 +112,7 @@ class FileProviderItem: NSObject, NSFileProviderItem {
             }
             
             // Upload
-            if metadata.sessionTaskIdentifier > 0 {
+            if metadata.sessionSelectorPost == providerData.selectorPostImportDocument || metadata.sessionSelectorPost == providerData.selectorPostItemChanged {
                 isUpload = true
                 self.isDownloaded = true
                 self.isMostRecentVersionDownloaded = true