marinofaggiana 4 years ago
parent
commit
6babab3b16

+ 26 - 23
iOSClient/Database/NCManageDatabase.swift

@@ -2015,34 +2015,37 @@ class NCManageDatabase: NSObject {
         return tableMetadata.init(value: metadata)
     }
     
-    @objc func setMetadataSession(ocId: String, session: String? = nil, sessionError: String? = nil, sessionSelector: String? = nil, sessionTaskIdentifier: Int = 0, status: Int = 0) {
+    func setMetadataSession(ocId: String, session: String? = nil, sessionError: String? = nil, sessionSelector: String? = nil, sessionTaskIdentifier: Int? = nil, status: Int? = nil, etag: String? = nil, setFavorite: Bool = false) {
         
         let realm = try! Realm()
-        realm.beginWrite()
-
-        guard let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first else {
-            realm.cancelWrite()
-            return
-        }
-        
-        if let session = session {
-            result.session = session
-        }
-        if let sessionError = sessionError {
-            result.sessionError = sessionError
-        }
-        if let sessionSelector = sessionSelector {
-            result.sessionSelector = sessionSelector
-        }
-        
-        result.sessionTaskIdentifier = sessionTaskIdentifier
-        result.status = status
-        
         do {
-            try realm.commitWrite()
+            try realm.write {
+                if let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first {
+                    if let session = session {
+                        result.session = session
+                    }
+                    if let sessionError = sessionError {
+                        result.sessionError = sessionError
+                    }
+                    if let sessionSelector = sessionSelector {
+                        result.sessionSelector = sessionSelector
+                    }
+                    if let sessionTaskIdentifier = sessionTaskIdentifier {
+                        result.sessionTaskIdentifier = sessionTaskIdentifier
+                    }
+                    if let status = status {
+                        result.status = status
+                    }
+                    if let etag = etag {
+                        result.etag = etag
+                    }
+                    if setFavorite {
+                        result.favorite = true
+                    }
+                }
+            }
         } catch let error {
             print("[LOG] Could not write to database: ", error)
-            return
         }
     }
     

+ 1 - 1
iOSClient/Favorites/CCFavorites.m

@@ -607,7 +607,7 @@
                         [self shouldPerformSegue:self.metadata selector:selectorLoadFileView];
                     }
                     
-                    [[NCNetworking shared] downloadWithMetadata:self.metadata selector:selectorLoadFileViewFavorite setFavorite:false completion:^(NSInteger errorCode) { }];
+                    [[NCNetworking shared] downloadWithOcId:self.metadata.ocId selector:selectorLoadFileViewFavorite setFavorite:false completion:^(NSInteger errorCode) { }];
                 }
             }
         }

+ 4 - 4
iOSClient/Main/CCMain.m

@@ -536,7 +536,7 @@
                    
         if (!metadata.directory && favorite && [CCUtility getFavoriteOffline]) {
                    
-            [[NCNetworking shared] downloadWithMetadata:metadata selector:selectorDownloadSynchronize setFavorite:true completion:^(NSInteger errorCode) { }];
+            [[NCNetworking shared] downloadWithOcId:metadata.ocId selector:selectorDownloadSynchronize setFavorite:true completion:^(NSInteger errorCode) { }];
         }
     } else {
         [[NCContentPresenter shared] messageNotification:@"_error_" description:errorDescription delay:k_dismissAfterSecond type:messageTypeError errorCode:errorCode];
@@ -1755,7 +1755,7 @@
         
     } else {
         
-        [[NCNetworking shared] downloadWithMetadata:self.metadata selector:selectorLoadCopy setFavorite:false completion:^(NSInteger errorCode) { }];
+        [[NCNetworking shared] downloadWithOcId:self.metadata.ocId selector:selectorLoadCopy setFavorite:false completion:^(NSInteger errorCode) { }];
     }
 }
 
@@ -1775,7 +1775,7 @@
             
         } else {
 
-            [[NCNetworking shared] downloadWithMetadata:metadata selector:selectorLoadCopy setFavorite:false completion:^(NSInteger errorCode) { }];
+            [[NCNetworking shared] downloadWithOcId:metadata.ocId selector:selectorLoadCopy setFavorite:false completion:^(NSInteger errorCode) { }];
         }
     }
     
@@ -2505,7 +2505,7 @@
                         [self shouldPerformSegue:self.metadata selector:selectorLoadFileView];
                     }
                    
-                    [[NCNetworking shared] downloadWithMetadata:self.metadata selector:selectorLoadFileView setFavorite:false completion:^(NSInteger errorCode) { }];
+                    [[NCNetworking shared] downloadWithOcId:self.metadata.ocId selector:selectorLoadFileView setFavorite:false completion:^(NSInteger errorCode) { }];
                 }
             }
         }

