marinofaggiana 5 years ago
parent
commit
3fc23b6cce

+ 1 - 1
File Provider Extension/FileProviderExtension+Actions.swift

@@ -142,7 +142,7 @@ extension FileProviderExtension {
                     NCManageDatabase.sharedInstance.renameDirectory(ocId: ocIdFrom, serverUrl: serverUrlTo)                    
                 }
                 
-                NCManageDatabase.sharedInstance.moveMetadata(ocId: ocIdFrom, serverUrlTo: serverUrlTo)
+                _ = NCManageDatabase.sharedInstance.moveMetadata(ocId: ocIdFrom, serverUrlTo: serverUrlTo)
                 
                 guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@", ocIdFrom)) else {
                     completionHandler(nil, NSFileProviderError(.noSuchItem))

+ 14 - 7
iOSClient/Database/NCManageDatabase.swift

@@ -2023,21 +2023,28 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    @objc func moveMetadata(ocId: String, serverUrlTo: String) {
+    @objc func moveMetadata(ocId: String, serverUrlTo: String) -> tableMetadata? {
         
+        var result: tableMetadata?
         let realm = try! Realm()
 
         do {
             try realm.write {
-                let results = realm.objects(tableMetadata.self).filter("ocId == %@", ocId)
-                for result in results {
-                    result.serverUrl = serverUrlTo
+                result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first
+                if result != nil {
+                    result!.serverUrl = serverUrlTo
                 }
             }
         } catch let error {
             print("[LOG] Could not write to database: ", error)
-            return
-        }        
+            return nil
+        }
+        
+        if result == nil {
+            return nil
+        }
+        
+        return tableMetadata.init(value: result!)
     }
     
     @objc func addMetadataServerUrl(ocId: String, serverUrl: String) {
@@ -2059,7 +2066,7 @@ class NCManageDatabase: NSObject {
     
     @objc func renameMetadata(fileNameTo: String, ocId: String) -> tableMetadata? {
         
-        var result :tableMetadata?
+        var result: tableMetadata?
         let realm = try! Realm()
         
         do {

+ 20 - 7
iOSClient/Main/CCMain.m

@@ -1525,10 +1525,12 @@
                        
                         if (errorCode == 0 && [account isEqualToString:appDelegate.activeAccount]) {
                             // Rename metadata
-                            tableMetadata *newMetadata = [[NCManageDatabase sharedInstance] renameMetadataWithFileNameTo:fileNameNew ocId:metadata.ocId];
+                            tableMetadata *metadataNew = [[NCManageDatabase sharedInstance] renameMetadataWithFileNameTo:fileNameNew ocId:metadata.ocId];
                             
-                            NSDictionary* userInfo = @{@"metadata": newMetadata};
-                            [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_renameFile object:nil userInfo:userInfo];
+                            if (metadataNew) {
+                                NSDictionary* userInfo = @{@"metadata": metadataNew, @"errorCode": @(errorCode)};
+                                [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_renameFile object:nil userInfo:userInfo];
+                            }
                             
                             if (metadata.directory) {
                                 
@@ -1563,7 +1565,12 @@
                             [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadata.serverUrl ocId:metadata.ocId action:k_action_MOD];
                             
                         } else if (errorCode != 0) {
+                            
                             [[NCContentPresenter shared] messageNotification:@"_rename_" description:message delay:k_dismissAfterSecond type:messageTypeError errorCode:errorCode];
+                            
+                            NSDictionary* userInfo = @{@"metadata": metadata, @"errorCode": @(errorCode)};
+                            [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_renameFile object:nil userInfo:userInfo];
+                            
                         } else {
                             NSLog(@"[LOG] It has been changed user during networking process, error.");
                         }
@@ -1624,11 +1631,16 @@
                             [[NCManageDatabase sharedInstance] deleteDirectoryAndSubDirectoryWithServerUrl:[CCUtility stringAppendServerUrl:metadata.serverUrl addFileName:metadata.fileName] account:account];
                         }
                         
-                        [[NCManageDatabase sharedInstance] moveMetadataWithOcId:metadata.ocId serverUrlTo:serverUrlTo];
+                        tableMetadata *metadataNew = [[NCManageDatabase sharedInstance] moveMetadataWithOcId:metadata.ocId serverUrlTo:serverUrlTo];
                         
                         [[NCManageDatabase sharedInstance] clearDateReadWithServerUrl:metadata.serverUrl account:account];
                         [[NCManageDatabase sharedInstance] clearDateReadWithServerUrl:serverUrlTo account:account];
                         
+                        if (metadataNew) {
+                            NSDictionary* userInfo = @{@"metadata": metadataNew, @"errorCode": @(errorCode)};
+                            [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_moveFile object:nil userInfo:userInfo];
+                        }
+                        
                         // next
                         [_selectedocIdsMetadatas removeObjectForKey:metadata.ocId];
                         
@@ -1650,9 +1662,6 @@
                                 [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
                         }
                         
-                        NSDictionary* userInfo = @{@"metadata": metadata};
-                        [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_moveFile object:nil userInfo:userInfo];
-                        
                     } else if (errorCode != 0) {
                         
                         [[NCContentPresenter shared] messageNotification:@"_move_" description:message delay:k_dismissAfterSecond type:messageTypeError errorCode:errorCode];
@@ -1665,6 +1674,10 @@
                             [self readFolder:metadata.serverUrl];
                         else
                             [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadata.serverUrl ocId:nil action:k_action_NULL];
+                        
+                        NSDictionary* userInfo = @{@"metadata": metadata, @"errorCode": @(errorCode)};
+                        [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_moveFile object:nil userInfo:userInfo];
+                        
                     } else {
                         NSLog(@"[LOG] It has been changed user during networking process, error.");
                     }

+ 8 - 4
iOSClient/Main/NCDetailViewController.swift

@@ -136,14 +136,16 @@ class NCDetailViewController: UIViewController {
     
     @objc func moveFile(_ notification: NSNotification) {
         if let userInfo = notification.userInfo as NSDictionary? {
-            if let metadata = userInfo["metadata"] as? tableMetadata {
+            if let metadata = userInfo["metadata"] as? tableMetadata, let errorCode = userInfo["errorCode"] as? String {
+                if errorCode != "0" { return }
             }
         }
     }
     
     @objc func deleteFile(_ notification: NSNotification) {
         if let userInfo = notification.userInfo as NSDictionary? {
-            if let metadata = userInfo["metadata"] as? tableMetadata {
+            if let metadata = userInfo["metadata"] as? tableMetadata, let errorCode = userInfo["errorCode"] as? String {
+                if errorCode != "0" { return }
                 
                 // IMAGE
                 if mediaBrowser != nil && metadata.account == self.metadata?.account && metadata.serverUrl == self.metadata?.serverUrl && metadata.typeFile == k_metadataTypeFile_image {
@@ -180,7 +182,8 @@ class NCDetailViewController: UIViewController {
     
     @objc func uploadFile(_ notification: NSNotification) {
         if let userInfo = notification.userInfo as NSDictionary? {
-            if let metadata = userInfo["metadata"] as? tableMetadata {
+            if let metadata = userInfo["metadata"] as? tableMetadata, let errorCode = userInfo["errorCode"] as? String {
+                if errorCode != "0" { return }
                 
                 // IMAGE
                 if mediaBrowser != nil && metadata.account == self.metadata?.account && metadata.serverUrl == self.metadata?.serverUrl && metadata.typeFile == k_metadataTypeFile_image {
@@ -196,7 +199,8 @@ class NCDetailViewController: UIViewController {
     
     @objc func renameFile(_ notification: NSNotification) {
         if let userInfo = notification.userInfo as NSDictionary? {
-            if let metadata = userInfo["metadata"] as? tableMetadata {
+            if let metadata = userInfo["metadata"] as? tableMetadata, let errorCode = userInfo["errorCode"] as? String {
+                if errorCode != "0" { return }
                 
                 // IMAGE
                 if mediaBrowser != nil && metadata.account == self.metadata?.account && metadata.serverUrl == self.metadata?.serverUrl && metadata.typeFile == k_metadataTypeFile_image {

+ 4 - 4
iOSClient/Main/NCMainCommon.swift

@@ -1008,10 +1008,6 @@ class NCMainCommon: NSObject, PhotoEditorDelegate, NCAudioRecorderViewController
                         
                         self.appDelegate.filterocId.remove(metadata.ocId)
                         
-                        // Message
-                        let userInfo:[String: tableMetadata] = ["metadata": metadata]
-                        NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_deleteFile), object: nil, userInfo: userInfo)
-                        
                     } else {
                         
                         completionErrorCode = errorCode
@@ -1023,6 +1019,10 @@ class NCMainCommon: NSObject, PhotoEditorDelegate, NCAudioRecorderViewController
                         self.appDelegate.filterocId.remove(metadata.ocId)
                     }
                     
+                    // Message
+                    let userInfo: [String : Any] = ["metadata": metadata, "errorCode": String(errorCode)]
+                    NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_deleteFile), object: nil, userInfo: userInfo)
+                    
                     if count == metadatas.count {
                         if e2ee {
                             DispatchQueue.global().async {

+ 11 - 9
iOSClient/Networking/CCNetworking.m

@@ -523,6 +523,7 @@
     [appDelegate.listProgressMetadata removeObjectForKey:ocId];
 #endif
     
+    NSString *errorMessage = [CCError manageErrorKCF:errorCode withNumberError:YES];
     tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"ocId == %@", ocId]];
     
     if (errorCode != 0) {
@@ -541,8 +542,9 @@
             [[NCManageDatabase sharedInstance] setMetadataSession:nil sessionError:[CCError manageErrorKCF:errorCode withNumberError:NO] sessionSelector:nil sessionTaskIdentifier:k_taskIdentifierDone status:k_metadataStatusDownloadError predicate:[NSPredicate predicateWithFormat:@"ocId == %@", ocId]];
         }
         
+        
         if ([self.delegate respondsToSelector:@selector(downloadFileSuccessFailure:ocId:serverUrl:selector:errorMessage:errorCode:)]) {
-            [self.delegate downloadFileSuccessFailure:fileName ocId:ocId serverUrl:serverUrl selector:selector errorMessage:[CCError manageErrorKCF:errorCode withNumberError:YES] errorCode:errorCode];
+            [self.delegate downloadFileSuccessFailure:fileName ocId:ocId serverUrl:serverUrl selector:selector errorMessage:errorMessage errorCode:errorCode];
         }
         
     } else {
@@ -581,10 +583,6 @@
             }
         }
         
-        // NSNotificationCenter
-        NSDictionary* userInfo = @{@"metadata": metadata};
-        [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_downloadFile object:nil userInfo:userInfo];
-        
         // Exif
         if ([metadata.typeFile isEqualToString: k_metadataTypeFile_image])
             [[CCExifGeo sharedInstance] setExifLocalTableEtag:metadata];
@@ -598,6 +596,10 @@
             [self.delegate downloadFileSuccessFailure:fileName ocId:ocId serverUrl:serverUrl selector:selector errorMessage:@"" errorCode:0];
         }
     }
+    
+    // NSNotificationCenter
+    NSDictionary* userInfo = @{@"metadata": metadata, @"errorCode": @(errorCode)};
+    [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_downloadFile object:nil userInfo:userInfo];
 }
 
 #pragma --------------------------------------------------------------------------------------------
@@ -1177,10 +1179,6 @@
         }
 #ifndef EXTENSION
         
-        // NSNotificationCenter
-        NSDictionary* userInfo = @{@"metadata": metadata};
-        [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_uploadFile object:nil userInfo:userInfo];
-        
         // EXIF
         if ([metadata.typeFile isEqualToString: k_metadataTypeFile_image])
             [[CCExifGeo sharedInstance] setExifLocalTableEtag:metadata];
@@ -1247,6 +1245,10 @@
             [self.delegate uploadFileSuccessFailure:metadata.fileName ocId:metadata.ocId assetLocalIdentifier:metadata.assetLocalIdentifier serverUrl:serverUrl selector:metadata.sessionSelector errorMessage:errorMessage errorCode:errorCode];
         }
     }
+    
+    // NSNotificationCenter
+    NSDictionary* userInfo = @{@"metadata": metadata, @"errorCode": @(errorCode)};
+    [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_uploadFile object:nil userInfo:userInfo];
 }
 
 #pragma --------------------------------------------------------------------------------------------

+ 3 - 0
iOSClient/Utility/CCError.m

@@ -29,6 +29,9 @@
 {
     switch (errorCode) {
             
+        case 0:                                         // 0
+            return @"";
+            break;
         case kCFURLErrorCancelled:                      // -999
             return NSLocalizedString(@"_cancelled_by_user", nil);
             break;