瀏覽代碼

clear code

marinofaggiana 5 年之前
父節點
當前提交
7523688356

+ 3 - 0
Libraries external/Imagemeter/IMImagemeterViewer.swift

@@ -25,6 +25,9 @@ import UIKit
 import Foundation
 import GLKit
 
+protocol IMImagemeterViewerDelegate {
+}
+
 class IMImagemeterViewer: GLKViewController, UITabBarDelegate {
     var metadata: tableMetadata?
 }

+ 1 - 1
iOSClient/Main/CCMain.m

@@ -811,7 +811,7 @@
 
 - (void)openAssetsPickerController
 {
-    NCPhotosPickerViewController *viewController = [[NCPhotosPickerViewController alloc] init:self maxSelectedAssets:100];
+    NCPhotosPickerViewController *viewController = [[NCPhotosPickerViewController alloc] init:self maxSelectedAssets:100 singleSelectedMode:false];
     
     [viewController openPhotosPickerViewControllerWithPhAssets:^(NSArray<PHAsset *> * _Nonnull assets) {
         if (assets.count > 0) {

+ 39 - 7
iOSClient/Main/NCMainCommon.swift

@@ -1266,8 +1266,7 @@ extension UITabBar {
 
 //MARK: - Networking Main
 
-class NCNetworkingMain: NSObject, CCNetworkingDelegate {
-
+class NCNetworkingMain: NSObject, CCNetworkingDelegate, IMImagemeterViewerDelegate {
     @objc static let sharedInstance: NCNetworkingMain = {
         let instance = NCNetworkingMain()
         return instance
@@ -1326,6 +1325,7 @@ class NCNetworkingMain: NSObject, CCNetworkingDelegate {
                     metadata.typeFile = k_metadataTypeFile_unknown
                 }
                 
+#if HC
                 if metadata.typeFile == k_metadataTypeFile_imagemeter {
                     
                     if NCBrandOptions.sharedInstance.use_imi_viewer == false {
@@ -1333,20 +1333,22 @@ class NCNetworkingMain: NSObject, CCNetworkingDelegate {
                         return
                     }
                     
-                    if !NCUtility.sharedInstance.IMUnzip(metadata: metadata) {
+                    if !IMUtility.shared.IMUnzip(metadata: metadata) {
                         NCContentPresenter.shared.messageNotification("_error_", description: "Bundle imagemeter error. 🤷‍♂️", delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.error, errorCode: 0)
                         return
                     }
                     
                     let storyboard = UIStoryboard(name: "IMImagemeter", bundle: nil)
-                    let imiVC = storyboard.instantiateInitialViewController() as! IMImagemeterViewer
-                    imiVC.metadata = metadata
-                    imiVC.modalPresentationStyle = UIModalPresentationStyle.fullScreen
+                    let imagemeterViewer = storyboard.instantiateInitialViewController() as! IMImagemeterViewer
+                    imagemeterViewer.metadata = metadata
+                    imagemeterViewer.modalPresentationStyle = UIModalPresentationStyle.fullScreen
+                    imagemeterViewer.imagemeterViewerDelegate = self
                     
-                    self.appDelegate.window.rootViewController?.present(imiVC, animated: true, completion: nil)
+                    self.appDelegate.window.rootViewController?.present(imagemeterViewer, animated: true, completion: nil)
                     
                     return
                 }
+#endif
                 
                 if metadata.typeFile == k_metadataTypeFile_compress || metadata.typeFile == k_metadataTypeFile_unknown {
 
@@ -1425,6 +1427,36 @@ class NCNetworkingMain: NSObject, CCNetworkingDelegate {
         appDelegate.startLoadAutoDownloadUpload()
     }
     
+#if HC
+    // IMImagemeterViewerDelegate
+    func closeImagemeterViewer(metadata: tableMetadata?, bundleDirectory: String) {
+        guard let metadata = metadata else { return }
+        
+        let ocIdTemp = NSUUID().uuidString.lowercased()
+        let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(ocIdTemp, fileNameView: metadata.fileName)!
+        let bundleDirectoryURL = URL(fileURLWithPath: bundleDirectory)
+        let fileNameZipUrl = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(ocIdTemp, fileNameView: metadata.fileName))
+        
+        // Create IMI
+        try? FileManager.default.removeItem(at: fileNameZipUrl)
+        do {
+            try FileManager().zipItem(at: bundleDirectoryURL, to:fileNameZipUrl)
+        } catch {
+            NCContentPresenter.shared.messageNotification("_error_", description: "Creation of IMI archive failed with error", delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.error, errorCode: Int(k_CCErrorInternalError))
+            return
+        }
+        
+        // Verify if is changed
+        if IMUtility.shared.IMIsChange(metadata: metadata, fileNameZipUrl: fileNameZipUrl) {
+            let com = IMCommunication.init()
+            _ = com.uploadFileIMI(serverUrl: metadata.serverUrl, fileName: metadata.fileName, fileNameLocalPath: fileNameLocalPath, ocId: ocIdTemp)
+        }
+        
+        // Remove bundle directory
+        try? FileManager.default.removeItem(atPath: bundleDirectory)
+    }
+#endif
+    
     // UPLOAD
     
     func uploadStart(_ ocId: String!, account: String!, task: URLSessionUploadTask!, serverUrl: String!) {

+ 4 - 5
iOSClient/Main/NCPhotosPickerViewController.swift

@@ -29,10 +29,12 @@ class NCPhotosPickerViewController: NSObject {
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     var sourceViewController: UIViewController
     var maxSelectedAssets = 1
+    var singleSelectedMode = false
 
-    @objc init (_ viewController: UIViewController, maxSelectedAssets: Int) {
+    @objc init (_ viewController: UIViewController, maxSelectedAssets: Int, singleSelectedMode: Bool) {
         sourceViewController = viewController
         self.maxSelectedAssets = maxSelectedAssets
+        self.singleSelectedMode = singleSelectedMode
     }
     
     @objc func openPhotosPickerViewController(phAssets: @escaping ([PHAsset]) -> ()) {
@@ -47,10 +49,7 @@ class NCPhotosPickerViewController: NSObject {
         
         configure.maxSelectedAssets = self.maxSelectedAssets
         configure.selectedColor = NCBrandColor.sharedInstance.brand
-        
-        if maxSelectedAssets == 1 {
-            configure.singleSelectedMode = true
-        }
+        configure.singleSelectedMode = singleSelectedMode
         
         let viewController = customPhotoPickerViewController(withTLPHAssets: { (assets) in
             

+ 3 - 1
iOSClient/Networking/CCNetworking.m

@@ -1130,9 +1130,11 @@
                 [CCUtility copyFileAtPath:[NSString stringWithFormat:@"%@/%@", [CCUtility getDirectoryProviderStorage], tempocId] toPath:[NSString stringWithFormat:@"%@/%@", [CCUtility getDirectoryProviderStorage], metadata.ocId]];
                 [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"ocId == %@", tempocId]];
                 // IMI -> Unzip
+#if HC
                 if ([metadata.typeFile isEqualToString:k_metadataTypeFile_imagemeter] && NCBrandOptions.sharedInstance.use_imi_viewer) {
-                    (void)[[NCUtility sharedInstance] IMUnzipWithMetadata:metadata];
+                    (void)[[IMUtility shared] IMUnzipWithMetadata:metadata];
                 }
+#endif
             }
             
         } else {

+ 1 - 121
iOSClient/Utility/NCUtility.swift

@@ -24,10 +24,8 @@
 import Foundation
 import SVGKit
 import KTVHTTPCache
-import ZIPFoundation
 import Sheeeeeeeeet
 import NCCommunication
-import CommonCrypto
 
 class NCUtility: NSObject {
     @objc static let sharedInstance: NCUtility = {
@@ -37,11 +35,7 @@ class NCUtility: NSObject {
     
     let activityIndicator = UIActivityIndicatorView(style: .whiteLarge)
     let cache = NSCache<NSString, UIImage>()
-    struct bundleDirectoryType {
-        var error: Bool = false
-        var bundleDirectory: String = ""
-        var immPath: String = ""
-    }
+   
     
     @objc func createFileName(_ fileName: String, serverUrl: String, account: String) -> String {
         
@@ -507,80 +501,6 @@ class NCUtility: NSObject {
         return 0
     }
     
-    @objc func IMUnzip(metadata: tableMetadata) -> Bool {
-        
-        // bak
-        let atPathBak = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + metadata.fileNameView
-        let toPathBak = (CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + metadata.fileNameView as NSString).deletingPathExtension + ".bak"
-        CCUtility.copyFile(atPath: atPathBak, toPath: toPathBak)
-        
-        let source = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView))
-        let destination = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId))
-        let removeAtPath = (CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + metadata.fileNameView as NSString).deletingPathExtension
-        
-        try? FileManager.default.removeItem(atPath: removeAtPath)
-        try? FileManager().unzipItem(at: source, to: destination)
-        
-        let bundleDirectory = NCUtility.sharedInstance.IMGetBundleDirectory(metadata: metadata)
-        if bundleDirectory.error {
-            return false
-        }
-        
-        if let fileHandle = FileHandle(forReadingAtPath: bundleDirectory.immPath) {
-            //                        let dataFormat = fileHandle.readData(ofLength: 1)
-            //                        if dataFormat.starts(with: [0x01]) {
-            //                            appDelegate.messageNotification("_error_", description: "File format binary error, library imagemeter not present. 🤷‍♂️", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: errorCode)
-            //                            return;
-            //                        }
-            let dataZip = fileHandle.readData(ofLength: 4)
-            if dataZip.starts(with: [0x50, 0x4b, 0x03, 0x04]) {
-                try? FileManager().unzipItem(at: NSURL(fileURLWithPath: bundleDirectory.immPath) as URL, to: NSURL(fileURLWithPath: bundleDirectory.bundleDirectory) as URL)
-            }
-            fileHandle.closeFile()
-        }
-        
-        return true
-    }
-    
-    func IMGetBundleDirectory(metadata: tableMetadata) -> bundleDirectoryType {
-        
-        var error = true
-        var bundleDirectory = ""
-        var immPath = ""
-        
-        let source = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView))
-        
-        if let archive = Archive(url: source, accessMode: .read) {
-            archive.forEach({ (entry) in
-                let pathComponents = (entry.path as NSString).pathComponents
-                if pathComponents.count == 2 && (pathComponents.last! as NSString).pathExtension.lowercased() == "imm" {
-                    error = false
-                    bundleDirectory = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + pathComponents.first!
-                    immPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + entry.path
-                }
-            })
-        }
-        
-        return bundleDirectoryType(error: error, bundleDirectory: bundleDirectory, immPath: immPath)
-    }
-    
-    func IMIsChange(metadata: tableMetadata, fileNameZipUrl: URL) -> Bool {
-        
-        let backFile = (CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + metadata.fileNameView as NSString).deletingPathExtension + ".bak"
-        
-        if let md5imiFile = self.md5File(url: fileNameZipUrl) {
-            if let md5backfile = self.md5File(url: URL(fileURLWithPath: backFile)) {
-                if md5imiFile == md5backfile {
-                    return false
-                } else {
-                    return true
-                }
-            }
-        }
-        
-        return true
-    }
-    
     @objc func permissionsContainsString(_ metadataPermissions: String, permissions: String) -> Bool {
         
         for char in permissions {
@@ -600,45 +520,5 @@ class NCUtility: NSObject {
             return "Mozilla/5.0 (iPhone) Mobile Nextcloud-iOS/\(appVersion)"
         }
     }
-    
-    func md5File(url: URL) -> Data? {
-
-        let bufferSize = 1024 * 1024
-
-        do {
-            // Open file for reading:
-            let file = try FileHandle(forReadingFrom: url)
-            defer {
-                file.closeFile()
-            }
-
-            // Create and initialize MD5 context:
-            var context = CC_MD5_CTX()
-            CC_MD5_Init(&context)
-
-            // Read up to `bufferSize` bytes, until EOF is reached, and update MD5 context:
-            while autoreleasepool(invoking: {
-                let data = file.readData(ofLength: bufferSize)
-                if data.count > 0 {
-                    data.withUnsafeBytes {
-                        _ = CC_MD5_Update(&context, $0.baseAddress, numericCast(data.count))
-                    }
-                    return true // Continue
-                } else {
-                    return false // End of file
-                }
-            }) { }
-
-            // Compute the MD5 digest:
-            var digest: [UInt8] = Array(repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
-            _ = CC_MD5_Final(&digest, &context)
-
-            return Data(digest)
-
-        } catch {
-            print("Cannot open file:", error.localizedDescription)
-            return nil
-        }
-    }
 }