marinofaggiana 4 سال پیش
والد
کامیت
e656bc9e17

+ 4 - 0
Nextcloud.xcodeproj/project.pbxproj

@@ -270,6 +270,8 @@
 		F7AE00FA230E81EB007ACF8A /* NCBrowserWeb.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7AE00F9230E81EB007ACF8A /* NCBrowserWeb.storyboard */; };
 		F7AF7633246BEDFE00B86E3C /* TOPasscodeViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7AF7632246BEDFE00B86E3C /* TOPasscodeViewController.framework */; };
 		F7B1076D25D3CF2800E72DE2 /* BackgroundTasks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7B1076C25D3CF2800E72DE2 /* BackgroundTasks.framework */; };
+		F7B3A9A42618658100D76AD9 /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; };
+		F7B3A9A92618658200D76AD9 /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; };
 		F7B7504B2397D38F004E13EC /* UIImage+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B7504A2397D38E004E13EC /* UIImage+Extensions.swift */; };
 		F7B8B83025681C3400967775 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F7B8B82F25681C3400967775 /* GoogleService-Info.plist */; };
 		F7BAADC81ED5A87C00B7EAD4 /* NCDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB41ED5A87C00B7EAD4 /* NCDatabase.swift */; };
@@ -1935,6 +1937,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				F785EEA52461A4CF00B3F945 /* CCUtility.m in Sources */,
+				F7B3A9A92618658200D76AD9 /* NCContentPresenter.swift in Sources */,
 				2C1D5D7923E2DE9100334ABB /* NCBrand.swift in Sources */,
 				F702F2D225EE5B5C008F8E80 /* NCGlobal.swift in Sources */,
 				F7A76DCE256A71CF00119AB3 /* UIImage+Extensions.swift in Sources */,
@@ -1990,6 +1993,7 @@
 				F785EE9E2461A09900B3F945 /* NCNetworking.swift in Sources */,
 				F771E3D320E2392D00AFB62D /* FileProviderExtension.swift in Sources */,
 				F73D5E49246DE09200DF6467 /* NCElementsJSON.swift in Sources */,
+				F7B3A9A42618658100D76AD9 /* NCContentPresenter.swift in Sources */,
 				F771E3D520E2392D00AFB62D /* FileProviderItem.swift in Sources */,
 				F7434B3620E23FE000417916 /* NCManageDatabase.swift in Sources */,
 				F798F0E725880609000DAFFD /* UIColor+Extensions.swift in Sources */,

+ 28 - 10
iOSClient/Networking/NCNetworking.swift

@@ -450,25 +450,29 @@ import Queuer
     private func uploadChunkFile(metadata: tableMetadata, account: tableAccount, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
         
         let userId = account.userId
+        let ocId = metadata.ocId
         let serverUrl = metadata.serverUrl
         let folder = NSUUID().uuidString
         let uploadFolder = metadata.urlBase + "/" + NCUtilityFileSystem.shared.getDAV() + "/uploads/" + userId + "/" + folder
         var uploadErrorCode: Int = 0
-        var uploadErrorDescription = ""
         
-        NCCommunication.shared.createFolder(uploadFolder) { (account, ocId, date, errorCode, errorDescription) in
+        NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSource, userInfo: ["serverUrl":serverUrl])
+        
+        NCCommunication.shared.createFolder(uploadFolder) { (account, _, date, errorCode, errorDescription) in
             
             if errorCode == 0 {
                 
-                let path = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId)!
+                let path = CCUtility.getDirectoryProviderStorageOcId(ocId)!
                 if let filesNames = self.fileChunks(path: path, fileName: metadata.fileName, pathChunks: path, size: 10) {
                     
                     DispatchQueue.global(qos: .background).async {
                         
+                        NCUtility.shared.startActivityIndicator(backgroundView: nil, blurEffect: true)
+                        
                         for fileName in filesNames {
                                                     
                             let serverUrlFileName = uploadFolder + "/" + fileName
-                            let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: fileName)!
+                            let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(ocId, fileNameView: fileName)!
                             let semaphore = Semaphore()
 
                             NCCommunication.shared.upload(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath, dateCreationFile: metadata.creationDate as Date, dateModificationFile: metadata.date as Date, customUserAgent: nil, addCustomHeaders: nil, requestHandler: { (request) in
@@ -480,7 +484,6 @@ import Queuer
                             }) { (account, ocId, etag, date, size, allHeaderFields, error, errorCode, errorDescription) in
                                 
                                 uploadErrorCode = errorCode
-                                uploadErrorDescription = errorDescription
                                 semaphore.continue()
                             }
                             
@@ -499,7 +502,7 @@ import Queuer
                             NCCommunication.shared.moveFileOrFolder(serverUrlFileNameSource: serverUrlFileNameSource, serverUrlFileNameDestination: serverUrlFileNameDestination, overwrite: true) { (account, errorCode, errorDescription) in
                                                     
                                 if errorCode == 0 {
-                                    NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+                                    NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", ocId))
                                     self.readFile(serverUrlFileName: serverUrlFileNameDestination, account: account) { (account, metadata, errorCode, errorDescription) in
                                         
                                         if errorCode == 0, let metadata = metadata {
@@ -510,7 +513,7 @@ import Queuer
                                         }
                                     }
                                 } else {
-                                    print("error Assembling the chunks")
+                                    self.uploadChunkFileError(ocId: ocId, serverUrl: serverUrl)
                                 }
                             }
                                                         
@@ -518,20 +521,35 @@ import Queuer
                             
                             // Aborting the upload
                             NCCommunication.shared.deleteFileOrFolder(uploadFolder) { (account, errorCode, errorDescription) in
-                                print("")
+                                
+                                self.uploadChunkFileError(ocId: ocId, serverUrl: serverUrl)
                             }
                         }
+                        
+                        NCUtility.shared.stopActivityIndicator()
                     }
+                    
                 } else {
-                    print("error chunk filename")
+                    
+                    self.uploadChunkFileError(ocId: ocId, serverUrl: serverUrl)
                 }
                 
             } else {
-                print("error create directory")
+                
+                self.uploadChunkFileError(ocId: ocId, serverUrl: serverUrl)
             }
         }
     }
     
