Marino Faggiana 6 роки тому
батько
коміт
3e9f084b81

+ 1 - 0
iOSClient/CCGlobal.h

@@ -189,6 +189,7 @@
 
 // Selector
 #define selectorDownloadSynchronize                     @"downloadSynchronize"
+#define selectorDownloadEditPhoto                       @"downloadEditPhoto"
 #define selectorLoadFileView                            @"loadFileView"
 #define selectorLoadViewImage                           @"loadViewImage"
 #define selectorLoadCopy                                @"loadCopy"

BIN
iOSClient/Images.xcassets/modifyPhoto.imageset/modifyPhoto.png


BIN
iOSClient/Images.xcassets/modifyPhoto.imageset/modifyPhoto@2x.png


BIN
iOSClient/Images.xcassets/modifyPhoto.imageset/modifyPhoto@3x.png


+ 17 - 0
iOSClient/Main/CCMain.m

@@ -3531,6 +3531,23 @@
                                     }];
         }
         
+        if ([NCUtility.sharedInstance isEditImage:self.metadata.fileNameView] != nil && !_metadataFolder.e2eEncrypted && self.metadata.session == k_metadataStatusNormal) {
+            
+            [actionSheet addButtonWithTitle:NSLocalizedString(@"_modify_photo_", nil)
+                                      image:[CCGraphics changeThemingColorImage:[UIImage imageNamed:@"modifyPhoto"] multiplier:2 color:[NCBrandColor sharedInstance].icon]
+                            backgroundColor:[NCBrandColor sharedInstance].backgroundView
+                                     height:50.0
+                                       type:AHKActionSheetButtonTypeDefault
+                                    handler:^(AHKActionSheet *as) {
+                                        self.metadata.session = k_download_session;
+                                        self.metadata.sessionError = @"";
+                                        self.metadata.sessionSelector = selectorDownloadEditPhoto;
+                                        self.metadata.status = k_metadataStatusWaitDownload;
+                                        (void)[[NCManageDatabase sharedInstance] addMetadata:self.metadata];
+                                        [appDelegate performSelectorOnMainThread:@selector(loadAutoDownloadUpload) withObject:nil waitUntilDone:YES];
+                                    }];
+        }
+        
         if (!_metadataFolder.e2eEncrypted) {
             
             NSString *title;

+ 62 - 1
iOSClient/Main/NCMainCommon.swift

@@ -24,7 +24,7 @@
 import Foundation
 import TLPhotoPicker
 
-class NCMainCommon: NSObject {
+class NCMainCommon: NSObject, PhotoEditorDelegate {
     
     @objc static let sharedInstance: NCMainCommon = {
         let instance = NCMainCommon()
@@ -33,6 +33,7 @@ class NCMainCommon: NSObject {
     
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     let operationQueueReloadDatasource = OperationQueue.main
+    var metadata: tableMetadata?
     
     //MARK: -
     
@@ -908,6 +909,60 @@ class NCMainCommon: NSObject {
         self.reloadDatasource(ServerUrl: serverUrl, fileID: nil, action: k_action_NULL)
         self.appDelegate.activeMedia.reloadDatasource(nil, action: Int(k_action_NULL))
     }
+    
+    @objc func editPhoto(_ metadata: tableMetadata, viewController: UIViewController) {
+        guard let path = CCUtility.getDirectoryProviderStorageFileID(metadata.fileID, fileNameView: metadata.fileNameView) else {
+            return
+        }
+        guard let image = UIImage(contentsOfFile: path) else {
+            return
+        }
+        
+        self.metadata = metadata
+
+        let photoEditor = PhotoEditorViewController(nibName:"PhotoEditorViewController",bundle: Bundle(for: PhotoEditorViewController.self))
+        
+        photoEditor.image = image
+        photoEditor.photoEditorDelegate = self
+        photoEditor.hiddenControls = [.save, .share, .sticker]
+        
+        viewController.present(photoEditor, animated: true, completion: nil)
+    }
+    
+    func doneEditing(image: UIImage) {
+        guard let metadata = self.metadata else {
+            return
+        }
+        guard let path = CCUtility.getDirectoryProviderStorageFileID(metadata.fileID, fileNameView: metadata.fileNameView) else {
+            return
+        }
+        guard let filetype = NCUtility.sharedInstance.isEditImage(metadata.fileNameView as NSString) else {
+            return
+        }
+        if filetype == "PNG" {
+            do {
+                try image.pngData()?.write(to: path.url, options: .atomic)
+            } catch { return }
+        } else if filetype == "JPG" {
+            let imageData = image.jpegData(compressionQuality: 1)
+            do {
+                try imageData?.write(to: path.url)
+            } catch { return }
+        }
+        // write icon
+        CCGraphics.createNewImage(from: metadata.fileNameView, fileID: metadata.fileID, extension: filetype, filterGrayScale: false, typeFile: metadata.typeFile, writeImage: true)
+
+        // upload
+        metadata.session = k_upload_session
+        metadata.sessionSelector = selectorUploadFile
+        metadata.status = Int(k_metadataStatusWaitUpload)
+        
+        _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
+    }
+    
+    func canceledEditing() {
+        print("Canceled")
+    }
 }
     
 //MARK: -
@@ -1028,6 +1083,12 @@ class NCNetworkingMain: NSObject, CCNetworkingDelegate {
                 return
             }
             
+            // Modify Photo
+            if selector == selectorDownloadEditPhoto {
+                NCMainCommon.sharedInstance.editPhoto(metadata, viewController: appDelegate.activeMain)
+                return
+            }
+            
             // open View File
             if selector == selectorLoadFileView && UIApplication.shared.applicationState == UIApplication.State.active {
             

+ 13 - 0
iOSClient/Utility/NCUtility.swift

@@ -268,6 +268,19 @@ class NCUtility: NSObject {
         }
         return path.contains("CoreSimulator") || path.contains("sandboxReceipt")
     }
+    
+    @objc func isEditImage(_ fileName: NSString) -> String? {
+        switch fileName.pathExtension.uppercased() {
+        case "PNG":
+            return "PNG";
+        case "JPG":
+            return "JPG";
+        case "JPEG":
+            return "JPG"
+        default:
+            return nil
+        }
+    }
 
 }