Selaa lähdekoodia

sync if different etag folder

Marino Faggiana 8 vuotta sitten
vanhempi
commit
fbd581a70a

+ 1 - 1
Picker/DocumentPickerViewController.swift

@@ -272,7 +272,7 @@ class DocumentPickerViewController: UIDocumentPickerExtensionViewController, CCN
         self.present(alert, animated: true, completion: nil)
     }
     
-    func readFolderSuccess(_ metadataNet: CCMetadataNet!, permissions: String!, metadatas: [Any]!) {
+    func readFolderSuccess(_ metadataNet: CCMetadataNet!, permissions: String!, etag: String!, metadatas: [Any]!) {
         
         // remove all record
         let predicate = NSPredicate(format: "(account == '\(activeAccount!)') AND (directoryID == '\(metadataNet.directoryID!)') AND ((session == NULL) OR (session == ''))")

+ 1 - 1
iOSClient/FileSystem/CCCoreData.h

@@ -130,7 +130,7 @@
 // ===== Directory =====
 
 + (NSString *)addDirectory:(NSString *)serverUrl permissions:(NSString *)permissions activeAccount:(NSString *)activeAccount;
-+ (void)updateDirectoryRevServerUrl:(NSString *)serverUrl rev:(NSString *)rev activeAccount:(NSString *)activeAccount;
++ (void)updateDirectoryEtagServerUrl:(NSString *)serverUrl etag:(NSString *)etag activeAccount:(NSString *)activeAccount;
 + (void)deleteDirectoryFromPredicate:(NSPredicate *)predicate;
 + (NSArray *)deleteDirectoryAndSubDirectory:(NSString *)serverUrl activeAccount:(NSString *)activeAccount;
 + (void)renameDirectory:(NSString *)serverUrl serverUrlTo:(NSString *)serverUrlTo activeAccount:(NSString *)activeAccount;

+ 2 - 2
iOSClient/FileSystem/CCCoreData.m

@@ -894,7 +894,7 @@
     return directoryID;
 }
 
-+ (void)updateDirectoryRevServerUrl:(NSString *)serverUrl rev:(NSString *)rev activeAccount:(NSString *)activeAccount
++ (void)updateDirectoryEtagServerUrl:(NSString *)serverUrl etag:(NSString *)etag activeAccount:(NSString *)activeAccount
 {
     [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) {
         
@@ -902,7 +902,7 @@
         TableDirectory *record = [TableDirectory MR_findFirstWithPredicate:predicate inContext:localContext];
         
         if (record)
-            record.rev = rev;
+            record.rev = etag;
     }];
 }
 

+ 8 - 6
iOSClient/Main/CCMain.m

@@ -1717,7 +1717,7 @@
         [self changePasswordAccount];
 }
 
-- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions metadatas:(NSArray *)metadatas
+- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions etag:(NSString *)etag metadatas:(NSArray *)metadatas
 {
     // verify active user
     TableAccount *record = [CCCoreData getActiveAccount];
@@ -1733,13 +1733,15 @@
     
     if (_isSearchMode) {
         
-        recordsInSessions = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (session != NULL) AND (session != '')", app.activeAccount] context:nil];
+        recordsInSessions = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (session != NULL) AND (session != '')", metadataNet.account] context:nil];
         
     } else {
         
-        [CCCoreData deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND ((session == NULL) OR (session == ''))", app.activeAccount, metadataNet.directoryID]];
+        [CCCoreData updateDirectoryEtagServerUrl:metadataNet.serverUrl etag:etag activeAccount:metadataNet.account];
+        
+        [CCCoreData deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND ((session == NULL) OR (session == ''))", metadataNet.account, metadataNet.directoryID]];
     
-        recordsInSessions = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (session != NULL) AND (session != '')", app.activeAccount, metadataNet.directoryID] context:nil];
+        recordsInSessions = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (session != NULL) AND (session != '')", metadataNet.account, metadataNet.directoryID] context:nil];
 
         [CCCoreData setDateReadDirectoryID:metadataNet.directoryID activeAccount:app.activeAccount];
     }
@@ -1748,7 +1750,7 @@
         
         // Delete Record only in Search Mode
         if (_isSearchMode)
-            [CCCoreData deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (fileID = %@) AND ((session == NULL) OR (session == ''))", app.activeAccount, metadata.directoryID, metadata.fileID]];
+            [CCCoreData deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (fileID = %@) AND ((session == NULL) OR (session == ''))", metadataNet.account, metadata.directoryID, metadata.fileID]];
         
         // type of file
         NSInteger typeFilename = [CCUtility getTypeFileName:metadata.fileName];
@@ -1938,7 +1940,7 @@
 {
     _searchResultMetadatas = [[NSArray alloc] initWithArray:metadatas];
     
-    [self readFolderSuccess:metadataNet permissions:nil metadatas:metadatas];
+    [self readFolderSuccess:metadataNet permissions:nil etag:nil metadatas:metadatas];
 }
 
 - (void)cancelSearchBar

+ 1 - 1
iOSClient/Move/CCMove.m

@@ -270,7 +270,7 @@
     [self presentViewController:alertController animated:YES completion:nil];
 }
 
-- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions metadatas:(NSArray *)metadatas
+- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions etag:(NSString *)etag metadatas:(NSArray *)metadatas
 {
     // remove all record
     [CCCoreData deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND ((session == NULL) OR (session == ''))", activeAccount, metadataNet.directoryID]];

+ 1 - 1
iOSClient/Networking/OCNetworking.h

@@ -63,7 +63,7 @@
 - (void)uploadFileSuccess:(CCMetadataNet *)metadataNet fileID:(NSString *)fileID serverUrl:(NSString *)serverUrl selector:(NSString *)selector selectorPost:(NSString *)selectorPost;
 - (void)uploadFileFailure:(CCMetadataNet *)metadataNet fileID:(NSString *)fileID serverUrl:(NSString *)serverUrl selector:(NSString *)selector message:(NSString *)message errorCode:(NSInteger)errorCode;
 
-- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions metadatas:(NSArray *)metadatas;
+- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions etag:(NSString *)etag metadatas:(NSArray *)metadatas;
 - (void)readFolderFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode;
 
 - (void)createFolderSuccess:(CCMetadataNet *)metadataNet;

+ 5 - 4
iOSClient/Networking/OCNetworking.m

@@ -312,8 +312,8 @@
 
             dispatch_async(dispatch_get_main_queue(), ^{
                 
-                if ([self.delegate respondsToSelector:@selector(readFolderSuccess:permissions:metadatas:)])
-                    [self.delegate readFolderSuccess:_metadataNet permissions:@"" metadatas:metadatas];
+                if ([self.delegate respondsToSelector:@selector(readFolderSuccess:permissions:etag:metadatas:)])
+                    [self.delegate readFolderSuccess:_metadataNet permissions:@"" etag:@"" metadatas:metadatas];
             });
 
             [self complete];
@@ -324,6 +324,7 @@
         // directory [0]
         OCFileDto *itemDtoDirectory = [items objectAtIndex:0];
         NSString *permissions = itemDtoDirectory.permissions;
+        NSString *etagDirectory = itemDtoDirectory.etag;
         //NSDate *date = [NSDate dateWithTimeIntervalSince1970:itemDtoDirectory.date];
         
         NSString *directoryID = [CCCoreData addDirectory:_metadataNet.serverUrl permissions:permissions activeAccount:_metadataNet.account];
@@ -388,8 +389,8 @@
             
             dispatch_async(dispatch_get_main_queue(), ^{
                 
-                if ([_metadataNet.selector containsString:selectorReadFolder] && [self.delegate respondsToSelector:@selector(readFolderSuccess:permissions:metadatas:)])
-                    [self.delegate readFolderSuccess:_metadataNet permissions:permissions metadatas:metadatas];
+                if ([_metadataNet.selector containsString:selectorReadFolder] && [self.delegate respondsToSelector:@selector(readFolderSuccess:permissions:etag:metadatas:)])
+                    [self.delegate readFolderSuccess:_metadataNet permissions:permissions etag:etagDirectory metadatas:metadatas];
 
                 if ([_metadataNet.selector isEqualToString:selectorSearch] && [self.delegate respondsToSelector:@selector(searchSuccess:metadatas:)])
                     [self.delegate searchSuccess:_metadataNet metadatas:metadatas];

+ 9 - 4
iOSClient/Offline/CCSynchronize.m

@@ -246,7 +246,7 @@
 }
 
 // MULTI THREAD
-- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions metadatas:(NSArray *)metadatas
+- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions etag:(NSString *)etag metadatas:(NSArray *)metadatas
 {
     TableAccount *recordAccount = [CCCoreData getActiveAccount];
     
@@ -314,10 +314,15 @@
                     });
                 }
               
+                // Load if different etag
+                
                 TableDirectory *tableDirectory = [CCCoreData getTableDirectoryWithPreficate:[NSPredicate predicateWithFormat:@"(account == %@) AND (serverUrl == %@)", metadataNet.account, serverUrl]];
-                NSLog(@"%@", tableDirectory.rev);
-            
-                [self readFolderServerUrl:serverUrl directoryID:directoryID selector:metadataNet.selector];
+                
+                if (![tableDirectory.rev isEqualToString:metadata.rev]) {
+                    
+                    [self readFolderServerUrl:serverUrl directoryID:directoryID selector:metadataNet.selector];
+                    [CCCoreData updateDirectoryEtagServerUrl:serverUrl etag:metadata.rev activeAccount:metadataNet.account];
+                }
                 
             } else {