Browse Source

add/change primary key for metadata & media

marinofaggiana 5 years ago
parent
commit
628a80679b

+ 1 - 1
iOSClient/CCGlobal.h

@@ -82,7 +82,7 @@
 
 // Database Realm
 #define k_databaseDefault                               @"nextcloud.realm"
-#define k_databaseSchemaVersion                         52
+#define k_databaseSchemaVersion                         54
 
 // Intro selector
 #define k_intro_login                                   0

+ 4 - 2
iOSClient/Database/NCDatabase.swift

@@ -312,6 +312,7 @@ class tableMetadata: Object {
     @objc dynamic var hasPreview: Int = -1
     @objc dynamic var iconName = ""
     @objc dynamic var permissions = ""
+    @objc dynamic var primaryKey = ""
     @objc dynamic var serverUrl = ""
     @objc dynamic var session = ""
     @objc dynamic var sessionError = ""
@@ -323,7 +324,7 @@ class tableMetadata: Object {
     @objc dynamic var url = ""
 
     override static func primaryKey() -> String {
-        return "fileID"
+        return "primaryKey"
     }
 }
 
@@ -342,6 +343,7 @@ class tableMedia: Object {
     @objc dynamic var hasPreview: Int = -1
     @objc dynamic var iconName = ""
     @objc dynamic var permissions = ""
+    @objc dynamic var primaryKey = ""
     @objc dynamic var serverUrl = ""
     @objc dynamic var session = ""
     @objc dynamic var sessionError = ""
@@ -353,7 +355,7 @@ class tableMedia: Object {
     @objc dynamic var url = ""
 
     override static func primaryKey() -> String {
-        return "fileID"
+        return "primaryKey"
     }
 }
 

+ 14 - 13
iOSClient/Database/NCManageDatabase.swift

@@ -48,14 +48,14 @@ class NCManageDatabase: NSObject {
                     migration.deleteData(forType: tableDirectory.className())
                 }
                 
-                /*
-                 if oldSchemaVersion < 44 {
-                 migration.enumerateObjects(ofType: tableAccount.className()) { oldObject, newObject in
-                 let account = oldObject!["account"] as! String
-                 let password = oldObject!["password"] as! String
-                 }
-                 }
-                 */
+                if oldSchemaVersion < 64 {
+                    migration.enumerateObjects(ofType: tableMetadata.className()) { oldObject, newObject in
+                        newObject!["primaryKey"] = (oldObject!["account"] as! String) + (oldObject!["fileID"] as! String)
+                    }
+                    migration.enumerateObjects(ofType: tableMedia.className()) { oldObject, newObject in
+                        newObject!["primaryKey"] = (oldObject!["account"] as! String) + (oldObject!["fileID"] as! String)
+                    }
+                }
                 
             }, shouldCompactOnLaunch: { totalBytes, usedBytes in
                 
@@ -1607,6 +1607,9 @@ class NCManageDatabase: NSObject {
             return nil
         }
         
+        // create primaryKey
+        metadata.primaryKey = metadata.account + metadata.fileID
+        
         let serverUrl = metadata.serverUrl
         let account = metadata.account
         
@@ -1639,6 +1642,9 @@ class NCManageDatabase: NSObject {
         do {
             try realm.write {
                 for metadata in metadatas {
+                    // create primaryKey
+                    metadata.primaryKey = metadata.account + metadata.fileID
+                     
                     directoryToClearDate[metadata.serverUrl] = metadata.account
                     realm.add(metadata, update: true)
                 }
@@ -1689,9 +1695,7 @@ class NCManageDatabase: NSObject {
 
         do {
             try realm.write {
-            
                 let results = realm.objects(tableMetadata.self).filter("fileID == %@", fileID)
-        
                 for result in results {
                     result.serverUrl = serverUrlTo
                 }
@@ -1708,9 +1712,7 @@ class NCManageDatabase: NSObject {
         
         do {
             try realm.write {
-                
                 let results = realm.objects(tableMetadata.self).filter("fileID == %@", fileID)
-                
                 for result in results {
                     result.serverUrl = serverUrl
                 }
@@ -1728,7 +1730,6 @@ class NCManageDatabase: NSObject {
         
         do {
             try realm.write {
-                
                 result = realm.objects(tableMetadata.self).filter("fileID == %@", fileID).first
                 if result != nil {
                     result!.fileName = fileNameTo