소스 검색

#2290

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 2 년 전
부모
커밋
6bda7397d7
3개의 변경된 파일35개의 추가작업 그리고 11개의 파일을 삭제
  1. 8 2
      Share/NCShareExtension.swift
  2. 17 4
      iOSClient/Networking/E2EE/NCNetworkingE2EEUpload.swift
  3. 10 5
      iOSClient/Networking/NCNetworking.swift

+ 8 - 2
Share/NCShareExtension.swift

@@ -331,7 +331,7 @@ extension NCShareExtension {
 
     func upload() {
         guard uploadStarted else { return }
-        guard uploadMetadata.count > counterUploaded else { return finishedUploading() }
+        guard uploadMetadata.count > counterUploaded else { return DispatchQueue.main.async { self.finishedUploading() } }
         let metadata = uploadMetadata[counterUploaded]
         let results = NKCommon.shared.getInternalType(fileName: metadata.fileNameView, mimeType: metadata.contentType, directory: false)
         metadata.contentType = results.mimeType
@@ -343,7 +343,7 @@ extension NCShareExtension {
         hud.textLabel.text = NSLocalizedString("_upload_file_", comment: "") + " \(counterUploaded + 1) " + NSLocalizedString("_of_", comment: "") + " \(filesName.count)"
         hud.show(in: self.view)
 
-        NCNetworking.shared.upload(metadata: metadata) {
+        NCNetworking.shared.upload(metadata: metadata, uploadE2EEDelegate: self) {
             self.hud.progress = 0
         } progressHandler: { _, _, fractionCompleted in
             self.hud.progress = Float(fractionCompleted)
@@ -376,3 +376,9 @@ extension NCShareExtension {
         }
     }
 }
+
+extension NCShareExtension: uploadE2EEDelegate {
+    func uploadE2EEProgress(_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) {
+        self.hud.progress = Float(fractionCompleted)
+    }
+}

+ 17 - 4
iOSClient/Networking/E2EE/NCNetworkingE2EEUpload.swift

@@ -26,13 +26,23 @@ import CFNetwork
 import Alamofire
 import Foundation
 
+protocol uploadE2EEDelegate: AnyObject {
+    func start()
+    func uploadE2EEProgress(_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double)
+}
+
+extension uploadE2EEDelegate {
+    func start() { }
+    func uploadE2EEProgress(_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) {}
+}
+
 class NCNetworkingE2EEUpload: NSObject {
     public static let shared: NCNetworkingE2EEUpload = {
         let instance = NCNetworkingE2EEUpload()
         return instance
     }()
 
-    func upload(metadata: tableMetadata) async -> (NKError) {
+    func upload(metadata: tableMetadata, uploadE2EEDelegate: uploadE2EEDelegate? = nil) async -> (NKError) {
 
         var metadata = tableMetadata.init(value: metadata)
         let ocIdTemp = metadata.ocId
@@ -77,7 +87,7 @@ class NCNetworkingE2EEUpload: NSObject {
         }
 
         // Send file
-        let sendFileResults = await sendFile(metadata: metadata, e2eToken: e2eToken)
+        let sendFileResults = await sendFile(metadata: metadata, e2eToken: e2eToken, uploadE2EEDelegate: uploadE2EEDelegate)
 
         // ** Unlock **
         await NCNetworkingE2EE.shared.unlock(account: metadata.account, serverUrl: metadata.serverUrl)
@@ -171,13 +181,16 @@ class NCNetworkingE2EEUpload: NSObject {
         return putE2EEMetadataResults.error
     }
 
-    private func sendFile(metadata: tableMetadata, e2eToken: String) async -> (ocId: String?, etag: String?, date: NSDate? ,afError: AFError?, error: NKError) {
+    private func sendFile(metadata: tableMetadata, e2eToken: String, uploadE2EEDelegate: uploadE2EEDelegate? = nil) async -> (ocId: String?, etag: String?, date: NSDate? ,afError: AFError?, error: NKError) {
 
         let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
 
         return await withCheckedContinuation({ continuation in
-            NCNetworking.shared.uploadFile(metadata: metadata, fileNameLocalPath:fileNameLocalPath, withUploadComplete: false, addCustomHeaders: ["e2e-token": e2eToken]) {
+            NCNetworking.shared.uploadFile(metadata: metadata, fileNameLocalPath: fileNameLocalPath, withUploadComplete: false, addCustomHeaders: ["e2e-token": e2eToken]) {
+                uploadE2EEDelegate?.start()
                 NCContentPresenter.shared.noteTop(text: NSLocalizedString("_upload_e2ee_", comment: ""), image: nil, type: NCContentPresenter.messageType.info, delay: NCGlobal.shared.dismissAfterSecond, priority: .max)
+            } progressHandler: { totalBytesExpected, totalBytes, fractionCompleted in
+                uploadE2EEDelegate?.uploadE2EEProgress(totalBytesExpected, totalBytes, fractionCompleted)
             } completion: { account, ocId, etag, date, size, allHeaderFields, afError, error in
                 continuation.resume(returning: (ocId: ocId, etag: etag, date: date ,afError: afError, error: error))
             }

+ 10 - 5
iOSClient/Networking/NCNetworking.swift

@@ -34,6 +34,10 @@ import Photos
     @objc optional func uploadComplete(fileName: String, serverUrl: String, ocId: String?, etag: String?, date: NSDate?, size: Int64, description: String?, task: URLSessionTask, error: NKError)
 }
 
+#if EXTENSION_FILE_PROVIDER_EXTENSION || EXTENSION_WIDGET
+@objc protocol uploadE2EEDelegate: AnyObject { }
+#endif
+
 @objc class NCNetworking: NSObject, NKCommonDelegate {
     @objc public static let shared: NCNetworking = {
         let instance = NCNetworking()
@@ -382,10 +386,11 @@ import Photos
 
     // MARK: - Upload
 
-    @objc func upload(metadata: tableMetadata,
-                      start: @escaping () -> () = { },
-                      progressHandler: @escaping (_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) -> () = { _, _, _ in },
-                      completion: @escaping (_ error: NKError) -> () = { error in }) {
+    func upload(metadata: tableMetadata,
+                uploadE2EEDelegate: uploadE2EEDelegate? = nil,
+                start: @escaping () -> () = { },
+                progressHandler: @escaping (_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) -> () = { _, _, _ in },
+                completion: @escaping (_ error: NKError) -> () = { error in }) {
 
         let metadata = tableMetadata.init(value: metadata)
         let isDirectoryE2EE = NCUtility.shared.isDirectoryE2EE(metadata: metadata)
@@ -395,7 +400,7 @@ import Photos
             #if !EXTENSION_FILE_PROVIDER_EXTENSION && !EXTENSION_WIDGET
             Task {
                 start()
-                let error = await NCNetworkingE2EEUpload.shared.upload(metadata: metadata)
+                let error = await NCNetworkingE2EEUpload.shared.upload(metadata: metadata, uploadE2EEDelegate: uploadE2EEDelegate)
                 completion(error)
             }
             #endif