Forráskód Böngészése

new class IMImagemeter

marinofaggiana 5 éve
szülő
commit
c04860c9d5

+ 40 - 5
iOSClient/Imagemeter/IMImagemeter.swift

@@ -22,9 +22,17 @@
 //
 
 import Foundation
+import ZIPFoundation
+
+//MARK: - IMImagemeterCodable
 
 class IMImagemeterCodable: NSObject {
     
+    @objc static let sharedInstance: IMImagemeterCodable = {
+        let instance = IMImagemeterCodable()
+        return instance
+    }()
+    
     struct imagemeterAnnotation: Codable {
         
         struct coordinates: Codable {
@@ -168,11 +176,6 @@ class IMImagemeterCodable: NSObject {
         }
     }
     
-    @objc static let sharedInstance: IMImagemeterCodable = {
-        let instance = IMImagemeterCodable()
-        return instance
-    }()
-    
     func decoderAnnotetion(_ annotation: Data) -> imagemeterAnnotation? {
         
         let jsonDecoder = JSONDecoder.init()
@@ -199,3 +202,35 @@ class IMImagemeterCodable: NSObject {
         return(factorX, factorY)
     }
 }
+
+//MARK: - IMImagemeter
+
+class IMImagemeter: NSObject {
+
+    static let sharedInstance: IMImagemeter = {
+        let instance = IMImagemeter()
+        return instance
+    }()
+    
+    func getBundleDirectory(metadata: tableMetadata) -> (Found: Bool, bundleDirectory: String, immPath: String) {
+
+        var found = false
+        var bundleDirectory = ""
+        var immPath = ""
+        
+        let source = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageFileID(metadata.fileID, 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" {
+                    found = true
+                    bundleDirectory = CCUtility.getDirectoryProviderStorageFileID(metadata.fileID) + "/" + pathComponents.first!
+                    immPath = CCUtility.getDirectoryProviderStorageFileID(metadata.fileID) + "/" + entry.path
+                }
+            })
+        }
+        
+        return(found, bundleDirectory, immPath)
+    }
+}

+ 4 - 15
iOSClient/Main/NCMainCommon.swift

@@ -1226,30 +1226,19 @@ class NCNetworkingMain: NSObject, CCNetworkingDelegate {
                 
                 if metadata.typeFile == k_metadataTypeFile_imagemeter {
                     
-                    var pathArchive = ""
-                    var pathArchiveImm = ""
-                    
                     let source = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageFileID(metadata.fileID, fileNameView: metadata.fileNameView))
                     let destination =  URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageFileID(metadata.fileID))
 
                     try? FileManager().unzipItem(at: source, to: destination)
                     
-                    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" {
-                                pathArchive = CCUtility.getDirectoryProviderStorageFileID(metadata.fileID) + "/" + pathComponents.first!
-                                pathArchiveImm = CCUtility.getDirectoryProviderStorageFileID(metadata.fileID) + "/" + entry.path
-                            }
-                        })
-                    }
+                    let bundleDirectory = IMImagemeter.sharedInstance.getBundleDirectory(metadata: metadata)
                     
-                    if pathArchive == "" {
+                    if !bundleDirectory.Found {
                         appDelegate.messageNotification("_error_", description: "File format imagemeter error. 🤷‍♂️", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: errorCode)
                         return
                     }
                     
-                    if let fileHandle = FileHandle(forReadingAtPath: pathArchiveImm) {
+                    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)
@@ -1257,7 +1246,7 @@ class NCNetworkingMain: NSObject, CCNetworkingDelegate {
                         }
                         let dataZip = fileHandle.readData(ofLength: 4)
                         if dataZip.starts(with: [0x50, 0x4b, 0x03, 0x04]) {
-                            try? FileManager().unzipItem(at: NSURL(fileURLWithPath: pathArchiveImm) as URL, to: NSURL(fileURLWithPath: pathArchive) as URL)
+                            try? FileManager().unzipItem(at: NSURL(fileURLWithPath: bundleDirectory.immPath) as URL, to: NSURL(fileURLWithPath: bundleDirectory.bundleDirectory) as URL)
                         }
                         fileHandle.closeFile()
                     }

+ 7 - 10
iOSClient/Viewer/NCViewerImagemeter.swift

@@ -28,9 +28,6 @@ class NCViewerImagemeter: NSObject {
     private var imagemeterView: IMImagemeterView!
     
     private let appDelegate = UIApplication.shared.delegate as! AppDelegate
-
-    private var nameArchiveImagemeter: String = ""
-    private var pathArchiveImagemeter: String = ""
     
     private var annotation: IMImagemeterCodable.imagemeterAnnotation?
     
@@ -68,9 +65,8 @@ class NCViewerImagemeter: NSObject {
             }
         }
         
-        nameArchiveImagemeter = (metadata.fileNameView as NSString).deletingPathExtension
-        pathArchiveImagemeter = CCUtility.getDirectoryProviderStorageFileID(metadata.fileID) + "/" + nameArchiveImagemeter
-        
+        let bundleDirectory = IMImagemeter.sharedInstance.getBundleDirectory(metadata: metadata)
+
         self.imagemeterView = IMImagemeterView.instanceFromNib() as? IMImagemeterView
         self.imagemeterView.frame = CGRect(x: 0, y: 0, width: Int(detail.view.frame.width), height: Int(detail.view.frame.height) - Int(k_detail_Toolbar_Height) - safeAreaBottom - 1)
         
@@ -78,8 +74,7 @@ class NCViewerImagemeter: NSObject {
         
         do {
             
-            let annoPath = NSURL(fileURLWithPath: pathArchiveImagemeter + "/anno-" + nameArchiveImagemeter + ".imm") as URL
-            let annoData = try Data(contentsOf: annoPath, options: .mappedIfSafe)
+            let annoData = try Data(contentsOf: NSURL(fileURLWithPath: bundleDirectory.immPath) as URL, options: .mappedIfSafe)
             if let annotation = IMImagemeterCodable.sharedInstance.decoderAnnotetion(annoData) {
                 
                 self.annotation = annotation
@@ -102,7 +97,8 @@ class NCViewerImagemeter: NSObject {
         }
         
         let imageFilename = annotation.image.filename
-        if let image = UIImage(contentsOfFile: pathArchiveImagemeter + "/" + imageFilename) {
+        let bundleDirectory = IMImagemeter.sharedInstance.getBundleDirectory(metadata: metadata)
+        if let image = UIImage(contentsOfFile: bundleDirectory.bundleDirectory + "/" + imageFilename) {
             
             let factor = image.size.width / image.size.height
             
@@ -179,7 +175,8 @@ class NCViewerImagemeter: NSObject {
             if element.id == sender.tag {
                 do {
 
-                    let fileNamePath =  pathArchiveImagemeter + "/" + element.audio_recording!.recording_filename
+                    let bundleDirectory = IMImagemeter.sharedInstance.getBundleDirectory(metadata: metadata)
+                    let fileNamePath =  bundleDirectory.bundleDirectory + "/" + element.audio_recording!.recording_filename
                     try audioPlayer = AVAudioPlayer(contentsOf: URL(fileURLWithPath: fileNamePath))
                     audioPlayer.delegate = self
                     audioPlayer.prepareToPlay()