marinofaggiana 4 years ago
parent
commit
f6bd8be187

+ 1 - 1
Cartfile.resolved

@@ -16,7 +16,7 @@ github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "krzyzanowskim/OpenSSL" "1.0.218"
 github "malcommac/SwiftRichString" "3.7.1"
 github "marinofaggiana/AFNetworking" "2967678c3e0e98c9b8d7e06222ad12d1f49c26f2"
-github "nextcloud/ios-communication-library" "444fa1ad09fffed967f618c104ec28d5763be808"
+github "nextcloud/ios-communication-library" "c3877ede170cb312dc99f3031a0dba2e2851b8b0"
 github "realm/realm-cocoa" "v4.4.0"
 github "rechsteiner/Parchment" "v1.7.0"
 github "scenee/FloatingPanel" "v1.7.4"

+ 2 - 5
iOSClient/Database/NCManageDatabase.swift

@@ -122,13 +122,10 @@ class NCManageDatabase: NSObject {
                         migration.deleteData(forType: tableTrash.className())
                     }
                     
-                    if oldSchemaVersion < 91 {
-                        migration.deleteData(forType: tableDirectory.className())
-                        migration.deleteData(forType: tableMetadata.className())
-                    }
-                    
                     if oldSchemaVersion < 94 {
                         migration.deleteData(forType: tableE2eEncryptionLock.className())
+                        migration.deleteData(forType: tableDirectory.className())
+                        migration.deleteData(forType: tableMetadata.className())
                     }
                     
                 }, shouldCompactOnLaunch: { totalBytes, usedBytes in

+ 2 - 8
iOSClient/Main/NCDetailViewController.swift

@@ -427,10 +427,6 @@ class NCDetailViewController: UIViewController {
         
         closeAllSubView()
 
-        if FileManager().fileExists(atPath: CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileNameView)) == false {
-            CCGraphics.createNewImage(from: metadata.fileNameView, ocId: metadata.ocId, filterGrayScale: false, typeFile: metadata.typeFile, writeImage: true)
-        }
-        
         if appDelegate.isMediaObserver {
             appDelegate.isMediaObserver = false
             NCViewerVideo.sharedInstance.removeObserver()
@@ -657,8 +653,8 @@ extension NCDetailViewController: NCViewerImageViewControllerDelegate, NCViewerI
                 completion(index, NCViewerImageCommon.shared.getImageOffOutline(frame: self.view.frame, type: metadata.typeFile), metadata, ZoomScale.default, nil)
             }
                 
-        // HEIC
-        } else if metadata.session == "" && CCUtility.fileProviderStorageSize(metadata.ocId, fileNameView: metadata.fileNameView) == 0 && ((metadata.contentType == "image/heic" &&  metadata.hasPreview == false) || ext == "GIF") {
+        // HEIC - GIF - SVG
+        } else if metadata.session == "" && CCUtility.fileProviderStorageSize(metadata.ocId, fileNameView: metadata.fileNameView) == 0 && ((metadata.contentType == "image/heic" &&  metadata.hasPreview == false) || ext == "GIF" || ext == "SVG") {
             
             let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
             let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
@@ -676,8 +672,6 @@ extension NCDetailViewController: NCViewerImageViewControllerDelegate, NCViewerI
                     _ = NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
                     
                     if let image = NCViewerImageCommon.shared.getImage(metadata: metadata) {
-                        CCGraphics.createNewImage(from: metadata.fileNameView, ocId: metadata.ocId, filterGrayScale: false, typeFile: metadata.typeFile, writeImage: true)
-                        
                         completion(index, image, metadata, ZoomScale.default, nil)
                     } else {
                         completion(index, NCViewerImageCommon.shared.getImageOffOutline(frame: self.view.frame, type: metadata.typeFile), metadata, ZoomScale.default, nil)

+ 0 - 53
iOSClient/Main/NCMainCommon.swift

@@ -476,59 +476,6 @@ class NCMainCommon: NSObject, PhotoEditorDelegate, NCAudioRecorderViewController
                 cell.imageSelect.isHidden = true
                 cell.backgroundView = nil
             }
-            
-        } else if cell is NCGridMediaCell {
-            
-            let cell = cell as! NCGridMediaCell
-            
-            cell.imageStatus.image = nil
-            cell.imageLocal.image = nil
-            cell.imageFavorite.image = nil
-            
-            if FileManager().fileExists(atPath: CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileName)) {
-                cell.imageItem.image = UIImage.init(contentsOfFile: CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileName))
-//                NCUtility.sharedInstance.loadImage(ocId: metadata.ocId, fileNameView: metadata.fileNameView) { (image) in
-//                    cell.imageItem.image = image
-//                }
-            } else {
-                if metadata.iconName.count > 0 {
-                    cell.imageItem.image = UIImage.init(named: metadata.iconName)
-                } else {
-                    cell.imageItem.image = UIImage.init(named: "file")
-                }
-            }
-            
-            // image status
-            if metadata.typeFile == k_metadataTypeFile_video || metadata.typeFile == k_metadataTypeFile_audio {
-                cell.imageStatus.image = NCMainCommonImages.cellPlayImage
-            }
-            
-            // image Local
-            let tableLocalFile = NCManageDatabase.sharedInstance.getTableLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
-            if tableLocalFile != nil && CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
-                if tableLocalFile!.offline { cell.imageLocal.image = UIImage.init(named: "offlineFlag") }
-                else { cell.imageLocal.image = UIImage.init(named: "local") }
-            }
-            
-            // image Favorite
-            if metadata.favorite {
-                cell.imageFavorite.image = NCMainCommonImages.cellFavouriteImage
-            }
-            
-            if isEditMode {
-                cell.imageSelect.isHidden = false
-                if selectocId.contains(metadata.ocId) {
-                    cell.imageSelect.image = CCGraphics.scale(UIImage.init(named: "checkedYes"), to: CGSize(width: 50, height: 50), isAspectRation: true)
-                    cell.imageVisualEffect.isHidden = false
-                    cell.imageVisualEffect.alpha = 0.4
-                } else {
-                    cell.imageSelect.isHidden = true
-                    cell.imageVisualEffect.isHidden = true
-                }
-            } else {
-                cell.imageSelect.isHidden = true
-                cell.imageVisualEffect.isHidden = true
-            }
         }
     }
     

