marinofaggiana 6 жил өмнө
parent
commit
9a36136f6d

+ 7 - 0
iOSClient/Networking/OCNetworking.h

@@ -26,6 +26,12 @@
 #import "AFURLSessionManager.h"
 #import "CCNetworking.h"
 
+@protocol OCNetworkingDelegate <NSObject>
+
+@optional - (void)readFolderSuccessFailureWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl metadataFolder:(tableMetadata *)metadataFolder metadatas:(NSArray *)metadatas selector:(NSString *)selector message:(NSString *)message errorCode:(NSInteger)errorCode;
+
+@end
+
 @interface OCNetworking : NSObject <NSURLSessionDelegate>
 
 + (OCNetworking *)sharedManager;
@@ -48,6 +54,7 @@
 
 #pragma mark ===== WebDav =====
 
+- (void)readFolderWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl selector:(NSString *)selector depth:(NSString *)depth delegate:(id)delegate;
 - (void)readFolderWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl depth:(NSString *)depth completion:(void(^)(NSString *account, NSArray *metadatas, tableMetadata *metadataFolder, NSString *message, NSInteger errorCode))completion;
 - (void)readFileWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl fileName:(NSString *)fileName completion:(void(^)(NSString *account, tableMetadata *metadata, NSString *message, NSInteger errorCode))completion;
 - (void)createFolderWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl fileName:(NSString *)fileName completion:(void(^)(NSString *account, NSString *fileID, NSDate *date, NSString *message, NSInteger errorCode))completion;

+ 8 - 0
iOSClient/Networking/OCNetworking.m

@@ -417,6 +417,14 @@
 #pragma mark ===== WebDav =====
 #pragma --------------------------------------------------------------------------------------------
 