+    private func uploadChunkFileError(ocId: String, serverUrl: String) {
+        
+        NCManageDatabase.shared.setMetadataSession(ocId: ocId, session: nil, sessionError: NSLocalizedString("_err_upload_chunk_", comment: ""), sessionTaskIdentifier: 0, status: NCGlobal.shared.metadataStatusUploadError)
+        
+        NCContentPresenter.shared.messageNotification("_error_", description: "_err_upload_chunk_", delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.ErrorInternalError, forced: true)
+        
+        NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSource, userInfo: ["serverUrl":serverUrl])
+    }
+    
     private func uploadFileInBackground(metadata: tableMetadata, account: tableAccount, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
         
         var session: URLSession?

+ 1 - 0
iOSClient/Supporting Files/en.lproj/Localizable.strings

@@ -858,6 +858,7 @@
 "_err_permission_microphone_"           = "Please allow Microphone usage from Settings";
 "_err_permission_photolibrary_"         = "Please allow Photos from Settings";
 "_err_permission_locationmanager_"      = "Please allow Location - Always from Settings";
+"_err_upload_chunk_"                    = "Upload error";
 
 // QRCode
 

+ 70 - 64
iOSClient/Utility/NCUtility.swift

@@ -472,81 +472,87 @@ class NCUtility: NSObject {
 
     @objc func startActivityIndicator(backgroundView: UIView?, blurEffect: Bool, bottom: CGFloat = 0) {
         
-        if viewBackgroundActivityIndicator != nil { return }
-        
-        activityIndicator.color = NCBrandColor.shared.textView
-        activityIndicator.hidesWhenStopped = true
-        activityIndicator.translatesAutoresizingMaskIntoConstraints = false
+        DispatchQueue.main.async {
+            
+            if self.viewBackgroundActivityIndicator != nil { return }
+            
+            self.activityIndicator.color = NCBrandColor.shared.textView
+            self.activityIndicator.hidesWhenStopped = true
+            self.activityIndicator.translatesAutoresizingMaskIntoConstraints = false
 
-        let sizeActivityIndicator = activityIndicator.frame.height + 50
-        
-        viewActivityIndicator = UIView.init(frame: CGRect(x: 0, y: 0, width: sizeActivityIndicator, height: sizeActivityIndicator))
-        viewActivityIndicator?.translatesAutoresizingMaskIntoConstraints = false
-        viewActivityIndicator?.layer.cornerRadius = 10
-        viewActivityIndicator?.layer.masksToBounds = true
-        viewActivityIndicator?.backgroundColor = .clear
+            let sizeActivityIndicator = self.activityIndicator.frame.height + 50
+            
+            self.viewActivityIndicator = UIView.init(frame: CGRect(x: 0, y: 0, width: sizeActivityIndicator, height: sizeActivityIndicator))
+            self.viewActivityIndicator?.translatesAutoresizingMaskIntoConstraints = false
+            self.viewActivityIndicator?.layer.cornerRadius = 10
+            self.viewActivityIndicator?.layer.masksToBounds = true
+            self.viewActivityIndicator?.backgroundColor = .clear
 
-        if backgroundView == nil {
-            if let window = UIApplication.shared.keyWindow {
-                viewBackgroundActivityIndicator?.removeFromSuperview()
-                viewBackgroundActivityIndicator = NCViewActivityIndicator(frame: window.bounds)
-                window.addSubview(viewBackgroundActivityIndicator!)
-                viewBackgroundActivityIndicator?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
-                viewBackgroundActivityIndicator?.backgroundColor = .clear
+            if backgroundView == nil {
+                if let window = UIApplication.shared.keyWindow {
+                    self.viewBackgroundActivityIndicator?.removeFromSuperview()
+                    self.viewBackgroundActivityIndicator = NCViewActivityIndicator(frame: window.bounds)
+                    window.addSubview(self.viewBackgroundActivityIndicator!)
+                    self.viewBackgroundActivityIndicator?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
+                    self.viewBackgroundActivityIndicator?.backgroundColor = .clear
+                }
+            } else {
+                self.viewBackgroundActivityIndicator = backgroundView
             }
-        } else {
-            viewBackgroundActivityIndicator = backgroundView
-        }
-        
-        // VIEW ACTIVITY INDICATOR
-        
-        guard let viewActivityIndicator = self.viewActivityIndicator else { return }
-        viewActivityIndicator.addSubview(activityIndicator)
-        
-        if blurEffect {
-            let blurEffect = UIBlurEffect(style: .regular)
-            let blurEffectView = UIVisualEffectView(effect: blurEffect)
-            blurEffectView.frame = viewActivityIndicator.frame
-            viewActivityIndicator.insertSubview(blurEffectView, at: 0)
-        }
             
-        NSLayoutConstraint.activate([
-            viewActivityIndicator.widthAnchor.constraint(equalToConstant: sizeActivityIndicator),
-            viewActivityIndicator.heightAnchor.constraint(equalToConstant: sizeActivityIndicator),
-            activityIndicator.centerXAnchor.constraint(equalTo: viewActivityIndicator.centerXAnchor),
-            activityIndicator.centerYAnchor.constraint(equalTo: viewActivityIndicator.centerYAnchor)
-        ])
-        
-        // BACKGROUD VIEW ACTIVITY INDICATOR
-        
-        guard let viewBackgroundActivityIndicator = self.viewBackgroundActivityIndicator else { return }
-        viewBackgroundActivityIndicator.addSubview(viewActivityIndicator)
+            // VIEW ACTIVITY INDICATOR
+            
+            guard let viewActivityIndicator = self.viewActivityIndicator else { return }
+            viewActivityIndicator.addSubview(self.activityIndicator)
             
-        var verticalConstant: CGFloat = 0
-        if bottom > 0 {
-            verticalConstant = (viewBackgroundActivityIndicator.frame.size.height / 2) - bottom
+            if blurEffect {
+                let blurEffect = UIBlurEffect(style: .regular)
+                let blurEffectView = UIVisualEffectView(effect: blurEffect)
+                blurEffectView.frame = viewActivityIndicator.frame
+                viewActivityIndicator.insertSubview(blurEffectView, at: 0)
+            }
+                
+            NSLayoutConstraint.activate([
+                viewActivityIndicator.widthAnchor.constraint(equalToConstant: sizeActivityIndicator),
+                viewActivityIndicator.heightAnchor.constraint(equalToConstant: sizeActivityIndicator),
+                self.activityIndicator.centerXAnchor.constraint(equalTo: viewActivityIndicator.centerXAnchor),
+                self.activityIndicator.centerYAnchor.constraint(equalTo: viewActivityIndicator.centerYAnchor)
+            ])
+            
+            // BACKGROUD VIEW ACTIVITY INDICATOR
+            
+            guard let viewBackgroundActivityIndicator = self.viewBackgroundActivityIndicator else { return }
+            viewBackgroundActivityIndicator.addSubview(viewActivityIndicator)
+                
+            var verticalConstant: CGFloat = 0
+            if bottom > 0 {
+                verticalConstant = (viewBackgroundActivityIndicator.frame.size.height / 2) - bottom
+            }
+            
+            NSLayoutConstraint.activate([
+                viewActivityIndicator.centerXAnchor.constraint(equalTo: viewBackgroundActivityIndicator.centerXAnchor),
+                viewActivityIndicator.centerYAnchor.constraint(equalTo: viewBackgroundActivityIndicator.centerYAnchor, constant: verticalConstant)
+            ])
+            
+            self.activityIndicator.startAnimating()
         }
-        
-        NSLayoutConstraint.activate([
-            viewActivityIndicator.centerXAnchor.constraint(equalTo: viewBackgroundActivityIndicator.centerXAnchor),
-            viewActivityIndicator.centerYAnchor.constraint(equalTo: viewBackgroundActivityIndicator.centerYAnchor, constant: verticalConstant)
-        ])
-        
-        activityIndicator.startAnimating()
     }
     
     @objc func stopActivityIndicator() {
                     
-        activityIndicator.stopAnimating()
-        activityIndicator.removeFromSuperview()
-        
-        viewActivityIndicator?.removeFromSuperview()
-        viewActivityIndicator = nil
-        
-        if viewBackgroundActivityIndicator is NCViewActivityIndicator {
-            viewBackgroundActivityIndicator?.removeFromSuperview()
+        DispatchQueue.main.async {
+            
+            self.activityIndicator.stopAnimating()
+            self.activityIndicator.removeFromSuperview()
+            
+            self.viewActivityIndicator?.removeFromSuperview()
+            self.viewActivityIndicator = nil
+            
+            if self.viewBackgroundActivityIndicator is NCViewActivityIndicator {
+                self.viewBackgroundActivityIndicator?.removeFromSuperview()
+            }
+            self.viewBackgroundActivityIndicator = nil
         }
-        viewBackgroundActivityIndicator = nil
     }
 }