Bladeren bron

dev rename

marinofaggiana 5 jaren geleden
bovenliggende
commit
5f8553f772

+ 1 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -2074,6 +2074,7 @@ class NCManageDatabase: NSObject {
         }
     }
     
+    @discardableResult
     @objc func renameMetadata(fileNameTo: String, ocId: String) -> tableMetadata? {
         
         var result: tableMetadata?

+ 0 - 1
iOSClient/Main/CCMain.h

@@ -96,7 +96,6 @@
 - (void)moveOpenWindow:(NSArray *)indexPaths;
 
 - (void)minCharTextFieldDidChange:(UITextField *)sender;
-- (void)renameFile:(NSArray *)arguments;
 - (void)comandoLockPassword;
 - (void)actionDelete:(NSIndexPath *)indexPath;
 - (void)openinFile:(id)sender;

+ 7 - 0
iOSClient/Main/CCMain.m

@@ -131,6 +131,7 @@
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(triggerProgressTask:) name:k_notificationCenter_progressTask object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deleteFile:) name:k_notificationCenter_deleteFile object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(favoriteFile:) name:k_notificationCenter_favoriteFile object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(renameFile:) name:k_notificationCenter_renameFile object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeTheming) name:k_notificationCenter_changeTheming object:nil];
     
     // Search
@@ -500,6 +501,10 @@
     }
 }
 
+- (void)renameFile:(NSNotification *)notification {
+    [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
+}
+
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ==== DZNEmptyDataSetSource ====
 #pragma --------------------------------------------------------------------------------------------
@@ -1500,6 +1505,7 @@
     [self tableViewSelect:false];
 }
 
+/*
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ===== Rename =====
 #pragma --------------------------------------------------------------------------------------------
@@ -1648,6 +1654,7 @@
         }];
     }
 }
+*/
 
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ===== Move =====

+ 6 - 8
iOSClient/Main/Menu/CCMain+Menu.swift

@@ -264,10 +264,9 @@ extension CCMain {
                             let cancelAction = UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .cancel, handler: nil)
 
                             let okAction = UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { action in
-                                    let fileName = alertController.textFields![0].text
-                                    self.perform(#selector(self.renameFile(_:)), on: .main, with: [metadata, fileName!], waitUntilDone: false)
-
-                                })
+                                let fileNameNew = alertController.textFields![0].text
+                                NCNetworking.sharedInstance.renameMetadata(metadata, fileNameNew: fileNameNew!, viewController: self) { (errorCode, errorDescription) in }
+                            })
                             okAction.isEnabled = false
                             alertController.addAction(cancelAction)
                             alertController.addAction(okAction)
@@ -428,10 +427,9 @@ extension CCMain {
                         let cancelAction = UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .cancel, handler: nil)
 
                         let okAction = UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { action in
-                                let fileName = alertController.textFields![0].text
-                                self.perform(#selector(self.renameFile(_:)), on: .main, with: [metadata, fileName!], waitUntilDone: false)
-
-                            })
+                            let fileNameNew = alertController.textFields![0].text
+                            NCNetworking.sharedInstance.renameMetadata(metadata, fileNameNew: fileNameNew!, viewController: self) { (errorCode, errorDescription) in }
+                        })
                         okAction.isEnabled = false
                         alertController.addAction(cancelAction)
                         alertController.addAction(okAction)

+ 4 - 8
iOSClient/Main/NCDetailViewController.swift