+- (void)readFolderWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl selector:(NSString *)selector depth:(NSString *)depth delegate:(id)delegate
+{
+    [self readFolderWithAccount:account serverUrl:serverUrl depth:depth completion:^(NSString *account, NSArray *metadatas, tableMetadata *metadataFolder, NSString *message, NSInteger errorCode) {
+        if ([delegate respondsToSelector:@selector(readFolderSuccessFailureWithAccount:serverUrl:metadataFolder:metadatas:selector:message:errorCode:)])
+            [delegate readFolderSuccessFailureWithAccount:account serverUrl:serverUrl metadataFolder:metadataFolder metadatas:metadatas selector:selector message:message errorCode:errorCode];
+    }];
+}
+
 - (void)readFolderWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl depth:(NSString *)depth completion:(void(^)(NSString *account, NSArray *metadatas, tableMetadata *metadataFolder, NSString *message, NSInteger errorCode))completion
 {
     tableAccount *tableAccount = [[NCManageDatabase sharedInstance] getAccountWithPredicate:[NSPredicate predicateWithFormat:@"account == %@", account]];

+ 109 - 111
iOSClient/Synchronize/CCSynchronize.m

@@ -26,7 +26,7 @@
 #import "CCMain.h"
 #import "NCBridgeSwift.h"
 
-@interface CCSynchronize () 
+@interface CCSynchronize () <OCNetworkingDelegate>
 {
     AppDelegate *appDelegate;
 }
@@ -60,142 +60,141 @@
 
 - (void)readFolder:(NSString *)serverUrl selector:(NSString *)selector
 {
-    [[OCNetworking sharedManager] readFolderWithAccount:appDelegate.activeAccount serverUrl:serverUrl depth:@"1" completion:^(NSString *account, NSArray *metadatas, tableMetadata *metadataFolder, NSString *message, NSInteger errorCode) {
+    [[OCNetworking sharedManager] readFolderWithAccount:appDelegate.activeAccount serverUrl:serverUrl selector:selector depth:@"1" delegate:self];
+}
+
+- (void)readFolderSuccessFailureWithAccount:(NSString *)account serverUrl:(NSString *)serverUrl metadataFolder:(tableMetadata *)metadataFolder metadatas:(NSArray *)metadatas selector:(NSString *)selector message:(NSString *)message errorCode:(NSInteger)errorCode
+{
+    // ERROR
+    if (errorCode != 0 || ![account isEqualToString:appDelegate.activeAccount]) {
         
-        if (errorCode == 0 && [account isEqualToString:appDelegate.activeAccount]) {
+        // Folder not present, remove it
+        if (errorCode == kOCErrorServerPathNotFound) {
             
-            tableAccount *tableAccount = [[NCManageDatabase sharedInstance] getAccountWithPredicate:[NSPredicate predicateWithFormat:@"account == %@", account]];
-            if (tableAccount == nil) {
-                return;
-            }
+            [[NCManageDatabase sharedInstance] deleteDirectoryAndSubDirectoryWithServerUrl:serverUrl account:account];
+            [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:serverUrl fileID:nil action:k_action_NULL];
+        }
+        
+        return;
+    }
+    
+    // Add/update self Folder
+    if (!metadataFolder || !metadatas || [metadatas count] == 0) {
+        if (metadataFolder.serverUrl != nil) {
+            [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadataFolder.serverUrl fileID:nil action:k_action_NULL];
+        }
+        return;
+    }
+    
+    // Add metadata and update etag Directory
+    (void)[[NCManageDatabase sharedInstance] addMetadata:metadataFolder];
+    [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:nil etag:metadataFolder.etag fileID:metadataFolder.fileID encrypted:metadataFolder.e2eEncrypted account:appDelegate.activeAccount];
+    
+    // reload folder ../ *
+    [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadataFolder.serverUrl fileID:nil action:k_action_NULL];
+    
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
+        
+        NSMutableArray *metadatasForVerifyChange = [NSMutableArray new];
+        NSMutableArray *addMetadatas = [NSMutableArray new];
+        
+        NSArray *recordsInSessions = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND session != ''", account, serverUrl] sorted:nil ascending:NO];
+        
+        // ----- Test : (DELETE) -----
+        
+        NSMutableArray *metadatasNotPresents = [NSMutableArray new];
+        
+        NSArray *tableMetadatas = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND session == ''", account, serverUrl] sorted:nil ascending:NO];
+        
+        for (tableMetadata *record in tableMetadatas) {
+            
+            BOOL fileIDFound = NO;
             
-            // Add/update self Folder
-            if (!metadataFolder || !metadatas || [metadatas count] == 0) {
-                if (metadataFolder.serverUrl != nil) {
-                    [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadataFolder.serverUrl fileID:nil action:k_action_NULL];
+            for (tableMetadata *metadata in metadatas) {
+                
+                if ([record.fileID isEqualToString:metadata.fileID]) {
+                    fileIDFound = YES;
+                    break;
                 }
-                return;
             }
             
-            // Add metadata and update etag Directory
-            (void)[[NCManageDatabase sharedInstance] addMetadata:metadataFolder];
-            [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:nil etag:metadataFolder.etag fileID:metadataFolder.fileID encrypted:metadataFolder.e2eEncrypted account:account];
+            if (!fileIDFound)
+                [metadatasNotPresents addObject:record];
+        }
+        
+        // delete metadata not present
+        for (tableMetadata *metadata in metadatasNotPresents) {
             
-            // reload folder ../ *
-            [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadataFolder.serverUrl fileID:nil action:k_action_NULL];
+            [[NSFileManager defaultManager] removeItemAtPath:[CCUtility getDirectoryProviderStorageFileID:metadata.fileID] error:nil];
             
-            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
+            if (metadata.directory && serverUrl) {
+                
+                NSString *dirForDelete = [CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName];
                 
-                NSMutableArray *metadatasForVerifyChange = [NSMutableArray new];
-                NSMutableArray *addMetadatas = [NSMutableArray new];
+                [[NCManageDatabase sharedInstance] deleteDirectoryAndSubDirectoryWithServerUrl:dirForDelete account:metadata.account];
+            }
+            
+            [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
+            [[NCManageDatabase sharedInstance] deleteLocalFileWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
+        }
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            if ([metadatasNotPresents count] > 0)
+                [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:serverUrl fileID:nil action:k_action_NULL];
+        });
+        
+        // ----- Test : (MODIFY) -----
+        
+        for (tableMetadata *metadata in metadatas) {
+            
+            // RECURSIVE DIRECTORY MODE
+            if (metadata.directory) {
                 
-                NSArray *recordsInSessions = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND session != ''", account, serverUrl] sorted:nil ascending:NO];
+                // Verify if do not exists this Metadata
+                tableMetadata *result = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
                 
-                // ----- Test : (DELETE) -----
+                if (!result)
+                    (void)[[NCManageDatabase sharedInstance] addMetadata:metadata];
                 
-                NSMutableArray *metadatasNotPresents = [NSMutableArray new];
+                [self readFolder:[CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName] selector:selector];
                 
-                NSArray *tableMetadatas = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND session == ''", account, serverUrl] sorted:nil ascending:NO];
+            } else {
                 
-                for (tableMetadata *record in tableMetadatas) {
+                if ([selector isEqualToString:selectorReadFolderWithDownload]) {
                     
-                    BOOL fileIDFound = NO;
-                    
-                    for (tableMetadata *metadata in metadatas) {
-                        
+                    // It's in session
+                    BOOL recordInSession = NO;
+                    for (tableMetadata *record in recordsInSessions) {
                         if ([record.fileID isEqualToString:metadata.fileID]) {
-                            fileIDFound = YES;
+                            recordInSession = YES;
                             break;
                         }
                     }
                     
-                    if (!fileIDFound)
-                        [metadatasNotPresents addObject:record];
-                }
-                
-                // delete metadata not present
-                for (tableMetadata *metadata in metadatasNotPresents) {
-                    
-                    [[NSFileManager defaultManager] removeItemAtPath:[CCUtility getDirectoryProviderStorageFileID:metadata.fileID] error:nil];
+                    if (recordInSession)
+                        continue;
                     
-                    if (metadata.directory && serverUrl) {
-                        
-                        NSString *dirForDelete = [CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName];
-                        
-                        [[NCManageDatabase sharedInstance] deleteDirectoryAndSubDirectoryWithServerUrl:dirForDelete account:metadata.account];
-                    }
-                    
-                    [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
-                    [[NCManageDatabase sharedInstance] deleteLocalFileWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
+                    // Ohhhh INSERT
+                    [metadatasForVerifyChange addObject:metadata];
                 }
                 
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    if ([metadatasNotPresents count] > 0)
-                        [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:serverUrl fileID:nil action:k_action_NULL];
-                });
-                
-                // ----- Test : (MODIFY) -----
-                
-                for (tableMetadata *metadata in metadatas) {
+                if ([selector isEqualToString:selectorReadFolder]) {
                     
-                    // RECURSIVE DIRECTORY MODE
-                    if (metadata.directory) {
-                        
-                        // Verify if do not exists this Metadata
-                        tableMetadata *result = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
-                        
-                        if (!result)
-                            (void)[[NCManageDatabase sharedInstance] addMetadata:metadata];
-                        
-                        [self readFolder:[CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName] selector:selector];
-                        
-                    } else {
-                        
-                        if ([selector isEqualToString:selectorReadFolderWithDownload]) {
-                            
-                            // It's in session
-                            BOOL recordInSession = NO;
-                            for (tableMetadata *record in recordsInSessions) {
-                                if ([record.fileID isEqualToString:metadata.fileID]) {
-                                    recordInSession = YES;
-                                    break;
-                                }
-                            }
-                            
-                            if (recordInSession)
-                                continue;
-                            
-                            // Ohhhh INSERT
-                            [metadatasForVerifyChange addObject:metadata];
-                        }
-                        
-                        if ([selector isEqualToString:selectorReadFolder]) {
-                            
-                            // Verify if do not exists this Metadata
-                            tableMetadata *result = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
-                            
-                            if (!result)
-                                [addMetadatas addObject:metadata];
-                        }
-                    }
+                    // Verify if do not exists this Metadata
+                    tableMetadata *result = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID == %@", metadata.fileID]];
+                    
+                    if (!result)
+                        [addMetadatas addObject:metadata];
                 }
-                
-                if ([addMetadatas count] > 0)
-                    (void)[[NCManageDatabase sharedInstance] addMetadatas:addMetadatas];
-                
-                if ([metadatasForVerifyChange count] > 0)
-                    [self verifyChangeMedatas:metadatasForVerifyChange serverUrl:serverUrl account:account withDownload:YES];
-            });
-            
-        } else {
-        
-            // Folder not present, remove it
-            if (errorCode == kOCErrorServerPathNotFound) {
-                [[NCManageDatabase sharedInstance] deleteDirectoryAndSubDirectoryWithServerUrl:serverUrl account:account];
-                [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:serverUrl fileID:nil action:k_action_NULL];
             }
         }
-    }];
+        
+        if ([addMetadatas count] > 0)
+            (void)[[NCManageDatabase sharedInstance] addMetadatas:addMetadatas];
+        
+        if ([metadatasForVerifyChange count] > 0)
+            [self verifyChangeMedatas:metadatasForVerifyChange serverUrl:serverUrl account:account withDownload:YES];
+    });
 }
 
 #pragma --------------------------------------------------------------------------------------------
@@ -306,7 +305,6 @@
     }
     
     (void)[[NCManageDatabase sharedInstance] addMetadatas:metadataToAdd];
-    [appDelegate performSelectorOnMainThread:@selector(loadAutoDownloadUpload) withObject:nil waitUntilDone:YES];
     
     for (NSString *serverUrl in serverUrlToReload) {
         [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:serverUrl fileID:nil action:k_action_NULL];