Browse Source

add ViewerQuickLook

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

+ 7 - 7
iOSClient/Main/Create cloud/NCUploadAssets.swift

@@ -39,9 +39,9 @@ class NCHostingUploadAssetsView: NSObject {
 // MARK: - Class
 
 struct PreviewStore {
-    var originalImage: UIImage
-    var cropImage: UIImage?
+    var image: UIImage
     var localIdentifier: String
+    var hasChanges: Bool
 }
 
 class NCUploadAssets: NSObject, ObservableObject, NCCreateFormUploadConflictDelegate {
@@ -66,7 +66,7 @@ class NCUploadAssets: NSObject, ObservableObject, NCCreateFormUploadConflictDele
         DispatchQueue.global().async {
             for asset in self.assets {
                 guard asset.type == .photo, let image = asset.fullResolutionImage, let localIdentifier = asset.phAsset?.localIdentifier else { continue }
-                self.previewStore.append(PreviewStore(originalImage: image, localIdentifier: localIdentifier))
+                self.previewStore.append(PreviewStore(image: image, localIdentifier: localIdentifier, hasChanges: false))
             }
         }
     }
@@ -209,7 +209,7 @@ struct UploadAssetsView: View {
             metadata.status = NCGlobal.shared.metadataStatusWaitUpload
 
             // Modified
-            if let previewStore = uploadAssets.previewStore.first(where: { $0.localIdentifier == asset.localIdentifier }), let image = previewStore.cropImage, let data = image.jpegData(compressionQuality: 1) {
+            if let previewStore = uploadAssets.previewStore.first(where: { $0.localIdentifier == asset.localIdentifier }), previewStore.hasChanges, let data = previewStore.image.jpegData(compressionQuality: 1) {
                 if metadata.contentType == "image/heic" {
                     let fileNameNoExtension = (fileName as NSString).deletingPathExtension
                     metadata.contentType = "image/jpeg"
@@ -244,7 +244,7 @@ struct UploadAssetsView: View {
     }
 
     func copyImageforQL() {
-        let image = uploadAssets.previewStore[index].originalImage
+        let image = uploadAssets.previewStore[index].image
         if let data = image.jpegData(compressionQuality: 1) {
             try? data.write(to: URL(fileURLWithPath: fileNamePath))
         }
@@ -260,7 +260,7 @@ struct UploadAssetsView: View {
                             LazyHGrid(rows: gridItems, alignment: .center, spacing: 10) {
                                 ForEach(0..<uploadAssets.previewStore.count, id: \.self) { index in
                                     VStack {
-                                        Image(uiImage: uploadAssets.previewStore[index].cropImage ?? uploadAssets.previewStore[index].originalImage)
+                                        Image(uiImage: uploadAssets.previewStore[index].image)
                                             .resizable()
                                             .frame(width: 100, height: 100, alignment: .center)
                                             .cornerRadius(10)
@@ -270,7 +270,7 @@ struct UploadAssetsView: View {
                                                 isPresentedCrop = true
                                                 copyImageforQL()
                                             }.fullScreenCover(isPresented: $isPresentedCrop) {
-                                                ViewerQuickLook(url: URL(fileURLWithPath: fileNamePath), isPresented: $isPresentedCrop)
+                                                ViewerQuickLook(url: URL(fileURLWithPath: fileNamePath), isPresented: $isPresentedCrop, previewStore: $uploadAssets.previewStore[index])
                                                     .ignoresSafeArea()
                                             }
                                     }

+ 9 - 0
iOSClient/Viewer/NCViewerQuickLook/ViewerQuickLook.swift

@@ -14,6 +14,7 @@ struct ViewerQuickLook: UIViewControllerRepresentable {
 
     let url: URL
     @Binding var isPresented: Bool
+    @Binding var previewStore: PreviewStore
 
     func makeUIViewController(context: Context) -> UINavigationController {
         let controller = QLPreviewController()
@@ -45,6 +46,7 @@ struct ViewerQuickLook: UIViewControllerRepresentable {
     class Coordinator: NSObject, QLPreviewControllerDataSource, QLPreviewControllerDelegate, CropViewControllerDelegate {
 
         weak var viewController: QLPreviewController?
+        var hasChanges: Bool = false
         let parent: ViewerQuickLook
 
         init(parent: ViewerQuickLook) {
@@ -52,6 +54,11 @@ struct ViewerQuickLook: UIViewControllerRepresentable {
         }
 
         @objc func dismiss() {
+
+            if let image = UIImage(contentsOfFile: parent.url.path) {
+                parent.previewStore.image = image
+                parent.previewStore.hasChanges = hasChanges
+            }
             parent.isPresented = false
         }
 
@@ -67,6 +74,7 @@ struct ViewerQuickLook: UIViewControllerRepresentable {
 
         func previewController(_ controller: QLPreviewController, didSaveEditedCopyOf previewItem: QLPreviewItem, at modifiedContentsURL: URL) {
             guard NCUtilityFileSystem.shared.moveFile(atPath: modifiedContentsURL.path, toPath: parent.url.path) else { return }
+            hasChanges = true
         }
 
         func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
@@ -80,6 +88,7 @@ struct ViewerQuickLook: UIViewControllerRepresentable {
             guard let data = cropped.jpegData(compressionQuality: 1) else { return }
             do {
                 try data.write(to: parent.url)
+                hasChanges = true
                 viewController?.reloadData()
             } catch {  }
         }