Bladeren bron

fix e2ee upload

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 2 jaren geleden
bovenliggende
commit
e2503a1a8c

+ 2 - 2
iOSClient/Data/NCDataSource.swift

@@ -114,7 +114,7 @@ class NCDataSource: NSObject {
         // get all Section
         for metadata in self.metadatas {
             // skipped livePhoto
-            if filterLivePhoto && metadata.livePhoto && metadata.ext == "mov" {
+            if filterLivePhoto && metadata.livePhoto && (metadata.fileNameView as NSString).pathExtension.lowercased() == "mov" {
                 continue
             }
             let section = NSLocalizedString(self.getSectionValue(metadata: metadata), comment: "")
@@ -521,7 +521,7 @@ class NCMetadataForSection: NSObject {
             }
 
             // skipped livePhoto
-            if filterLivePhoto && metadata.livePhoto && metadata.ext == "mov" {
+            if filterLivePhoto && metadata.livePhoto && (metadata.fileNameView as NSString).pathExtension.lowercased() == "mov" {
                 continue
             }
 

+ 4 - 1
iOSClient/Data/NCManageDatabase+Metadata.swift

@@ -115,12 +115,15 @@ extension NCManageDatabase {
         // Live Photo "DETECT"
         if !metadata.directory && !metadata.livePhoto && (metadata.classFile == NKCommon.typeClassFile.video.rawValue || metadata.classFile == NKCommon.typeClassFile.image.rawValue) {
             var classFile = metadata.classFile
+            var fileNameView = metadata.fileNameView
             if classFile == NKCommon.typeClassFile.image.rawValue {
                 classFile = NKCommon.typeClassFile.video.rawValue
+                fileNameView = (fileNameView as NSString).deletingPathExtension + ".mov"
             } else {
                 classFile = NKCommon.typeClassFile.image.rawValue
+                fileNameView = (fileNameView as NSString).deletingPathExtension + ".jpg"
             }
-            if getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameWithoutExt == %@ AND ocId != %@ AND classFile == %@", metadata.account, metadata.serverUrl, metadata.fileNameWithoutExt, metadata.ocId, classFile)) != nil {
+            if getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView =[c] %@ AND ocId != %@ AND classFile == %@", metadata.account, metadata.serverUrl, fileNameView, metadata.ocId, classFile)) != nil {
                 metadata.livePhoto = true
             }
         }

+ 40 - 47
iOSClient/Networking/NCNetworkingProcessUpload.swift

@@ -50,13 +50,16 @@ class NCNetworkingProcessUpload: NSObject {
     }
 
     @objc private func processForeground() {
+        
         guard let account = NCManageDatabase.shared.getActiveAccount(), UIApplication.shared.applicationState == .active else { return }
+        let metadatasUpload = NCManageDatabase.shared.getMetadatas(predicate: NSPredicate(format: "status == %d OR status == %d", NCGlobal.shared.metadataStatusInUpload, NCGlobal.shared.metadataStatusUploading))
+        if metadatasUpload.filter({ $0.chunk || $0.e2eEncrypted }).count > 0 { return }
 
         stopTimer()
 
         var counterUpload: Int = 0
         let sessionSelectors = [NCGlobal.shared.selectorUploadFileNODelete, NCGlobal.shared.selectorUploadFile, NCGlobal.shared.selectorUploadAutoUpload, NCGlobal.shared.selectorUploadAutoUploadAll]
-        let metadatasUpload = NCManageDatabase.shared.getMetadatas(predicate: NSPredicate(format: "status == %d OR status == %d", NCGlobal.shared.metadataStatusInUpload, NCGlobal.shared.metadataStatusUploading))
+
         counterUpload = metadatasUpload.count
 
         print("[LOG] PROCESS-UPLOAD \(counterUpload)")
@@ -67,63 +70,53 @@ class NCNetworkingProcessUpload: NSObject {
 
         NCNetworking.shared.getOcIdInBackgroundSession(queue: DispatchQueue.global(), completion: { listOcId in
 
-            for sessionSelector in sessionSelectors {
-                if counterUpload < NCGlobal.shared.maxConcurrentOperationUpload {
+            for sessionSelector in sessionSelectors where counterUpload < NCGlobal.shared.maxConcurrentOperationUpload {
 
-                    let limit = NCGlobal.shared.maxConcurrentOperationUpload - counterUpload
-                    let metadatas = NCManageDatabase.shared.getAdvancedMetadatas(predicate: NSPredicate(format: "sessionSelector == %@ AND status == %d", sessionSelector, NCGlobal.shared.metadataStatusWaitUpload), page: 1, limit: limit, sorted: "date", ascending: true)
-                    if metadatas.count > 0 {
-                        NKCommon.shared.writeLog("[INFO] PROCESS-UPLOAD find \(metadatas.count) items")
-                    }
+                let limit = NCGlobal.shared.maxConcurrentOperationUpload - counterUpload
+                let metadatas = NCManageDatabase.shared.getAdvancedMetadatas(predicate: NSPredicate(format: "sessionSelector == %@ AND status == %d", sessionSelector, NCGlobal.shared.metadataStatusWaitUpload), page: 1, limit: limit, sorted: "date", ascending: true)
+                if metadatas.count > 0 {
+                    NKCommon.shared.writeLog("[INFO] PROCESS-UPLOAD find \(metadatas.count) items")
+                }
 
-                    for metadata in metadatas {
+                for metadata in metadatas where counterUpload < NCGlobal.shared.maxConcurrentOperationUpload {
 
-                        // Different account
-                        if account.account != metadata.account {
-                            NKCommon.shared.writeLog("[INFO] Process auto upload skipped file: \(metadata.serverUrl)/\(metadata.fileNameView) on account: \(metadata.account), because the actual account is \(account.account).")
-                            continue
-                        }
+                    // Different account
+                    if account.account != metadata.account {
+                        NKCommon.shared.writeLog("[INFO] Process auto upload skipped file: \(metadata.serverUrl)/\(metadata.fileNameView) on account: \(metadata.account), because the actual account is \(account.account).")
+                        continue
+                    }
 
-                        // Is already in upload background? skipped
-                        if listOcId.contains(metadata.ocId) {
-                            NKCommon.shared.writeLog("[INFO] Process auto upload skipped file: \(metadata.serverUrl)/\(metadata.fileNameView), because is already in session.")
-                            continue
-                        }
+                    // Is already in upload background? skipped
+                    if listOcId.contains(metadata.ocId) {
+                        NKCommon.shared.writeLog("[INFO] Process auto upload skipped file: \(metadata.serverUrl)/\(metadata.fileNameView), because is already in session.")
+                        continue
+                    }
 
-                        // Session Extension ? skipped
-                        if metadata.session == NCNetworking.shared.sessionIdentifierBackgroundExtension {
-                            continue
-                        }
+                    // Session Extension ? skipped
+                    if metadata.session == NCNetworking.shared.sessionIdentifierBackgroundExtension {
+                        continue
+                    }
 
-                        // Is already in upload E2EE / CHUNK ? exit [ ONLY ONE IN QUEUE ]
-                        for metadata in metadatasUpload {
-                            if metadata.chunk || metadata.e2eEncrypted {
-                                counterUpload = NCGlobal.shared.maxConcurrentOperationUpload
-                                continue
-                            }
+                    let semaphore = DispatchSemaphore(value: 0)
+                    NCUtility.shared.extractFiles(from: metadata) { metadatas in
+                        if metadatas.isEmpty {
+                            NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
                         }
-
-                        let semaphore = DispatchSemaphore(value: 0)
-                        NCUtility.shared.extractFiles(from: metadata) { metadatas in
-                            if metadatas.isEmpty {
-                                NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+                        for metadata in metadatas where counterUpload < NCGlobal.shared.maxConcurrentOperationUpload {
+                            let isWiFi = NCNetworking.shared.networkReachability == NKCommon.typeReachability.reachableEthernetOrWiFi
+                            if metadata.session == NCNetworking.shared.sessionIdentifierBackgroundWWan && !isWiFi { continue }
+                            if let metadata = NCManageDatabase.shared.setMetadataStatus(ocId: metadata.ocId, status: NCGlobal.shared.metadataStatusInUpload) {
+                                NCNetworking.shared.upload(metadata: metadata)
                             }
-                            for metadata in metadatas {
-                                let isWiFi = NCNetworking.shared.networkReachability == NKCommon.typeReachability.reachableEthernetOrWiFi
-                                if metadata.session == NCNetworking.shared.sessionIdentifierBackgroundWWan && !isWiFi { continue }
-                                if let metadata = NCManageDatabase.shared.setMetadataStatus(ocId: metadata.ocId, status: NCGlobal.shared.metadataStatusInUpload) {
-                                    NCNetworking.shared.upload(metadata: metadata)
-                                }
-                                if metadata.e2eEncrypted || metadata.chunk {
-                                    counterUpload = NCGlobal.shared.maxConcurrentOperationUpload
-                                } else {
-                                    counterUpload += 1
-                                }
+                            if metadata.e2eEncrypted || metadata.chunk {
+                                counterUpload = NCGlobal.shared.maxConcurrentOperationUpload
+                            } else {
+                                counterUpload += 1
                             }
-                            semaphore.signal()
                         }
-                        semaphore.wait()
+                        semaphore.signal()
                     }
+                    semaphore.wait()
                 }
             }
 

+ 2 - 1
iOSClient/Utility/NCUtility.swift

@@ -543,6 +543,7 @@ class NCUtility: NSObject {
         options.deliveryMode = PHImageRequestOptionsDeliveryMode.fastFormat
         options.isNetworkAccessAllowed = true
         let chunckSize = CCUtility.getChunkSize() * 1000000
+        let e2eEncrypted = CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account, urlBase: metadata.urlBase)
         let ocId = NSUUID().uuidString
         let fileName = (metadata.fileName as NSString).deletingPathExtension + ".mov"
         let fileNamePath = CCUtility.getDirectoryProviderStorageOcId(ocId, fileNameView: fileName)!
@@ -562,7 +563,7 @@ class NCUtility: NSObject {
                 if error != nil { return completion(nil) }
                 let metadataLivePhoto = NCManageDatabase.shared.createMetadata(account: metadata.account, user: metadata.user, userId: metadata.userId, fileName: fileName, fileNameView: fileName, ocId: ocId, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, url: "", contentType: "", isLivePhoto: true)
                 metadataLivePhoto.classFile = NKCommon.typeClassFile.video.rawValue
-                metadataLivePhoto.e2eEncrypted = metadata.e2eEncrypted
+                metadataLivePhoto.e2eEncrypted = e2eEncrypted
                 metadataLivePhoto.isExtractFile = true
                 metadataLivePhoto.session = metadata.session
                 metadataLivePhoto.sessionSelector = metadata.sessionSelector