Pārlūkot izejas kodu

Improvements task

Marino Faggiana 6 gadi atpakaļ
vecāks
revīzija
900d39ab50
1 mainītis faili ar 26 papildinājumiem un 2 dzēšanām
  1. 26 2
      PickerFileProvider/FileProviderExtension.swift

+ 26 - 2
PickerFileProvider/FileProviderExtension.swift

@@ -64,6 +64,9 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
     var fileManager = FileManager()
     var providerData = FileProviderData()
 
+    //
+    var outstandingDownloadTasks = [URL: URLSessionTask]()
+
     // Metadata Temp for Import
     let FILEID_IMPORT_METADATA_TEMP = k_uploadSessionID + "FILE_PROVIDER_EXTENSION"
     
@@ -337,6 +340,9 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
 
             let task = ocNetworking?.downloadFileNameServerUrl("\(serverUrl)/\(metadata.fileName)", fileNameLocalPath: "\(providerData.directoryUser)/\(metadata.fileID)", communication: CCNetworking.shared().sharedOCCommunicationExtensionDownload(metadata.fileName), success: { (lenght, etag, date) in
                 
+                // remove Task
+                self.outstandingDownloadTasks.removeValue(forKey: url)
+
                 // copy download file to url
                 _ = self.copyFile("\(self.providerData.directoryUser)/\(metadata.fileID)", toPath: url.path)
             
@@ -350,12 +356,24 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
                 _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
 
                 completionHandler(nil)
+                return
                     
             }, failure: { (errorMessage, errorCode) in
-                completionHandler(NSFileProviderError(.serverUnreachable))
-            })
                 
+                // remove task
+                self.outstandingDownloadTasks.removeValue(forKey: url)
+                
+                if errorCode == Int(CFNetworkErrors.cfurlErrorCancelled.rawValue) {
+                    completionHandler(NSFileProviderError(.noSuchItem))
+                } else {
+                    completionHandler(NSFileProviderError(.serverUnreachable))
+                }
+                return
+            })
+            
+            // Add and register task
             if task != nil {
+                outstandingDownloadTasks[url] = task
                 NSFileProviderManager.default.register(task!, forItemWithIdentifier: NSFileProviderItemIdentifier(identifier.rawValue)) { (error) in }
             }
                 
@@ -493,6 +511,12 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
                 // handle any error, do any necessary cleanup
             })
         }
+        
+        // Download task
+        if let downloadTask = outstandingDownloadTasks[url] {
+            downloadTask.cancel()
+            outstandingDownloadTasks.removeValue(forKey: url)
+        }
     }
     
     // --------------------------------------------------------------------------------------------