Browse Source

Fix readFileSuccess on Synchronize

Marino Faggiana 7 years ago
parent
commit
d77f0fd7e8
2 changed files with 50 additions and 17 deletions
  1. 33 0
      iOSClient/Database/NCManageDatabase.swift
  2. 17 17
      iOSClient/Synchronize/CCSynchronize.m

+ 33 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -602,6 +602,39 @@ class NCManageDatabase: NSObject {
         return result.versionMajor
     }
 
+    func compareServerVersion(_ versionCompare: String) -> Int {
+        
+        guard let tableAccount = self.getAccountActive() else {
+            return 0
+        }
+        
+        let realm = try! Realm()
+        
+        guard let capabilities = realm.objects(tableCapabilities.self).filter("account = %@", tableAccount.account).first else {
+            return -1
+        }
+        
+        let versionServer = capabilities.versionString
+        
+        var v1 = versionServer.characters.split(separator:".").map { Int(String($0)) }
+        var v2 = versionCompare.characters.split(separator:".").map { Int(String($0)) }
+        
+        var result = 0
+        for i in 0..<max(v1.count,v2.count) {
+            let left = i >= v1.count ? 0 : v1[i]
+            let right = i >= v2.count ? 0 : v2[i]
+            
+            if (left == right) {
+                result = 0
+            } else if left! > right! {
+                return 1
+            } else if right! > left! {
+                return -1
+            }
+        }
+        return result
+    }
+    
     //MARK: -
     //MARK: Table Certificates
     

+ 17 - 17
iOSClient/Synchronize/CCSynchronize.m

@@ -67,7 +67,7 @@
     NSString *directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:serverUrl];
     if (!directoryID) return;
     
-    metadataNet.depth = @"1";
+        metadataNet.depth = @"1";
     metadataNet.directoryID = directoryID;
     metadataNet.priority = NSOperationQueuePriorityLow;
     metadataNet.selector = selector;
@@ -173,25 +173,25 @@
             // RECURSIVE DIRECTORY MODE
             if (metadata.directory) {
                 
-                NSString *serverUrl = [CCUtility stringAppendServerUrl:metadataNet.serverUrl addFileName:metadata.fileNameData];
-                NSString *etag = metadata.etag;
+                    NSString *serverUrl = [CCUtility stringAppendServerUrl:metadataNet.serverUrl addFileName:metadata.fileNameData];
+                    NSString *etag = metadata.etag;
                 
-                // Verify if do not exists this Metadata
-                tableMetadata *result = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadata.fileID]];
+                    // Verify if do not exists this Metadata
+                    tableMetadata *result = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadata.fileID]];
 
-                if (!result)
-                    (void)[[NCManageDatabase sharedInstance] addMetadata:metadata];
+                    if (!result)
+                        (void)[[NCManageDatabase sharedInstance] addMetadata:metadata];
               
-                // Load if different etag
-                tableDirectory *tableDirectory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", metadataNet.account, serverUrl]];
+                    // Load if different etag
+                    tableDirectory *tableDirectory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", metadataNet.account, serverUrl]];
                 
                 if (![tableDirectory.etag isEqualToString:etag] || [metadataNet.selector isEqualToString:selectorReadFolderWithDownload]) {
                                         
-                    [self synchronizedFolder:serverUrl selector:metadataNet.selector];
-                }
+                        [self synchronizedFolder:serverUrl selector:metadataNet.selector];
+                    }
+                    
+                } else {
                 
-            } else {
-            
                 if ([metadataNet.selector isEqualToString:selectorReadFolderWithDownload]) {
                     
                     // It's in session
@@ -300,7 +300,7 @@
         
             //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];
         }
@@ -308,13 +308,13 @@
         // 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]];
+            NSString *serverUrl = [CCUtility stringAppendServerUrl:metadataNet.serverUrl addFileName:metadataNet.fileName];
+            
+            tableDirectory *tableDirectory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", metadataNet.account, serverUrl]];
             
             // 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])