@@ -254,17 +254,13 @@ class NCDetailViewController: UIViewController {
         if self.view?.window == nil { return }
         
         if let userInfo = notification.userInfo as NSDictionary? {
-            if let metadata = userInfo["metadata"] as? tableMetadata, let errorCode = userInfo["errorCode"] as? Int {
-                if errorCode != 0 || metadata.account != self.metadata?.account || metadata.serverUrl != self.metadata?.serverUrl { return }
+            if let metadata = userInfo["metadata"] as? tableMetadata, let metadataNew = userInfo["metadataNew"] as? tableMetadata, let errorCode = userInfo["errorCode"] as? Int {
+                if errorCode != 0 || metadataNew.account != self.metadata?.account || metadataNew.serverUrl != self.metadata?.serverUrl { return }
                 
                 // IMAGE
                 if (metadata.typeFile == k_metadataTypeFile_image || metadata.typeFile == k_metadataTypeFile_video || metadata.typeFile == k_metadataTypeFile_audio) && !mediaFilterImage {
-                    
-                    if NCViewerImageCommon.shared.getMetadatasDatasource(metadata: self.metadata, metadatas: self.metadatas, favoriteDatasorce: favoriteFilterImage, mediaDatasorce: mediaFilterImage, offLineDatasource: offlineFilterImage) != nil {
-                        viewImage()
-                    } else {
-                        viewUnload()
-                    }
+                    self.metadata = metadataNew
+                    viewImage()
                 }
                 
                 if (metadata.typeFile == k_metadataTypeFile_document || metadata.typeFile == k_metadataTypeFile_unknown) && metadata.ocId == self.metadata?.ocId {

+ 91 - 2
iOSClient/Networking/NCNetworking.swift

@@ -269,7 +269,7 @@ import NCCommunication
         }
     }
     
-    @objc func deleteMetadataPlain(_ metadata: tableMetadata, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
+    private func deleteMetadataPlain(_ metadata: tableMetadata, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
         
         // verify permission
         let permission = NCUtility.sharedInstance.permissionsContainsString(metadata.permissions, permissions: k_permission_can_delete)
@@ -308,7 +308,7 @@ import NCCommunication
         }
     }
     
-    @objc func deleteMetadataE2EE(_ metadata: tableMetadata, directory: tableDirectory, user: String, userID: String, password: String, url: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
+    private func deleteMetadataE2EE(_ metadata: tableMetadata, directory: tableDirectory, user: String, userID: String, password: String, url: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
                         
         DispatchQueue.global().async {
             // LOCK FOLDER
@@ -365,4 +365,93 @@ import NCCommunication
             completion(errorCode, description)
         }
     }
+    
+    @objc func renameMetadata(_ metadata: tableMetadata, fileNameNew: String, viewController: UIViewController?, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
+        
+        let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl))
+        
+        if directory != nil && directory?.e2eEncrypted == true {
+            //self.deleteMetadataE2EE(metadata, directory: directory!, user: user, userID: userID, password: password, url: url, completion: completion)
+        } else {
+            
+            renameMetadataPlain(metadata, fileNameNew: fileNameNew, viewController: viewController, completion: completion)
+        }
+    }
+    
+    private func renameMetadataPlain(_ metadata: tableMetadata, fileNameNew: String, viewController: UIViewController?, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
+        
+        let permission = NCUtility.sharedInstance.permissionsContainsString(metadata.permissions, permissions: k_permission_can_rename)
+        if !(metadata.permissions == "") && !permission {
+            NCContentPresenter.shared.messageNotification("_error_", description: "_no_permission_modify_file_", delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.error, errorCode: Int(k_CCErrorInternalError))
+            return
+        }
+        
+        guard let fileNameNew = CCUtility.removeForbiddenCharactersServer(fileNameNew) else { return }
+        if fileNameNew.count == 0 || fileNameNew == metadata.fileNameView { return }
+        
+        // Verify if exists the fileName TO
+        let serverUrlFileName = metadata.serverUrl + "/" + fileNameNew
+        NCCommunication.sharedInstance.readFileOrFolder(serverUrlFileName: serverUrlFileName, depth: "0", account: metadata.account) { (account ,files, errorCode, errorDescription) in
+            
+            if errorCode == 0  {
+                
+                let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: NSLocalizedString("_file_already_exists_", comment: ""), preferredStyle: .alert)
+                alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default) { (action:UIAlertAction) in })
+                viewController?.present(alertController, animated: true, completion:nil)
+                
+            } else if errorCode == kOCErrorServerPathNotFound {
+                
+                let fileNamePath = metadata.serverUrl + "/" + metadata.fileName
+                let fileNameToPath = metadata.serverUrl + "/" + fileNameNew
+                
+                NCCommunication.sharedInstance.moveFileOrFolder(serverUrlFileNameSource: fileNamePath, serverUrlFileNameDestination: fileNameToPath, account: metadata.account) { (account, errorCode, errorDescription) in
+                    
+                    if errorCode == 0 {
+                        
+                        if let metadataNew = NCManageDatabase.sharedInstance.renameMetadata(fileNameTo: fileNameNew, ocId: metadata.ocId) {
+                            let userInfo: [String : Any] = ["metadata": metadata, "metadataNew": metadataNew, "errorCode": Int(errorCode), "errorDescription": ""]
+                            NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_renameFile), object: nil, userInfo: userInfo)
+                        }
+                        NCManageDatabase.sharedInstance.renameMedia(fileNameTo: fileNameNew, ocId: metadata.ocId)
+                        
+                        if metadata.directory {
+                            
+                            let serverUrl = CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: metadata.fileName)!
+                            let serverUrlTo = CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: fileNameNew)!
+                            if let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)) {
+                                
+                                NCManageDatabase.sharedInstance.setDirectory(serverUrl: serverUrl, serverUrlTo: serverUrlTo, etag: "", ocId: nil, encrypted: directory.e2eEncrypted, richWorkspace: nil, account: metadata.account)
+                            }
+                            
+                        } else {
+                            
+                            NCManageDatabase.sharedInstance.setLocalFile(ocId: metadata.ocId, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: fileNameNew, etag: nil)
+                            // Move file system
+                            let atPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + metadata.fileName
+                            let toPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId) + "/" + fileNameNew
+                            do {
+                                try FileManager.default.moveItem(atPath: atPath, toPath: toPath)
+                            } catch { }
+                            let atPathIcon = CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileName)!
+                            let toPathIcon = CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: fileNameNew)!
+                            do {
+                                try FileManager.default.moveItem(atPath: atPathIcon, toPath: toPathIcon)
+                            } catch { }
+                        }
+                        
+                    } else {
+                        
+                        NCContentPresenter.shared.messageNotification("_error_", description: errorDescription, delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.error, errorCode: errorCode)
+                        
+                        let userInfo: [String : Any] = ["metadata": metadata, "errorCode": Int(errorCode), "errorDescription": errorDescription!]
+                        NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_renameFile), object: nil, userInfo: userInfo)
+                    }
+                }
+                
+            } else {
+                NCContentPresenter.shared.messageNotification("_error_", description: errorDescription, delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.error, errorCode: errorCode)
+            }
+        }
+        
+    }
 }

