Browse Source

improved code

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 2 years ago
parent
commit
7f93878e09

+ 3 - 14
iOSClient/Main/NCFunctionCenter.swift

@@ -194,20 +194,6 @@ import Photos
         }
     }
 
-    // MARK: -
-
-    func openDownload(metadata: tableMetadata, selector: String) {
-
-        if CCUtility.fileProviderStorageExists(metadata) {
-
-            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": selector, "error": NKError(), "account": metadata.account])
-
-        } else {
-
-            NCNetworking.shared.download(metadata: metadata, selector: selector) { _, _ in }
-        }
-    }
-
     // MARK: - Open in ...
 
     func openDocumentController(metadata: tableMetadata) {
@@ -220,6 +206,7 @@ import Photos
     }
 
     func openActivityViewController(selectedMetadata: [tableMetadata]) {
+
         let metadatas = selectedMetadata.filter({ !$0.directory })
         var items: [URL] = []
         var downloadMetadata: [(tableMetadata, URL)] = []
@@ -271,9 +258,11 @@ import Photos
     // MARK: - Print
 
     func printDocument(metadata: tableMetadata) {
+
         let fileNameURL = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!)
         let printController = UIPrintInteractionController.shared
         let printInfo = UIPrintInfo(dictionary: nil)
+
         printInfo.jobName = fileNameURL.lastPathComponent
         printInfo.outputType = metadata.classFile == NKCommon.typeClassFile.image.rawValue ? .photo : .general
         printController.printInfo = printInfo

+ 10 - 2
iOSClient/Menu/NCCollectionViewCommon+Menu.swift

@@ -277,7 +277,11 @@ extension NCCollectionViewCommon {
                     icon: NCUtility.shared.loadImage(named: "viewfinder.circle"),
                     order: 110,
                     action: { _ in
-                        NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorSaveAsScan)
+                        if CCUtility.fileProviderStorageExists(metadata) {
+                            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorSaveAsScan, "error": NKError(), "account": metadata.account])
+                        } else {
+                            NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorSaveAsScan) { _, _ in }
+                        }
                     }
                 )
             )
@@ -332,7 +336,11 @@ extension NCCollectionViewCommon {
                     icon: NCUtility.shared.loadImage(named: "pencil.tip.crop.circle"),
                     order: 150,
                     action: { menuAction in
-                        NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorLoadFileQuickLook)
+                        if CCUtility.fileProviderStorageExists(metadata) {
+                            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorLoadFileQuickLook, "error": NKError(), "account": metadata.account])
+                        } else {
+                            NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorLoadFileQuickLook) { _, _ in }
+                        }
                     }
                 )
             )

+ 63 - 4
iOSClient/Menu/NCContextMenu.swift

@@ -22,14 +22,16 @@
 //
 
 import Foundation
+import Alamofire
 import NextcloudKit
