浏览代码

Improvements : deleteFile

Marino Faggiana 6 年之前
父节点
当前提交
8ba4e1faae
共有 3 个文件被更改,包括 88 次插入49 次删除
  1. 81 48
      iOSClient/Main/CCMain.m
  2. 1 1
      iOSClient/Networking/CCNetworking.m
  3. 6 0
      iOSClient/Photos/CCPhotos.m

+ 81 - 48
iOSClient/Main/CCMain.m

@@ -1772,67 +1772,100 @@
 #pragma mark ===== Delete File or Folder =====
 #pragma --------------------------------------------------------------------------------------------
 
-- (void)deleteFileOrFolderSuccessFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
+- (void)deleteFile
 {
-    // Unauthorized
-    if (errorCode == kOCErrorServerUnauthorized)
-        [appDelegate openLoginView:self loginType:k_login_Modify_Password selector:k_intro_login];
-    
-    [_queueSelector removeObject:metadataNet.selector];
-    
-    if ([_queueSelector count] == 0) {
-        
-        [_hud hideHud];
-        
-        // next
-        [_selectedFileIDsMetadatas removeObjectForKey:metadataNet.fileID];
-            
-        if ([_selectedFileIDsMetadatas count] > 0) {
-            
-            NSArray *metadatas = [_selectedFileIDsMetadatas allValues];
-            [self deleteFileOrFolder:[metadatas objectAtIndex:0] numFile:[_selectedFileIDsMetadatas count] ofFile:_numSelectedFileIDsMetadatas];
-            
-        } else {
-            
-            // End Select Table View
-            [self tableViewSelect:NO];
-            
-            // Reload
-            if (_isSearchMode)
-                [self readFolder:metadataNet.serverUrl];
-            else
-                [self reloadDatasource:metadataNet.serverUrl];
-        }
+    if (_isSelectedMode && [_selectedFileIDsMetadatas count] == 0)
+        return;
+     
+    NSArray *metadatas;
+    if ([_selectedFileIDsMetadatas count] > 0) {
+        metadatas = [_selectedFileIDsMetadatas allValues];
+    } else {
+        metadatas = [[NSArray alloc] initWithObjects:_metadata, nil];
     }
-}
 
-- (void)deleteFileOrFolder:(tableMetadata *)metadata numFile:(NSInteger)numFile ofFile:(NSInteger)ofFile
-{
-    [_queueSelector addObject:selectorDelete];
-    
-    [[CCActions sharedInstance] deleteFileOrFolder:metadata delegate:self hud:_hud hudTitled:[NSString stringWithFormat:NSLocalizedString(@"_delete_file_n_", nil), ofFile - numFile + 1, ofFile]];        
+    if (_metadataFolder.e2eEncrypted) {
+        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+            NSError *error = [[NCNetworkingEndToEnd sharedManager] lockEndToEndFolderEncryptedOnServerUrl:self.serverUrl fileID:_metadataFolder.fileID user:appDelegate.activeUser userID:appDelegate.activeUserID password:appDelegate.activePassword url:appDelegate.activeUrl];
+            dispatch_async(dispatch_get_main_queue(), ^{
+                if (error == nil) {
+                    [self deleteFile:metadatas e2ee:_metadataFolder.e2eEncrypted];
+                } else {
+                    [appDelegate messageNotification:@"_delete_" description:error.localizedDescription visible:true delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
+                    return;
+                }
+            });
+        });
+    } else {
+        [self deleteFile:metadatas e2ee:_metadataFolder.e2eEncrypted];
+    }
 }
 