+ 53 - 1
iOSClient/Media/NCMedia.swift

@@ -53,6 +53,11 @@ class NCMedia: UIViewController, DropdownMenuDelegate, DZNEmptyDataSetSource, DZ
     private let refreshControl = UIRefreshControl()
     private var loadingSearch = false
 
+    struct cacheImages {
+        static var cellPlayImage = UIImage()
+        static var cellFavouriteImage = UIImage()
+    }
+
     required init?(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)
 
@@ -146,6 +151,9 @@ class NCMedia: UIViewController, DropdownMenuDelegate, DZNEmptyDataSetSource, DZ
 
     @objc func changeTheming() {
         appDelegate.changeTheming(self, tableView: nil, collectionView: collectionView, form: false)
+        
+        cacheImages.cellPlayImage = CCGraphics.changeThemingColorImage(UIImage.init(named: "play"), width: 100, height: 100, color: .white)
+        cacheImages.cellFavouriteImage = CCGraphics.changeThemingColorImage(UIImage.init(named: "favorite"), width: 100, height: 100, color: NCBrandColor.sharedInstance.yellowFavorite)
     }
 
     @objc func deleteFile(_ notification: NSNotification) {
@@ -516,9 +524,53 @@ extension NCMedia: UICollectionViewDataSource {
         }
         
         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "gridCell", for: indexPath) as! NCGridMediaCell
+                            
+        cell.imageStatus.image = nil
+        cell.imageLocal.image = nil
+        cell.imageFavorite.image = nil
+                    
+        if FileManager().fileExists(atPath: CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileNameView)) {
+            cell.imageItem.image = UIImage.init(contentsOfFile: CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileNameView))
+        } else {
+            if metadata.iconName.count > 0 {
+                cell.imageItem.image = UIImage.init(named: metadata.iconName)
+            } else {
+                cell.imageItem.image = UIImage.init(named: "file")
+            }
+        }
+                    
+        // image status
+        if metadata.typeFile == k_metadataTypeFile_video || metadata.typeFile == k_metadataTypeFile_audio {
+            cell.imageStatus.image = cacheImages.cellPlayImage
+        }
         
-        NCMainCommon.sharedInstance.collectionViewCellForItemAt(indexPath, collectionView: collectionView, cell: cell, metadata: metadata, metadataFolder: nil, serverUrl: metadata.serverUrl, isEditMode: isEditMode, selectocId: selectocId, autoUploadFileName: autoUploadFileName, autoUploadDirectory: autoUploadDirectory, hideButtonMore: true, downloadThumbnail: false, shares: nil, source: self)
+        // image Local
+        let tableLocalFile = NCManageDatabase.sharedInstance.getTableLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+        if tableLocalFile != nil && CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
+            if tableLocalFile!.offline { cell.imageLocal.image = UIImage.init(named: "offlineFlag") }
+            else { cell.imageLocal.image = UIImage.init(named: "local") }
+        }
         
