marinofaggiana hace 5 años
padre
commit
d030db5ab7

+ 31 - 9
File Provider Extension/FileProviderExtension.swift

@@ -219,18 +219,24 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         
         let task = OCNetworking.sharedManager().download(withAccount: metadata.account, fileNameServerUrl: metadata.serverUrl + "/" + metadata.fileName, fileNameLocalPath: url.path, encode: true, communication: OCNetworking.sharedManager()?.sharedOCCommunicationExtension(), completion: { (account, lenght, etag, date, message, errorCode) in
             
+            // remove Task
+            self.outstandingSessionTasks.removeValue(forKey: url)
+            
+            guard let metadata = fileProviderUtility.sharedInstance.getTableMetadataFromItemIdentifier(identifier) else {
+                completionHandler(NSFileProviderError(.noSuchItem))
+                return
+            }
+            
             if errorCode == 0 && account == metadata.account {
 
-                // remove Task
-                self.outstandingSessionTasks.removeValue(forKey: url)
-                
+                metadata.sessionTaskIdentifier = Int(k_taskIdentifierDone)
+                metadata.status = Int(k_metadataStatusNormal)
+                metadata.session = ""
                 metadata.date = date! as NSDate
                 metadata.etag = etag!
                 metadata.size = Double(lenght)
                 
-                guard let metadataUpdate = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
-                    return
-                }
+                guard let metadataUpdate = NCManageDatabase.sharedInstance.addMetadata(metadata) else { return }
                 NCManageDatabase.sharedInstance.addLocalFile(metadata: metadataUpdate)
                 
                 // Signal update/delete
@@ -240,14 +246,17 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
 
             } else {
                 
-                // remove task
-                self.outstandingSessionTasks.removeValue(forKey: url)
-                
+                metadata.sessionTaskIdentifier = Int(k_taskIdentifierDone)
+                metadata.status = Int(k_metadataStatusNormal)
+                metadata.session = ""
+                _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
+               
                 if errorCode == Int(CFNetworkErrors.cfurlErrorCancelled.rawValue) {
                     completionHandler(NSFileProviderError(.noSuchItem))
                 } else {
                     completionHandler(NSFileProviderError(.serverUnreachable))
                 }
+                
                 return
             }
             
@@ -255,6 +264,16 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
        
         // Add and register task
         if task != nil {
+            
+            metadata.sessionTaskIdentifier = Int(task!.taskIdentifier)
+            metadata.status = Int(k_metadataStatusDownloading)
+            metadata.session = k_download_session_extension
+
+            guard let metadataUpdate = NCManageDatabase.sharedInstance.addMetadata(metadata) else { return }
+
+            // Signal update/delete
+            _ = fileProviderData.sharedInstance.fileProviderSignal(metadata: metadataUpdate, parentItemIdentifier: parentItemIdentifier, delete: false, update: true)
+
             outstandingSessionTasks[url] = task
             NSFileProviderManager.default.register(task!, forItemWithIdentifier: NSFileProviderItemIdentifier(identifier.rawValue)) { (error) in }
         }
@@ -288,6 +307,9 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
             
         }, completion: { (account, ocId, etag, date, message, errorCode) in
             
+            // remove Task
+            self.outstandingSessionTasks.removeValue(forKey: url)
+            
             guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account == %@ AND ocId == %@", fileProviderData.sharedInstance.account, itemIdentifier.rawValue)) else { return }
             
             if account == fileProviderData.sharedInstance.account && errorCode == 0 {

+ 8 - 5
File Provider Extension/FileProviderItem.swift

@@ -30,7 +30,6 @@ class FileProviderItem: NSObject, NSFileProviderItem {
     var filename: String = ""                                       // The item's filename
     var typeIdentifier: String = ""                                 // The item's uniform type identifiers
     var capabilities: NSFileProviderItemCapabilities {              // The item's capabilities
-        
         if (self.isDirectory) {
             return [ .allowsAddingSubItems, .allowsContentEnumerating, .allowsReading, .allowsDeleting, .allowsRenaming ]
         } else {
@@ -66,9 +65,7 @@ class FileProviderItem: NSObject, NSFileProviderItem {
 
     var tagData: Data?                                              // Tag
     var favoriteRank: NSNumber?                                     // Favorite
-    
     var isDirectory = false
-    var isDownload = false
 
     init(metadata: tableMetadata, parentItemIdentifier: NSFileProviderItemIdentifier) {
         
@@ -101,12 +98,18 @@ class FileProviderItem: NSObject, NSFileProviderItem {
                 uploadingError = NSError(domain: NSCocoaErrorDomain, code: NSFeatureUnsupportedError, userInfo:[:])
             }
             
-            // Upload
-            if (metadata.session == k_upload_session_extension) {
+            // Download
+            if (metadata.session == k_download_session_extension) {
                 self.isUploading = true
                 self.isUploaded = false
             } 
             
+            // Upload
+            if (metadata.session == k_upload_session_extension) {
+                self.isDownloading = true
+                self.isDownloaded = false
+            }
+            
         } else {
             
             // Favorite directory