+ 1 - 2
iOSClient/Viewer/NCViewerImage/NCViewerImageCommon.swift

@@ -39,8 +39,7 @@ class NCViewerImageCommon: NSObject {
         NCViewerImageCommon.offOutlineImage = CCGraphics.changeThemingColorImage(UIImage.init(named: "offOutlineImage"), width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.width, color: NCBrandColor.sharedInstance.brand)
     }
     
-    
-    func getMetadatasDatasource(metadata: tableMetadata?, metadatas: [tableMetadata],favoriteDatasorce: Bool, mediaDatasorce: Bool, offLineDatasource: Bool) -> [tableMetadata]? {
+    func getMetadatasDatasource(metadata: tableMetadata?, metadatas: [tableMetadata], favoriteDatasorce: Bool, mediaDatasorce: Bool, offLineDatasource: Bool) -> [tableMetadata]? {
         guard let metadata = metadata else { return nil }
         if favoriteDatasorce {
             let metadatas = NCManageDatabase.sharedInstance.getMetadatasViewer(predicate: NSPredicate(format: "account == %@ AND favorite == 1 AND (typeFile == %@ || typeFile == %@ || typeFile == %@)", metadata.account, k_metadataTypeFile_image, k_metadataTypeFile_video, k_metadataTypeFile_audio), sorted: CCUtility.getOrderSettings(), ascending: CCUtility.getAscendingSettings())