marinofaggiana 4 years ago
parent
commit
7bc92b05a9

+ 2 - 2
File Provider Extension/FileProviderEnumerator.swift

@@ -222,8 +222,8 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
             if errorCode == 0 {
                 DispatchQueue.global().async {
                     NCManageDatabase.sharedInstance.convertNCCommunicationFilesToMetadatas(files, useMetadataFolder: true, account: account) { (metadataFolder, metadatasFolder, metadatas) in
-                        let predicate = NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)
-                        NCManageDatabase.sharedInstance.updateMetadatasWithPredicate(predicate, metadatas: metadatas)
+                        let metadatasResult = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrl, k_metadataStatusNormal))
+                        NCManageDatabase.sharedInstance.updateMetadatas(metadatas, metadatasResult: metadatasResult)
                         for metadata in metadatasFolder {
                             let serverUrl = metadata.serverUrl + "/" + metadata.fileNameView
                             NCManageDatabase.sharedInstance.addDirectory(encrypted: metadata.e2eEncrypted, favorite: metadata.favorite, ocId: metadata.ocId, fileId: metadata.fileId, etag: nil, permissions: metadata.permissions, serverUrl: serverUrl, richWorkspace: metadata.richWorkspace, account: metadata.account)

+ 0 - 52
iOSClient/Database/NCManageDatabase.swift

@@ -1987,58 +1987,6 @@ class NCManageDatabase: NSObject {
         }
     }
 
-    @discardableResult
-    @objc func updateMetadatasWithPredicate(_ predicate: NSPredicate, metadatas: [tableMetadata], withVerifyLocal local: Bool = false) -> [tableMetadata] {
-        
-        let realm = try! Realm()
-        var ocIdsUdated : [String] = []
-        var metadatasUdated : [tableMetadata] = []
-        
-        do {
-            try realm.write {
-                let results = realm.objects(tableMetadata.self).filter(predicate)
-                // DELETE
-                for result in results {
-                    if metadatas.firstIndex(where: { $0.ocId == result.ocId }) == nil {
-                        realm.delete(result)
-                    }
-                }
-                // UPDATE/NEW
-                for metadata in metadatas {
-                    var updated = false
-                    if let result = results.first(where: { $0.ocId == metadata.ocId }) {
-                        // update
-                        if result.status == k_metadataStatusNormal && result.etag != metadata.etag {
-                            ocIdsUdated.append(metadata.ocId)
-                            realm.add(metadata, update: .all)
-                            updated = true
-                        }
-                    } else {
-                        // new
-                        ocIdsUdated.append(metadata.ocId)
-                        realm.add(metadata, update: .all)
-                        updated = true
-                    }
-                    if local && !updated {
-                        if realm.objects(tableLocalFile.self).filter(NSPredicate(format: "ocId == %@", metadata.ocId)).first == nil {
-                           ocIdsUdated.append(metadata.ocId)
-                        }
-                    }
-                }
-            }
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-        }
-        
-        for ocId in ocIdsUdated {
-            if let result = realm.objects(tableMetadata.self).filter(NSPredicate(format: "ocId == %@", ocId)).first {
-                metadatasUdated.append(result.freeze())
-            }
-        }
-        
-        return metadatasUdated
-    }
-    
     @discardableResult
     @objc func updateMetadatas(_ metadatas: [tableMetadata], metadatasResult: [tableMetadata] ,withVerifyLocal local: Bool = false) -> [tableMetadata] {
         

+ 2 - 1
iOSClient/Networking/NCNetworking.swift

@@ -587,7 +587,8 @@ import Alamofire
                     }
                     
                     DispatchQueue.global().async {
-                        let metadatasChanged = NCManageDatabase.sharedInstance.updateMetadatasWithPredicate(NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl), metadatas: metadatas)
+                        let metadatasResult = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrl, k_metadataStatusNormal))
+                        let metadatasChanged = NCManageDatabase.sharedInstance.updateMetadatas(metadatas, metadatasResult: metadatasResult)
                         if metadatasChanged.count > 0 {
                             NotificationCenter.default.postOnMainThread(name: k_notificationCenter_reloadDataSource, userInfo: ["serverUrl":serverUrl])
                         }

+ 5 - 4
iOSClient/Networking/NCOperationQueue.swift

@@ -183,12 +183,12 @@ class NCOperationSynchronization: ConcurrentOperation {
                 depth = "infinity"
                 useMetadataFolder = true
                 serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
-                predicate = NSPredicate(format: "account == %@ AND serverUrl BEGINSWITH %@", metadata.account, serverUrlFileName)
+                predicate = NSPredicate(format: "account == %@ AND serverUrl BEGINSWITH %@ AND status == %d", metadata.account, serverUrlFileName, k_metadataStatusNormal)
             } else {
                 depth = "0"
                 useMetadataFolder = false
                 serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
-                predicate = NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@", metadata.account, metadata.serverUrl, metadata.fileName)
+                predicate = NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@ AND status == %d", metadata.account, metadata.serverUrl, metadata.fileName, k_metadataStatusNormal)
             }
             if selector == selectorDownloadSynchronize {
                 download = true
@@ -199,9 +199,10 @@ class NCOperationSynchronization: ConcurrentOperation {
                     if errorCode == 0 {
                         NCManageDatabase.sharedInstance.convertNCCommunicationFilesToMetadatas(files, useMetadataFolder: useMetadataFolder, account: account) { (metadataFolder, metadatasFolder, metadatas) in
                             if metadatas.count > 0 {
-                                let updatedMetadatas = NCManageDatabase.sharedInstance.updateMetadatasWithPredicate(predicate, metadatas: metadatas, withVerifyLocal: download)
+                                let metadatasResult = NCManageDatabase.sharedInstance.getMetadatas(predicate: predicate)
+                                let metadatasChanged = NCManageDatabase.sharedInstance.updateMetadatas(metadatas, metadatasResult: metadatasResult)
                                 if download {
-                                    for metadata in updatedMetadatas {
+                                    for metadata in metadatasChanged {
                                         NCNetworking.shared.download(metadata: metadata, selector: selectorDownloadSynchronize) { (_) in }                                        
                                     }
                                 }