+        // image Favorite
+        if metadata.favorite {
+            cell.imageFavorite.image = cacheImages.cellFavouriteImage
+        }
+        
+        if isEditMode {
+            cell.imageSelect.isHidden = false
+            if selectocId.contains(metadata.ocId) {
+                cell.imageSelect.image = CCGraphics.scale(UIImage.init(named: "checkedYes"), to: CGSize(width: 50, height: 50), isAspectRation: true)
+                cell.imageVisualEffect.isHidden = false
+                cell.imageVisualEffect.alpha = 0.4
+            } else {
+                cell.imageSelect.isHidden = true
+                cell.imageVisualEffect.isHidden = true
+            }
+        } else {
+            cell.imageSelect.isHidden = true
+            cell.imageVisualEffect.isHidden = true
+        }
+       
         return cell
     }
 }

+ 33 - 4
iOSClient/Viewer/NCViewerImage/NCViewerImageCommon.swift

@@ -22,6 +22,7 @@
 //
 
 import Foundation
+import SVGKit
 
 class NCViewerImageCommon: NSObject {
     @objc static let shared: NCViewerImageCommon = {
@@ -79,20 +80,48 @@ class NCViewerImageCommon: NSObject {
     
     func getImage(metadata: tableMetadata) -> UIImage? {
         
-        var image: UIImage?
         let ext = CCUtility.getExtension(metadata.fileNameView)
+        var image: UIImage?
         
         if CCUtility.fileProviderStorageSize(metadata.ocId, fileNameView: metadata.fileNameView) > 0 && metadata.typeFile == k_metadataTypeFile_image {
            
+            let iconPath = CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
             let imagePath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
-            if ext == "GIF" { image = UIImage.animatedImage(withAnimatedGIFURL: URL(fileURLWithPath: imagePath)) }
-            else { image = UIImage.init(contentsOfFile: imagePath) }
+            
+            if ext == "GIF" {
+                if !FileManager().fileExists(atPath: iconPath) {
+                    CCGraphics.createNewImage(from: metadata.fileNameView, ocId: metadata.ocId, filterGrayScale: false, typeFile: metadata.typeFile, writeImage: true)
+                }
+                image = UIImage.animatedImage(withAnimatedGIFURL: URL(fileURLWithPath: imagePath))
+            } else if ext == "SVG" {
+                if let svgImage = SVGKImage(contentsOfFile: imagePath) {
+                    let scale = svgImage.size.height / svgImage.size.width
+                    svgImage.size = CGSize(width: CGFloat(k_sizePreview), height: (CGFloat(k_sizePreview) * scale))
+                    if let image = svgImage.uiImage {
+                        if !FileManager().fileExists(atPath: iconPath) {
+                            do {
+                                try image.pngData()?.write(to: URL(fileURLWithPath: iconPath), options: .atomic)
+                            } catch { }
+                        }
+                        return image
+                    } else {
+                        return nil
+                    }
+                } else {
+                    return nil
+                }
+            } else {
+                if !FileManager().fileExists(atPath: iconPath) {
+                    CCGraphics.createNewImage(from: metadata.fileNameView, ocId: metadata.ocId, filterGrayScale: false, typeFile: metadata.typeFile, writeImage: true)
+                }
+                image = UIImage.init(contentsOfFile: imagePath)
+            }
             
         } else {
             
             // AUTOMATIC DOWNLOAD FOR GIF
             
-            if ext == "GIF" && metadata.session == "" {
+            if (ext == "GIF" || ext == "SVG")  && metadata.session == "" {
                 DispatchQueue.main.async {
                     NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_menuDownloadImage), object: nil, userInfo: ["metadata": metadata])
                 }

+ 2 - 2
iOSClient/Viewer/NCViewerPDF/NCViewerPDF.storyboard

@@ -11,6 +11,7 @@
         <!--Outline-->
         <scene sceneID="VBD-iF-aTd">
             <objects>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="v1u-om-Ku6" userLabel="First Responder" sceneMemberID="firstResponder"/>
                 <tableViewController storyboardIdentifier="OutlineTableVC" id="v4c-4C-sCZ" sceneMemberID="viewController">
                     <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="4TC-I7-6Vw">
                         <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
@@ -39,13 +40,13 @@
                         </barButtonItem>
                     </navigationItem>
                 </tableViewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="v1u-om-Ku6" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
             <point key="canvasLocation" x="25" y="796"/>
         </scene>
         <!--Navigation Controller-->
         <scene sceneID="nAa-JU-r5L">
             <objects>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="I9e-qD-yrc" userLabel="First Responder" sceneMemberID="firstResponder"/>
                 <navigationController storyboardIdentifier="OutlineNavVC" automaticallyAdjustsScrollViewInsets="NO" id="32m-jB-tjS" sceneMemberID="viewController">
                     <toolbarItems/>
                     <navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="ac3-AS-2ad">
@@ -57,7 +58,6 @@
                         <segue destination="v4c-4C-sCZ" kind="relationship" relationship="rootViewController" id="6qD-Je-rHo"/>
                     </connections>
                 </navigationController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="I9e-qD-yrc" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
             <point key="canvasLocation" x="-715" y="796"/>
         </scene>