-- (void)deleteFile
+- (void)deleteFile:(NSArray *)metadatas e2ee:(BOOL)e2ee
 {
-    if (_isSelectedMode && [_selectedFileIDsMetadatas count] == 0)
-        return;
+    NSInteger numDelete = metadatas.count;
+    __block NSInteger cont = 0;
     
-    [_queueSelector removeAllObjects];
+    OCnetworking *ocNetworking = [[OCnetworking alloc] initWithDelegate:nil metadataNet:nil withUser:appDelegate.activeUser withUserID:appDelegate.activeUserID withPassword:appDelegate.activePassword withUrl:appDelegate.activeUrl];
     
-    if ([_selectedFileIDsMetadatas count] > 0) {
-            
-        _numSelectedFileIDsMetadatas = [_selectedFileIDsMetadatas count];
-        NSArray *metadatas = [_selectedFileIDsMetadatas allValues];
-        [self deleteFileOrFolder:[metadatas objectAtIndex:0] numFile:[_selectedFileIDsMetadatas count] ofFile:_numSelectedFileIDsMetadatas];
+    for (tableMetadata *metadata in metadatas) {
         
-    } else {
+        NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:metadata.directoryID];
         
-        _numSelectedFileIDsMetadatas = 1;
-        [self deleteFileOrFolder:_metadata numFile:1 ofFile:_numSelectedFileIDsMetadatas];
+        [ocNetworking deleteFileOrFolder:metadata.fileName serverUrl:serverUrl completion:^(NSString *message, NSInteger errorCode) {
+            
+            if (errorCode == 0 || errorCode == 404) {
+                
+                [[NSFileManager defaultManager] removeItemAtPath:[CCUtility getDirectoryProviderStorageFileID:metadata.fileID] error:nil];
+                
+                [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID] clearDateReadDirectoryID:metadata.directoryID];
+                [[NCManageDatabase sharedInstance] deleteLocalFileWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
+                [[NCManageDatabase sharedInstance] deletePhotosWithFileID:metadata.fileID];
+                [[appDelegate activePhotos].fileIDHide addObject:metadata.fileID];
+                
+                // Directory ?
+                if (metadata.directory) {
+                    [[NCManageDatabase sharedInstance] deleteDirectoryAndSubDirectoryWithServerUrl:[CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName]];
+                }
+                // E2EE (if exists the record)
+                if (e2ee) {
+                    [[NCManageDatabase sharedInstance] deleteE2eEncryptionWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", metadata.account, serverUrl, metadata.fileName]];
+                }
+            }
+            
+            if (++cont == numDelete) {
+                if (e2ee) {
+                    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+                        [[NCNetworkingEndToEnd sharedManager] rebuildAndSendEndToEndMetadataOnServerUrl:serverUrl account:appDelegate.activeAccount user:appDelegate.activeUser userID:appDelegate.activeUserID password:appDelegate.activePassword url:appDelegate.activeUrl];
+                        dispatch_async(dispatch_get_main_queue(), ^{
+                            
+                            // ONLY for this View
+                            
+                            // End Select Table View
+                            [self tableViewSelect:NO];
+                            
+                            [self reloadDatasource];
+                        });
+                    });
+                } else {
+                    
+                    // ONLY for this View
+
+                    // End Select Table View
+                    [self tableViewSelect:NO];
+                    
+                    // Reload
+                    if (_isSearchMode)
+                        [self readFolder:serverUrl];
+                    else
+                        [self reloadDatasource:serverUrl];
+                }
+            }
+        }];
     }
 }
 
+
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ===== Rename / Move =====
 #pragma --------------------------------------------------------------------------------------------

+ 1 - 1
iOSClient/Networking/CCNetworking.m

@@ -1075,7 +1075,7 @@
         NSLog(@"[LOG] Insert new upload : %@ - fileID : %@", metadata.fileName, fileID);
 
         // remove tempFileID and adjust the directory provider storage
-        if ([tempFileID isEqualToString:[metadata.directoryID stringByAppendingString:metadata.fileName]]) {
+        if ([tempFileID isEqualToString:[metadata.directoryID stringByAppendingString:metadata.fileNameView]]) {
             
             [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", tempFileID] clearDateReadDirectoryID:nil];
             

+ 6 - 0
iOSClient/Photos/CCPhotos.m

@@ -433,10 +433,16 @@
                     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                         [[NCNetworkingEndToEnd sharedManager] rebuildAndSendEndToEndMetadataOnServerUrl:serverUrl account:appDelegate.activeAccount user:appDelegate.activeUser userID:appDelegate.activeUserID password:appDelegate.activePassword url:appDelegate.activeUrl];
                         dispatch_async(dispatch_get_main_queue(), ^{
+                            
+                            // ONLY for this View
+                            
                             [self reloadDatasource];
                         });
                     });
                 } else {
+                    
+                    // ONLY for this View
+                    
                     [self reloadDatasource];
                 }
             }