Эх сурвалжийг харах

#2290

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 2 жил өмнө
parent
commit
fb036395ef

+ 5 - 9
Share/NCShareExtension.swift

@@ -139,7 +139,6 @@ class NCShareExtension: UIViewController {
             indicatorView.ringWidth = 1.5
         }
 
-        NotificationCenter.default.addObserver(self, selector: #selector(triggerProgressTask(_:)), name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterProgressTask), object: nil)
         NotificationCenter.default.addObserver(self, selector: #selector(didCreateFolder(_:)), name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterCreateFolder), object: nil)
     }
 
@@ -193,11 +192,6 @@ class NCShareExtension: UIViewController {
         self.present(alertController, animated: true)
     }
 
-    @objc func triggerProgressTask(_ notification: NSNotification) {
-        guard let progress = notification.userInfo?["progress"] as? Float else { return }
-        hud.progress = progress
-    }
-
     func setNavigationBar(navigationTitle: String) {
 
         navigationItem.title = navigationTitle
@@ -347,10 +341,13 @@ extension NCShareExtension {
         metadata.chunk = chunckSize != 0 && metadata.size > chunckSize
 
         hud.textLabel.text = NSLocalizedString("_upload_file_", comment: "") + " \(counterUploaded + 1) " + NSLocalizedString("_of_", comment: "") + " \(filesName.count)"
-        hud.progress = 0
         hud.show(in: self.view)
 
-        NCNetworking.shared.upload(metadata: metadata) { } completion: { error in
+        NCNetworking.shared.upload(metadata: metadata) {
+            self.hud.progress = 0
+        } progressHandler: { _, _, fractionCompleted in
+            self.hud.progress = Float(fractionCompleted)
+        } completion: { error in
             if error != .success {
                 let path = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId)!
                 NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
@@ -358,7 +355,6 @@ extension NCShareExtension {
                 NCUtilityFileSystem.shared.deleteFile(filePath: path)
                 self.uploadErrors.append(metadata)
             }
-
             self.counterUploaded += 1
             self.upload()
         }

+ 9 - 3
iOSClient/Networking/NCNetworking.swift

@@ -384,6 +384,7 @@ import Photos
 
     @objc func upload(metadata: tableMetadata,
                       start: @escaping () -> () = { },
+                      progressHandler: @escaping (_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) -> () = { _, _, _ in },
                       completion: @escaping (_ error: NKError) -> () = { error in }) {
 
         let metadata = tableMetadata.init(value: metadata)
@@ -399,12 +400,12 @@ import Photos
             }
             #endif
         } else if metadata.chunk {
-            uploadChunkedFile(metadata: metadata, start: start) { error in
+            uploadChunkedFile(metadata: metadata, start: start, progressHandler: progressHandler) { error in
                 completion(error)
             }
         } else if metadata.session == NKCommon.shared.sessionIdentifierUpload {
             let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
-            uploadFile(metadata: metadata, fileNameLocalPath:fileNameLocalPath, start: start) { account, ocId, etag, date, size, allHeaderFields, afError, error in
+            uploadFile(metadata: metadata, fileNameLocalPath:fileNameLocalPath, start: start, progressHandler: progressHandler) { account, ocId, etag, date, size, allHeaderFields, afError, error in
                 completion(error)
             }
         } else {
@@ -414,7 +415,10 @@ import Photos
         }
     }
 
-    func uploadFile(metadata: tableMetadata, fileNameLocalPath: String, withUploadComplete: Bool = true ,addCustomHeaders: [String: String]? = nil, start: @escaping () -> Void, completion: @escaping (_ account: String, _ ocId: String?, _ etag: String?, _ date: NSDate?, _ size: Int64, _ allHeaderFields: [AnyHashable : Any]?, _ afError: AFError?, _ error: NKError) -> Void) {
+    func uploadFile(metadata: tableMetadata, fileNameLocalPath: String, withUploadComplete: Bool = true ,addCustomHeaders: [String: String]? = nil,
+                    start: @escaping () -> Void,
+                    progressHandler: @escaping (_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) -> () = { _, _, _ in },
+                    completion: @escaping (_ account: String, _ ocId: String?, _ etag: String?, _ date: NSDate?, _ size: Int64, _ allHeaderFields: [AnyHashable : Any]?, _ afError: AFError?, _ error: NKError) -> Void) {
 
         let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
         var uploadTask: URLSessionTask?
@@ -445,6 +449,8 @@ import Photos
                     "totalBytes": NSNumber(value: progress.totalUnitCount),
                     "totalBytesExpected": NSNumber(value: progress.completedUnitCount)])
 
+            progressHandler(progress.completedUnitCount, progress.totalUnitCount, progress.fractionCompleted)
+
         }) { account, ocId, etag, date, size, allHeaderFields, afError, error in
 
             self.uploadRequest.removeValue(forKey: fileNameLocalPath)

+ 7 - 2
iOSClient/Networking/NCNetworkingChunkedUpload.swift

@@ -26,7 +26,10 @@ import NextcloudKit
 
 extension NCNetworking {
 
-    internal func uploadChunkedFile(metadata: tableMetadata, start: @escaping () -> Void, completion: @escaping (_ error: NKError) -> Void) {
+    internal func uploadChunkedFile(metadata: tableMetadata,
+                                    start: @escaping () -> Void,
+                                    progressHandler: @escaping (_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) -> () = { _, _, _ in },
+                                    completion: @escaping (_ error: NKError) -> Void) {
 
         let directoryProviderStorageOcId = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId)!
         let chunkFolder = NCManageDatabase.shared.getChunkFolder(account: metadata.account, ocId: metadata.ocId)
@@ -94,7 +97,7 @@ extension NCNetworking {
                     if let size = size {
                         let totalBytesExpected = metadata.size
                         let totalBytes = size + progress.completedUnitCount
-                        let fractionCompleted = Float(totalBytes) / Float(totalBytesExpected)
+                        let fractionCompleted = Double(totalBytes) / Double(totalBytesExpected)
 
                         NotificationCenter.default.postOnMainThread(
                             name: NCGlobal.shared.notificationCenterProgressTask,
@@ -108,6 +111,8 @@ extension NCNetworking {
                                 "progress": NSNumber(value: fractionCompleted),
                                 "totalBytes": NSNumber(value: totalBytes),
                                 "totalBytesExpected": NSNumber(value: totalBytesExpected)])
+
+                        progressHandler(totalBytesExpected, totalBytes, fractionCompleted)
                     }
 
                 }) { _, _, _, _, _, _, _, error in