Browse Source

change database

Marino Faggiana 7 years ago
parent
commit
a47fd93b65

+ 1 - 1
iOSClient/Database/NCDatabase.swift

@@ -103,6 +103,7 @@ class tableDirectory: Object {
     @objc dynamic var favorite: Bool = false
     @objc dynamic var fileID = ""
     @objc dynamic var lock: Bool = false
+    @objc dynamic var tokenLock = ""
     @objc dynamic var permissions = ""
     @objc dynamic var serverUrl = ""
     
@@ -121,7 +122,6 @@ class tableE2eEncryption: Object {
     @objc dynamic var initializationVector = ""
     @objc dynamic var mimeType = ""
     @objc dynamic var serverUrl = ""
-    @objc dynamic var tokenLock = ""
     @objc dynamic var version: Int = 0
     
     override static func primaryKey() -> String {

+ 40 - 41
iOSClient/Database/NCManageDatabase.swift

@@ -61,7 +61,7 @@ class NCManageDatabase: NSObject {
             
             // 10 : Version 2.18.0
             // 11 : Add object tableE2eEncryption
-            // 12 : Change primary key of tableE2eEncryption for fileNameIdentifier and remove filed metadataKey
+            // 12 : Change primary key of tableE2eEncryption for fileNameIdentifier, remove filed metadataKey, add tokenLock on Table Directory
             
             migrationBlock: { migration, oldSchemaVersion in
                 // We haven’t migrated anything yet, so oldSchemaVersion == 0
@@ -896,6 +896,21 @@ class NCManageDatabase: NSObject {
         return result.serverUrl
     }
     
+    @objc func getDirectoryTokenLock(serverUrl: String) -> String? {
+        
+        guard let tableAccount = self.getAccountActive() else {
+            return nil
+        }
+        
+        let realm = try! Realm()
+        
+        guard let result = realm.objects(tableDirectory.self).filter("account = %@ AND serverUrl = %@ AND tokenLock != ''", tableAccount.account, serverUrl).first else {
+            return nil
+        }
+        
+        return result.tokenLock
+    }
+    
     @objc func setDateReadDirectory(directoryID: String) {
         
         guard let tableAccount = self.getAccountActive() else {
@@ -994,6 +1009,30 @@ class NCManageDatabase: NSObject {
         }
     }
 
+    @objc func setDirectoryTokenLock(serverUrl: String, token: String) {
+        
+        guard let tableAccount = self.getAccountActive() else {
+            return
+        }
+        
+        let realm = try! Realm()
+        
+        realm.beginWrite()
+        
+        guard let result = realm.objects(tableDirectory.self).filter("account = %@ AND serverUrl = %@", tableAccount.account, serverUrl).first else {
+            realm.cancelWrite()
+            return
+        }
+        
+        result.tokenLock = token
+        
+        do {
+            try realm.commitWrite()
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+            return
+        }
+    }
     //MARK: -
     //MARK: Table e2e Encryption
     
@@ -1070,46 +1109,6 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    @objc func getE2eEncryptionTokenLock(serverUrl: String) -> String? {
-        
-        guard let tableAccount = self.getAccountActive() else {
-            return nil
-        }
-        
-        let realm = try! Realm()
-        
-        guard let result = realm.objects(tableE2eEncryption.self).filter("account = %@ AND serverUrl = %@ AND tokenLock != ''", tableAccount.account, serverUrl).first else {
-            return nil
-        }
-        
-        return result.tokenLock
-    }
-    
-    @objc func setE2eEncryptionTokenLock(fileName: String, serverUrl: String, token: String) {
-        
-        guard let tableAccount = self.getAccountActive() else {
-            return
-        }
-        
-        let realm = try! Realm()
-        
-        realm.beginWrite()
-        
-        guard let result = realm.objects(tableE2eEncryption.self).filter("account = %@ AND fileName = %@ AND serverUrl = %@", tableAccount.account, fileName, serverUrl).first else {
-            realm.cancelWrite()
-            return
-        }
-        
-        result.tokenLock = token
-        
-        do {
-            try realm.commitWrite()
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-            return
-        }
-    }
-    
     //MARK: -
     //MARK: Table External Sites
     

+ 8 - 5
iOSClient/Networking/CCNetworking.m

@@ -557,14 +557,17 @@
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
         
         if ([CCUtility isFolderEncrypted:serverUrl account:_activeAccount]) {
-
-            NSString *tokenLock = [[NCManageDatabase sharedInstance] getE2eEncryptionTokenLockWithServerUrl:serverUrl];
-            tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", _activeAccount, serverUrl]];
             
-            NSError *error = [[NCNetworkingSync sharedManager] lockEndToEndFolderEncrypted:_activeUser userID:_activeUserID password:_activePassword url:_activeUrl fileID:directory.fileID token:&tokenLock];
+            NSString *tokenLock = [[NCManageDatabase sharedInstance] getDirectoryTokenLockWithServerUrl:serverUrl];
+            NSError *error;
+            
+            if (tokenLock.length == 0) {
+                tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", _activeAccount, serverUrl]];
+                error = [[NCNetworkingSync sharedManager] lockEndToEndFolderEncrypted:_activeUser userID:_activeUserID password:_activePassword url:_activeUrl fileID:directory.fileID token:&tokenLock];
+            }
             
             if (error == nil && tokenLock != nil) {
-                [[NCManageDatabase sharedInstance] setE2eEncryptionTokenLockWithFileName:metadata.fileName serverUrl:serverUrl token:tokenLock];
+                [[NCManageDatabase sharedInstance] setDirectoryTokenLockWithServerUrl:serverUrl token:tokenLock];
             } else {
                 dispatch_async(dispatch_get_main_queue(), ^{
                     if ([[self getDelegate:fileID] respondsToSelector:@selector(downloadFileFailure:serverUrl:selector:message:errorCode:)])