+import JGProgressHUD
 
 class NCContextMenu: NSObject {
 
     func viewMenu(ocId: String, viewController: UIViewController, image: UIImage?) -> UIMenu {
         guard let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) else { return UIMenu() }
 
-        let appDelegate = UIApplication.shared.delegate as? AppDelegate
+        var downloadRequest: DownloadRequest?
         var titleDeleteConfirmFile = NSLocalizedString("_delete_file_", comment: "")
         var titleSave: String = NSLocalizedString("_save_selected_files_", comment: "")
         let metadataMOV = NCManageDatabase.shared.getMetadataLivePhoto(metadata: metadata)
@@ -37,6 +39,16 @@ class NCContextMenu: NSObject {
         if metadata.directory { titleDeleteConfirmFile = NSLocalizedString("_delete_folder_", comment: "") }
         if metadataMOV != nil { titleSave = NSLocalizedString("_livephoto_save_", comment: "") }
 
+        let hud = JGProgressHUD()
+        hud.indicatorView = JGProgressHUDRingIndicatorView()
+        hud.detailTextLabel.text = NSLocalizedString("_tap_to_cancel_", comment: "")
+        if let indicatorView = hud.indicatorView as? JGProgressHUDRingIndicatorView { indicatorView.ringWidth = 1.5 }
+        hud.tapOnHUDViewBlock = { _ in
+            if let request = downloadRequest {
+                request.cancel()
+            }
+        }
+
         // MENU ITEMS
 
         let detail = UIAction(title: NSLocalizedString("_details_", comment: ""),
@@ -57,7 +69,24 @@ class NCContextMenu: NSObject {
 
         let openIn = UIAction(title: NSLocalizedString("_open_in_", comment: ""),
                               image: UIImage(systemName: "square.and.arrow.up") ) { _ in
-            NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorOpenIn)
+            if CCUtility.fileProviderStorageExists(metadata) {
+                NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorOpenIn, "error": NKError(), "account": metadata.account])
+            } else {
+                hud.show(in: viewController.view)
+                NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorOpenIn, notificationCenterProgressTask: false) { request in
+                    downloadRequest = request
+                } progressHandler: { progress in
+                    hud.progress = Float(progress.fractionCompleted)
+                } completion: { afError, error in
+                    if error == .success || afError?.isExplicitlyCancelledError ?? false {
+                        hud.dismiss()
+                    } else {
+                        hud.indicatorView = JGProgressHUDErrorIndicatorView()
+                        hud.textLabel.text = error.description
+                        hud.dismiss(afterDelay: NCGlobal.shared.dismissAfterSecond)
+                    }
+                }
+            }
         }
 
         let viewInFolder = UIAction(title: NSLocalizedString("_view_in_folder_", comment: ""),
@@ -73,7 +102,20 @@ class NCContextMenu: NSObject {
                 if CCUtility.fileProviderStorageExists(metadata) {
                     NCFunctionCenter.shared.saveAlbum(metadata: metadata)
                 } else {
-                    NCOperationQueue.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorSaveAlbum)
+                    hud.show(in: viewController.view)
+                    NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorSaveAlbum, notificationCenterProgressTask: false) { request in
+                        downloadRequest = request
+                    } progressHandler: { progress in
+                        hud.progress = Float(progress.fractionCompleted)
+                    } completion: { afError, error in
+                        if error == .success || afError?.isExplicitlyCancelledError ?? false {
+                            hud.dismiss()
+                        } else {
+                            hud.indicatorView = JGProgressHUDErrorIndicatorView()
+                            hud.textLabel.text = error.description
+                            hud.dismiss(afterDelay: NCGlobal.shared.dismissAfterSecond)
+                        }
+                    }
                 }
             }
         }
@@ -85,7 +127,24 @@ class NCContextMenu: NSObject {
 
         let modify = UIAction(title: NSLocalizedString("_modify_", comment: ""),
                               image: UIImage(systemName: "pencil.tip.crop.circle")) { _ in
-            NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorLoadFileQuickLook)
+            if CCUtility.fileProviderStorageExists(metadata) {
+                NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorLoadFileQuickLook, "error": NKError(), "account": metadata.account])
+            } else {
+                hud.show(in: viewController.view)
+                NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorLoadFileQuickLook, notificationCenterProgressTask: false) { request in
+                    downloadRequest = request
+                } progressHandler: { progress in
+                    hud.progress = Float(progress.fractionCompleted)
+                } completion: { afError, error in
+                    if error == .success || afError?.isExplicitlyCancelledError ?? false {
+                        hud.dismiss()
+                    } else {
+                        hud.indicatorView = JGProgressHUDErrorIndicatorView()
+                        hud.textLabel.text = error.description
+                        hud.dismiss(afterDelay: NCGlobal.shared.dismissAfterSecond)
+                    }
+                }
+            }
         }
 
         let deleteConfirmFile = UIAction(title: titleDeleteConfirmFile,

+ 6 - 1
iOSClient/Menu/NCMenuAction.swift

@@ -24,6 +24,7 @@
 
 import Foundation
 import UIKit
+import NextcloudKit
 
 class NCMenuAction {
     let title: String
@@ -242,7 +243,11 @@ extension NCMenuAction {
             icon: NCUtility.shared.loadImage(named: "printer"),
             order: order,
             action: { _ in
-                NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorPrint)
+                if CCUtility.fileProviderStorageExists(metadata) {
+                    NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorPrint, "error": NKError(), "account": metadata.account])
+                } else {
+                    NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorPrint) { _, _ in }
+                }
             }
         )
     }