+ 2 - 2
iOSClient/Main/Menu/CCMain+Menu.swift

@@ -486,10 +486,10 @@ extension CCMain {
                         action: { menuAction in
                             if (localFile == nil || !CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView)) {
                                 
-                                NCNetworking.shared.download(metadata: metadata, selector: selectorLoadOffline) { (_) in }
+                                NCNetworking.shared.download(ocId: metadata.ocId, selector: selectorLoadOffline) { (_) in }
                                 
                                 if let metadataLivePhoto = NCManageDatabase.sharedInstance.isLivePhoto(metadata: metadata) {
-                                    NCNetworking.shared.download(metadata: metadataLivePhoto, selector: selectorLoadOffline) { (_) in }
+                                    NCNetworking.shared.download(ocId: metadataLivePhoto.ocId, selector: selectorLoadOffline) { (_) in }
                                 }
                                 
                             } else {

+ 1 - 1
iOSClient/Main/Menu/NCDetailNavigationController+Menu.swift

@@ -144,7 +144,7 @@ extension NCDetailNavigationController {
                     action: { menuAction in
                         if ((localFile == nil || !CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView)) && metadata.session == "") {
                             
-                            NCNetworking.shared.download(metadata: metadata, selector: selectorLoadOffline) { (_) in }
+                            NCNetworking.shared.download(ocId: metadata.ocId, selector: selectorLoadOffline) { (_) in }
                         } else {
                             NCManageDatabase.sharedInstance.setLocalFile(ocId: metadata.ocId, offline: !localFile!.offline)
                         }

+ 2 - 2
iOSClient/Main/NCDetailViewController.swift

@@ -361,7 +361,7 @@ class NCDetailViewController: UIViewController {
         if let userInfo = notification.userInfo as NSDictionary? {
             if let metadata = userInfo["metadata"] as? tableMetadata {
 
-                NCNetworking.shared.download(metadata: metadata, selector: "") { (_) in }
+                NCNetworking.shared.download(ocId: metadata.ocId, selector: "") { (_) in }
 
                 if let index = metadatas.firstIndex(where: { $0.ocId == metadata.ocId }) {
                     metadatas[index] = self.metadata!
@@ -671,7 +671,7 @@ extension NCDetailViewController: NCViewerImageViewControllerDelegate, NCViewerI
             
             if NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@ AND session != ''", metadata.ocId)) == nil {
                 
-                NCNetworking.shared.download(metadata: metadata, selector: "") { (_) in }
+                NCNetworking.shared.download(ocId: metadata.ocId, selector: "") { (_) in }
             }
             
             completion(index, NCViewerImageCommon.shared.getImageOffOutline(frame: self.view.frame, type: metadata.typeFile), metadata, ZoomScale.default, nil)

+ 1 - 1
iOSClient/Main/NCMainCommon.swift

@@ -790,7 +790,7 @@ class NCMainCommon: NSObject, NCAudioRecorderViewControllerDelegate, UIDocumentI
                                     
         } else {
             
-            NCNetworking.shared.download(metadata: metadata, selector: selector) { (_) in }
+            NCNetworking.shared.download(ocId: metadata.ocId, selector: selector) { (_) in }
         }
     }
 

+ 20 - 35
iOSClient/Networking/NCNetworking.swift

@@ -184,32 +184,32 @@ import Alamofire
         }
     }
     
-    @objc func download(metadata: tableMetadata, selector: String, setFavorite: Bool = false, completion: @escaping (_ errorCode: Int)->()) {
+    @objc func download(ocId: String, selector: String, setFavorite: Bool = false, completion: @escaping (_ errorCode: Int)->()) {
         
-        var metadata = metadata
-        let serverUrl = metadata.serverUrl
-        let serverUrlFileName = serverUrl + "/" + metadata.fileName
+        guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@", ocId), freeze: true) else {
+            completion(Int(k_CCErrorInternalError))
+            return
+        }
+        let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
         let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
         
         if metadata.status == Int(k_metadataStatusInDownload) || metadata.status == Int(k_metadataStatusDownloading) { return }
-        
-        metadata.status = Int(k_metadataStatusInDownload)
-        metadata.session = NCCommunicationCommon.shared.sessionIdentifierDownload
-        if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
-        
+                
+        NCManageDatabase.sharedInstance.setMetadataSession(ocId: ocId, session: NCCommunicationCommon.shared.sessionIdentifierDownload, sessionError: "", sessionSelector: selector, status: Int(k_metadataStatusInDownload))
+            
         NotificationCenter.default.postOnMainThread(name: k_notificationCenter_reloadDataSource, object: nil, userInfo: ["ocId":metadata.ocId, "serverUrl":metadata.serverUrl])
         
+        
         NCCommunication.shared.download(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath, requestHandler: { (request) in
             
             self.downloadRequest[fileNameLocalPath] = request
-            metadata.status = Int(k_metadataStatusDownloading)
-            if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
+            NCManageDatabase.sharedInstance.setMetadataSession(ocId: ocId, status: Int(k_metadataStatusDownloading))
+            NotificationCenter.default.postOnMainThread(name: k_notificationCenter_downloadFileStart, userInfo: ["ocId":metadata.ocId, "serverUrl":metadata.serverUrl, "account":metadata.account])
             
-            NotificationCenter.default.postOnMainThread(name: k_notificationCenter_downloadFileStart, userInfo: ["ocId":metadata.ocId, "serverUrl":serverUrl, "account":metadata.account])
             
         }, progressHandler: { (progress) in
             
-            NotificationCenter.default.postOnMainThread(name: k_notificationCenter_progressTask, object: nil, userInfo: ["account":metadata.account, "ocId":metadata.ocId, "serverUrl":serverUrl, "status":NSNumber(value: k_metadataStatusInDownload), "progress":NSNumber(value: progress.fractionCompleted), "totalBytes":NSNumber(value: progress.totalUnitCount), "totalBytesExpected":NSNumber(value: progress.completedUnitCount)])
+            NotificationCenter.default.postOnMainThread(name: k_notificationCenter_progressTask, object: nil, userInfo: ["account":metadata.account, "ocId":metadata.ocId, "serverUrl":metadata.serverUrl, "status":NSNumber(value: k_metadataStatusInDownload), "progress":NSNumber(value: progress.fractionCompleted), "totalBytes":NSNumber(value: progress.totalUnitCount), "totalBytesExpected":NSNumber(value: progress.completedUnitCount)])
             
         }) { (account, etag, date, length, error, errorCode, errorDescription) in
                         
@@ -217,18 +217,11 @@ import Alamofire
            
             if errorCode == 0 {
                
-                metadata.etag = etag ?? ""
-                if setFavorite { metadata.favorite = true }
-                
-                metadata.session = ""
-                metadata.sessionError = ""
-                metadata.status = Int(k_metadataStatusNormal)
-                
+                NCManageDatabase.sharedInstance.setMetadataSession(ocId: ocId, session: "", sessionError: "", sessionSelector: selector, status: Int(k_metadataStatusNormal), etag: etag, setFavorite: setFavorite)
                 NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
-                if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
-
+                
                 #if !EXTENSION
-                if let result = NCManageDatabase.sharedInstance.getE2eEncryption(predicate: NSPredicate(format: "fileNameIdentifier == %@ AND serverUrl == %@", metadata.fileName, serverUrl)) {
+                if let result = NCManageDatabase.sharedInstance.getE2eEncryption(predicate: NSPredicate(format: "fileNameIdentifier == %@ AND serverUrl == %@", metadata.fileName, metadata.serverUrl)) {
                     
                     NCEndToEndEncryption.sharedManager()?.decryptFileName(metadata.fileName, fileNameView: metadata.fileNameView, ocId: metadata.ocId, key: result.key, initializationVector: result.initializationVector, authenticationTag: result.authenticationTag)
                 }
@@ -238,20 +231,12 @@ import Alamofire
                 
             } else if error?.isExplicitlyCancelledError ?? false {
                                 
-                metadata.session = ""
-                metadata.sessionError = ""
-                metadata.status = Int(k_metadataStatusNormal)
-                
-                if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
-            
+                NCManageDatabase.sharedInstance.setMetadataSession(ocId: ocId, session: "", sessionError: "", sessionSelector: selector, status: Int(k_metadataStatusNormal))
+                                
             } else {
+                                
+                NCManageDatabase.sharedInstance.setMetadataSession(ocId: ocId, session: "", sessionError: errorDescription, sessionSelector: selector, status: Int(k_metadataStatusDownloadError))
                 
-                metadata.session = ""
-                metadata.sessionError = errorDescription
-                metadata.status = Int(k_metadataStatusDownloadError)
-                
-                if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
-
                 #if !EXTENSION
                 if errorCode == 401 || errorCode == 403 {
                     NCNetworkingCheckRemoteUser.shared.checkRemoteUser(account: metadata.account)

+ 1 - 1
iOSClient/Networking/NCOperationQueue.swift

@@ -127,7 +127,7 @@ class NCOperationDownload: ConcurrentOperation {
         if isCancelled {
             self.finish()
         } else {
-            NCNetworking.shared.download(metadata: self.metadata, selector: self.selector, setFavorite: self.setFavorite) { (_) in
+            NCNetworking.shared.download(ocId: self.metadata.ocId, selector: self.selector, setFavorite: self.setFavorite) { (_) in
                 self.finish()
             }
         }