Marino Faggiana 6 жил өмнө
parent
commit
0aed29cb90

+ 36 - 37
PickerFileProvider/FileProvider.swift

@@ -63,42 +63,21 @@ class FileProvider: NSFileProviderExtension {
             // Timer for upload
             if timerUpload == nil {
                 
-                timerUpload = Timer.init(timeInterval: 1, repeats: true, block: { (Timer) in
-                    
-                    let metadataNetQueue = NCManageDatabase.sharedInstance.getQueueUpload()
+                timerUpload = Timer.init(timeInterval: 0.5, repeats: true, block: { (Timer) in
                     
+                    let metadataNetQueue = NCManageDatabase.sharedInstance.getQueueUpload(withPath: true)
                     if  metadataNetQueue != nil && metadataNetQueue!.path != nil && uploadMetadataNet == nil {
-                        if let directoryID = NCManageDatabase.sharedInstance.getDirectoryID(metadataNetQueue!.serverUrl) {
-                            if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileName = %@ AND directoryID = %@", account, metadataNetQueue!.fileName, directoryID)) {
-                                
-                                if self.copyFile(metadataNetQueue!.path, toPath: directoryUser + "/" + metadataNetQueue!.fileName) == nil {
-
-                                    let task = ocNetworking?.uploadFileNameServerUrl(metadataNetQueue!.serverUrl+"/"+metadataNetQueue!.fileName, fileNameLocalPath: directoryUser + "/" + metadataNetQueue!.fileName, communication: CCNetworking.shared().sharedOCCommunicationExtensionUpload(k_upload_session_extension), success: { (fileID, etag, date) in
-                                        
-                                        // update DB Local
-                                        metadata.date = date! as NSDate
-                                        metadata.etag = etag!
-                                        NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
-                                        NCManageDatabase.sharedInstance.setLocalFile(fileID: metadata.fileID, date: date! as NSDate, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: etag, etagFPE: etag)
-                                        _ = self.copyFile(metadataNetQueue!.path, toPath: directoryUser + "/" + metadata.fileID)
+                        
+                        if self.copyFile(metadataNetQueue!.path, toPath: directoryUser + "/" + metadataNetQueue!.fileName) == nil {
 
-                                        // Update DB Metadata
-                                        _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
-                                        
-                                    }, failure: { (errorMessage, errorCode) in
-                                        print("failure")
-                                    })
-                                
-                                    if task != nil {
-                                        metadataNetQueue!.task = task
-                                        metadataNetQueue!.fileID = metadata.fileID
-                                        uploadMetadataNet = metadataNetQueue!
-                                    }
-                                } else {
-                                    // file not present, delete record Upload Queue
-                                    NCManageDatabase.sharedInstance.deleteQueueUpload(path: metadataNetQueue!.path)
-                                }
+                            let task = ocNetworking?.uploadFileNameServerUrl(metadataNetQueue!.serverUrl+"/"+metadataNetQueue!.fileName, fileNameLocalPath: directoryUser + "/" + metadataNetQueue!.fileName, communication: CCNetworking.shared().sharedOCCommunicationExtensionUpload(k_upload_session_extension), success: { (fileID, etag, date) in }, failure: { (errorMessage, errorCode) in })
+                            if task != nil {
+                                uploadMetadataNet = metadataNetQueue!
+                                uploadMetadataNet!.task = task
                             }
+                        } else {
+                            // file not present, delete record Upload Queue
+                            NCManageDatabase.sharedInstance.deleteQueueUpload(path: metadataNetQueue!.path)
                         }
                     }
                     
@@ -106,18 +85,36 @@ class FileProvider: NSFileProviderExtension {
                     if uploadMetadataNet != nil && uploadMetadataNet?.task != nil {
                         let task = uploadMetadataNet!.task
                         if task!.state != URLSessionTask.State.running {
-                            // remove only if NO error
-                            if task!.error == nil {
+                           
+                            let httpResponse = task!.response as! HTTPURLResponse
+
+                            if (httpResponse.statusCode >= 200 && httpResponse.statusCode < 300) {
+                            
                                 NCManageDatabase.sharedInstance.deleteQueueUpload(path: uploadMetadataNet!.path)
+
+                                let fields = httpResponse.allHeaderFields
+                                
+                                let etag = (fields["OC-ETag"] as! String).replacingOccurrences(of: "\"", with: "")
+                                let fileID = fields["OC-FileId"] as! String
+                                
+                                if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, fileID)) {
+                                    metadata.etag = etag
+                                    NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
+                                    NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: etag, etagFPE: etag)
+                                    _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
+                                    _ = self.copyFile(metadataNetQueue!.path, toPath: directoryUser + "/" + fileID)
+                                }
+                            } else {
+                                // Error
                             }
-                            // delete
-                            _ = self.deleteFile(directoryUser + "/" + uploadMetadataNet!.fileName)
+                                
                             uploadMetadataNet = nil
                         }
                     }
                 })
                 RunLoop.main.add(timerUpload!, forMode: .defaultRunLoopMode)
             }
+            
         } else {
             
             NSFileCoordinator().coordinate(writingItemAt: self.documentStorageURL, options: [], error: nil, byAccessor: { newURL in
@@ -1141,7 +1138,9 @@ class FileProvider: NSFileProviderExtension {
     }
 }
 
-// Setup Active Accont
+// --------------------------------------------------------------------------------------------
+//  MARK: - Setup Active Accont
+// --------------------------------------------------------------------------------------------
 
 func setupActiveAccount() {
     

+ 2 - 2
iOSClient/AppDelegate.m

@@ -1407,7 +1407,7 @@
         
     // E2EE : not in background
     if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) {
-        metadataNet = [[NCManageDatabase sharedInstance] getQueueUpload];
+        metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadWithPath:false];
         if (metadataNet) {
             tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@ AND e2eEncrypted = 1", self.activeAccount, metadataNet.serverUrl]];
             if (directory != nil)
@@ -1489,7 +1489,7 @@
     
     if (counterUploadInSessionAndInLock < maxConcurrentDownloadUpload && counterUploadInLock < 1) {
         
-        metadataNet = [[NCManageDatabase sharedInstance] getQueueUpload];
+        metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadWithPath:false];
         if (metadataNet) {
             
             if (metadataNet.path == nil)  {

+ 19 - 11
iOSClient/Database/NCManageDatabase.swift

@@ -2371,30 +2371,38 @@ class NCManageDatabase: NSObject {
         return Array(results.map { tableQueueUpload.init(value:$0) })
     }
     
-    @objc func getQueueUpload() -> CCMetadataNet? {
+    @objc func getQueueUpload(withPath: Bool) -> CCMetadataNet? {
         
         guard let tableAccount = self.getAccountActive() else {
             return nil
         }
         
+        var result: tableQueueUpload?
+
         let realm = try! Realm()
         realm.refresh()
         
-        guard let result = realm.objects(tableQueueUpload.self).filter("account = %@ AND lock == false", tableAccount.account).sorted(byKeyPath: "date", ascending: true).first else {
+        if withPath {
+            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND lock == false AND path != nil", tableAccount.account).sorted(byKeyPath: "date", ascending: true).first
+        } else {
+            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND lock == false", tableAccount.account).sorted(byKeyPath: "date", ascending: true).first
+        }
+        
+        if result == nil {
             return nil
         }
         
         let metadataNet = CCMetadataNet()
         
-        metadataNet.account = result.account
-        metadataNet.assetLocalIdentifier = result.assetLocalIdentifier
-        metadataNet.errorCode = result.errorCode
-        metadataNet.fileName = result.fileName
-        metadataNet.path = result.path
-        metadataNet.selector = result.selector
-        metadataNet.selectorPost = result.selectorPost
-        metadataNet.serverUrl = result.serverUrl
-        metadataNet.session = result.session
+        metadataNet.account = result!.account
+        metadataNet.assetLocalIdentifier = result!.assetLocalIdentifier
+        metadataNet.errorCode = result!.errorCode
+        metadataNet.fileName = result!.fileName
+        metadataNet.path = result!.path
+        metadataNet.selector = result!.selector
+        metadataNet.selectorPost = result!.selectorPost
+        metadataNet.serverUrl = result!.serverUrl
+        metadataNet.session = result!.session
         metadataNet.taskStatus = Int(k_taskStatusResume)
         
         return metadataNet