+ 15 - 3
iOSClient/Menu/NCViewer+Menu.swift

@@ -95,7 +95,11 @@ extension NCViewer {
                     title: NSLocalizedString("_print_", comment: ""),
                     icon: NCUtility.shared.loadImage(named: "printer"),
                     action: { _ in
-                        NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorPrint)
+                        if CCUtility.fileProviderStorageExists(metadata) {
+                            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorPrint, "error": NKError(), "account": metadata.account])
+                        } else {
+                            NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorPrint) { _, _ in }
+                        }
                     }
                 )
             )
@@ -137,7 +141,11 @@ extension NCViewer {
                     title: NSLocalizedString("_save_as_scan_", comment: ""),
                     icon: NCUtility.shared.loadImage(named: "viewfinder.circle"),
                     action: { _ in
-                        NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorSaveAsScan)
+                        if CCUtility.fileProviderStorageExists(metadata) {
+                            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorSaveAsScan, "error": NKError(), "account": metadata.account])
+                        } else {
+                            NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorSaveAsScan) { _, _ in }
+                        }
                     }
                 )
             )
@@ -246,7 +254,11 @@ extension NCViewer {
                     title: NSLocalizedString("_modify_", comment: ""),
                     icon: NCUtility.shared.loadImage(named: "pencil.tip.crop.circle"),
                     action: { _ in
-                        NCFunctionCenter.shared.openDownload(metadata: metadata, selector: NCGlobal.shared.selectorLoadFileQuickLook)
+                        if CCUtility.fileProviderStorageExists(metadata) {
+                            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadedFile, userInfo: ["ocId": metadata.ocId, "selector": NCGlobal.shared.selectorLoadFileQuickLook, "error": NKError(), "account": metadata.account])
+                        } else {
+                            NCNetworking.shared.download(metadata: metadata, selector: NCGlobal.shared.selectorLoadFileQuickLook) { _, _ in }
+                        }
                     }
                 )
             )

+ 8 - 3
iOSClient/Networking/NCNetworking.swift

@@ -323,9 +323,12 @@ import Photos
             NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDownloadCancelFile, userInfo: ["ocId": metadata.ocId, "serverUrl": metadata.serverUrl, "account": metadata.account])
         }
     }
-    
-    func download(metadata: tableMetadata, selector: String, notificationCenterProgressTask: Bool = true, progressHandler: @escaping (_ progress: Progress) -> Void = { _ in }, completion: @escaping (_ afError: AFError?, _ error: NKError) -> Void) {
-        
+
+    func download(metadata: tableMetadata, selector: String, notificationCenterProgressTask: Bool = true,
+                  requestHandler: @escaping (_ request: DownloadRequest) -> () = { _ in },
+                  progressHandler: @escaping (_ progress: Progress) -> Void = { _ in },
+                  completion: @escaping (_ afError: AFError?, _ error: NKError) -> Void) {
+
         let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
         let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
 
@@ -339,6 +342,8 @@ import Photos
 
         NextcloudKit.shared.download(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath, queue: NKCommon.shared.backgroundQueue, requestHandler: { request in
 
+            requestHandler(request)
+            
             self.downloadRequest[fileNameLocalPath] = request
 
             NCManageDatabase.shared.setMetadataSession(ocId: metadata.ocId, status: NCGlobal.shared.metadataStatusDownloading)