Browse Source

Improved Synchronized Function

Marino Faggiana 7 years ago
parent
commit
e609e7e0c0

+ 7 - 2
iOSClient/AppDelegate.m

@@ -324,8 +324,13 @@
     // Execute : now
     NSLog(@"[LOG] Update Folder Photo");
     NSString *autoUploadPath = [[NCManageDatabase sharedInstance] getAccountAutoUploadPath:_activeUrl];
-    if ([autoUploadPath length] > 0)
-        [[CCSynchronize sharedSynchronize] synchronizedFolder:autoUploadPath selector:selectorReadFolder];
+    if ([autoUploadPath length] > 0) {
+        
+        NSString *fileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
+        NSString *serverUrl = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:_activeUrl];
+        
+        [[CCSynchronize sharedSynchronize] synchronizedFile:fileName serverUrl:serverUrl selector:selectorReadFileFolder];        
+    }
     
     // Execute : after 1 sec.
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{

+ 2 - 0
iOSClient/CCGlobal.h

@@ -175,6 +175,8 @@ extern NSString *const urlBaseUploadDB;
 #define selectorReadFileVerifyUpload                    @"readFileVerifyUpload"
 #define selectorReadFileWithDownload                    @"readFileWithDownload"
 #define selectorReadFileReloadFolder                    @"readFileReloadFolder"
+#define selectorReadFileFolder                          @"readFileFolder"
+#define selectorReadFileFolderWithDownload              @"readFileFolderWithDownload"
 #define selectorReadFolder                              @"readFolder"
 #define selectorReadFolderForced                        @"readFolderForced"
 #define selectorReadFolderWithDownload                  @"readFolderWithDownload"

+ 1 - 0
iOSClient/Synchronize/CCSynchronize.h

@@ -37,6 +37,7 @@
 @property (nonatomic, strong) NSMutableOrderedSet *foldersInSynchronized;
 
 - (void)synchronizedFolder:(NSString *)serverUrl selector:(NSString *)selector;
+- (void)synchronizedFile:(NSString *)fileName serverUrl:(NSString *)serverUrl selector:(NSString *)selector;
 - (void)synchronizedFile:(tableMetadata *)metadata selector:(NSString *)selector;
 
 - (void)verifyChangeMedatas:(NSArray *)allRecordMetadatas serverUrl:(NSString *)serverUrl account:(NSString *)account withDownload:(BOOL)withDownload;

+ 54 - 15
iOSClient/Synchronize/CCSynchronize.m

@@ -170,7 +170,7 @@
             if (metadata.cryptated)
                 continue;
             
-            // dir recursive
+            // RECURSIVE DIRECTORY MODE
             if (metadata.directory) {
                 
                 NSString *serverUrl = [CCUtility stringAppendServerUrl:metadataNet.serverUrl addFileName:metadata.fileNameData];
@@ -233,6 +233,20 @@
 #pragma mark ===== Read File =====
 #pragma --------------------------------------------------------------------------------------------
 
+- (void)synchronizedFile:(NSString *)fileName serverUrl:(NSString *)serverUrl selector:(NSString *)selector
+{
+    CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:app.activeAccount];
+    
+    metadataNet.action = actionReadFile;
+    metadataNet.fileID = @"";
+    metadataNet.fileName = fileName;
+    metadataNet.priority = NSOperationQueuePriorityLow;
+    metadataNet.selector = selector;
+    metadataNet.serverUrl = serverUrl;
+    
+    [app addNetworkingOperationQueue:app.netQueue delegate:self metadataNet:metadataNet];
+}
+
 - (void)synchronizedFile:(tableMetadata *)metadata selector:(NSString *)selector
 {
     NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:metadata.directoryID];
@@ -256,15 +270,19 @@
     // verify active user
     tableAccount *recordAccount = [[NCManageDatabase sharedInstance] getAccountActive];
     
-    // File not present, remove it
-    if (errorCode == 404 && [recordAccount.account isEqualToString:metadataNet.account]) {
+    // Selector : selectorReadFile, selectorReadFileWithDownload
+    if ([metadataNet.selector isEqualToString:selectorReadFile] || [metadataNet.selector isEqualToString:selectorReadFileWithDownload]) {
         
-        [[NCManageDatabase sharedInstance] deleteLocalFileWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadataNet.fileID]];
-        [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadataNet.account, metadataNet.fileID] clearDateReadDirectoryID:nil];
+        // File not present, remove it
+        if (errorCode == 404 && [recordAccount.account isEqualToString:metadataNet.account]) {
         
-        NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:metadataNet.directoryID];
-        if (serverUrl)
-            [app.activeMain reloadDatasource:serverUrl];
+            [[NCManageDatabase sharedInstance] deleteLocalFileWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadataNet.fileID]];
+            [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadataNet.account, metadataNet.fileID] clearDateReadDirectoryID:nil];
+        
+            NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:metadataNet.directoryID];
+            if (serverUrl)
+                [app.activeMain reloadDatasource:serverUrl];
+        }
     }
 }
 
@@ -272,16 +290,37 @@
 {
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
         
-        BOOL withDownload = NO;
+        // Selector : selectorReadFile, selectorReadFileWithDownload
+        if ([metadataNet.selector isEqualToString:selectorReadFile] || [metadataNet.selector isEqualToString:selectorReadFileWithDownload]) {
+        
+            BOOL withDownload = NO;
         
-        if ([metadataNet.selector isEqualToString:selectorReadFileWithDownload])
-            withDownload = YES;
+            if ([metadataNet.selector isEqualToString:selectorReadFileWithDownload])
+                withDownload = YES;
         
-        //Add/Update Metadata
-        tableMetadata *addMetadata = [[NCManageDatabase sharedInstance] addMetadata:metadata];
+            //Add/Update Metadata
+            tableMetadata *addMetadata = [[NCManageDatabase sharedInstance] addMetadata:metadata];
         
-        if (addMetadata)
-            [self verifyChangeMedatas:[[NSArray alloc] initWithObjects:addMetadata, nil] serverUrl:metadataNet.serverUrl account:app.activeAccount withDownload:withDownload];
+            if (addMetadata)
+                [self verifyChangeMedatas:[[NSArray alloc] initWithObjects:addMetadata, nil] serverUrl:metadataNet.serverUrl account:app.activeAccount withDownload:withDownload];
+        }
+        
+        // Selector : selectorReadFileReloadFolder, selectorReadFileFolderWithDownload
+        if ([metadataNet.selector isEqualToString:selectorReadFileFolder] || [metadataNet.selector isEqualToString:selectorReadFileFolderWithDownload]) {
+            
+            tableDirectory *tableDirectory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND directoryID = %@", metadataNet.account, metadata.directoryID]];
+            
+            // Verify changed etag
+            if (![tableDirectory.etag isEqualToString:metadata.etag] && tableDirectory) {
+                
+                NSString *serverUrl = [CCUtility stringAppendServerUrl:metadataNet.serverUrl addFileName:metadataNet.fileName];
+                
+                if ([metadataNet.selector isEqualToString:selectorReadFileFolder])
+                    [self synchronizedFolder:serverUrl selector:selectorReadFolder];
+                if ([metadataNet.selector isEqualToString:selectorReadFileFolderWithDownload])
+                    [self synchronizedFolder:serverUrl selector:selectorReadFolderWithDownload];
+            }
+        }
     });
 }