marinofaggiana 4 years ago
parent
commit
7bef199d8c
1 changed files with 23 additions and 19 deletions
  1. 23 19
      iOSClient/Database/NCManageDatabase.swift

+ 23 - 19
iOSClient/Database/NCManageDatabase.swift

@@ -1837,14 +1837,11 @@ class NCManageDatabase: NSObject {
     @discardableResult
     @objc func addMetadatas(_ metadatas: [tableMetadata]) -> [tableMetadata]? {
         
-        var directoryToClearDate: [String: String] = [:]
-
         let realm = try! Realm()
 
         do {
             try realm.write {
                 for metadata in metadatas {
-                    directoryToClearDate[metadata.serverUrl] = metadata.account
                     realm.add(metadata, update: .all)
                 }
             }
@@ -1856,7 +1853,7 @@ class NCManageDatabase: NSObject {
         
         return Array(metadatas.map { tableMetadata.init(value:$0) })
     }
-
+    
     @objc func addMetadatas(files: [NCCommunicationFile]?, account: String) {
     
         guard let files = files else { return }
@@ -1915,19 +1912,12 @@ class NCManageDatabase: NSObject {
     }
     
     @objc func deleteMetadata(predicate: NSPredicate) {
-        
-        var directoryToClearDate: [String: String] = [:]
-        
+                
         let realm = try! Realm()
 
         realm.beginWrite()
 
         let results = realm.objects(tableMetadata.self).filter(predicate)
-        
-        for result in results {
-            directoryToClearDate[result.serverUrl] = result.account
-        }
-        
         realm.delete(results)
         
         do {
@@ -2005,21 +1995,35 @@ class NCManageDatabase: NSObject {
         
         return tableMetadata.init(value: result!)
     }
-    
-    @objc func updateMetadata(_ metadata: tableMetadata) -> tableMetadata? {
+
+    @objc func updateMetadatasServerUrl(_ serverUrl: String, account: String, metadatas: [tableMetadata]) {
         
         let realm = try! Realm()
-
+        
         do {
             try realm.write {
-                realm.add(metadata, update: .all)
+                let results = realm.objects(tableMetadata.self).filter("account == %@ AND serverUrl == %@", account, serverUrl)
+                // DELETE
+                for result in results {
+                    let values = metadatas.filter { $0.ocId == result.ocId }
+                    if values.count == 0 {
+                        realm.delete(result)
+                    }
+                }
+                // UPDATE/INSERT
+                for metadata in metadatas {
+                    let values = results.filter { $0.ocId == metadata.ocId }
+                    if values.count == 1 && values[0].status == k_metadataStatusNormal {
+                        realm.add(metadata, update: .all)
+                    } else if values.count == 0 {
+                        realm.add(metadata, update: .all)
+                    }
+                }
             }
         } catch let error {
             print("[LOG] Could not write to database: ", error)
-            return nil
+            return
         }
-                
-        return tableMetadata.init(value: metadata)
     }
     
     func setMetadataSession(ocId: String, session: String? = nil, sessionError: String? = nil, sessionSelector: String? = nil, sessionTaskIdentifier: Int? = nil, status: Int? = nil, etag: String? = nil, setFavorite: Bool = false) {