Marino Faggiana 6 年之前
父节点
当前提交
23bffad0fc
共有 2 个文件被更改,包括 32 次插入30 次删除
  1. 31 29
      iOSClient/Database/NCManageDatabase.swift
  2. 1 1
      iOSClient/Photos/CCPhotos.m

+ 31 - 29
iOSClient/Database/NCManageDatabase.swift

@@ -1941,52 +1941,54 @@ class NCManageDatabase: NSObject {
         
         let directories = realm.objects(tableDirectory.self).filter(NSPredicate(format: "account == %@ AND e2eEncrypted == 0 AND serverUrl BEGINSWITH %@", tableAccount.account, startDirectory)).sorted(byKeyPath: "serverUrl", ascending: true)
         let directoriesID = Array(directories.map { $0.directoryID })
-        let metadatas = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND (typeFile == %@ OR typeFile == %@) AND directoryID IN %@ AND status == %d", tableAccount.account, k_metadataTypeFile_image, k_metadataTypeFile_video, directoriesID, k_metadataStatusNormal)).sorted(byKeyPath: "date", ascending: false)
+        let metadatas = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND (typeFile == %@ OR typeFile == %@) AND directoryID IN %@", tableAccount.account, k_metadataTypeFile_image, k_metadataTypeFile_video, directoriesID)).sorted(byKeyPath: "date", ascending: false)
         
         return Array(metadatas.map { tableMetadata.init(value:$0) })
     }
     
-    @objc func updateTableMetadatasContentTypeImageVideo(_ metadatas: [tableMetadata], startDirectory: String) -> Bool {
+    @objc func updateTableMetadatasContentTypeImageVideo(_ metadatas: [tableMetadata], startDirectory: String) {
+
+        var metadatasForAdd = [tableMetadata]()
+        var metadatasForDelete = [tableMetadata]()
 
-        guard let tableAccount = self.getAccountActive() else {
-            return false
-        }
-        
         let realm = try! Realm()
         realm.refresh()
         
-        let directories = realm.objects(tableDirectory.self).filter(NSPredicate(format: "account == %@ AND e2eEncrypted == 0 AND serverUrl BEGINSWITH %@", tableAccount.account, startDirectory)).sorted(byKeyPath: "serverUrl", ascending: true)
-        let directoriesID = Array(directories.map { $0.directoryID })
-        
-        // Create array metadatasForAdd without records in transfers
-        let resultsInTransfer = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND (typeFile == %@ OR typeFile == %@) AND directoryID IN %@ AND status != %d", tableAccount.account, k_metadataTypeFile_image, k_metadataTypeFile_video, directoriesID, k_metadataStatusNormal))
-        var metadatasForAdd = metadatas
+        let metadatasDBImageVideo = self.getTableMetadatasContentTypeImageVideo(startDirectory)
         
-        for metadata in resultsInTransfer {
-            metadatasForAdd = metadatasForAdd.filter { $0.fileID != metadata.fileID }
+        // Delete
+        for metadata in metadatasDBImageVideo! {
+            let recordFound = metadatas.filter { $0.fileID == metadata.fileID }
+            if (recordFound.count == 0) {
+                metadatasForDelete.append(metadata)
+            }
         }
         
-        // Records for delete
-        let resultsDelete = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND (typeFile == %@ OR typeFile == %@) AND directoryID IN %@ AND status == %d", tableAccount.account, k_metadataTypeFile_image, k_metadataTypeFile_video, directoriesID, k_metadataStatusNormal))
-        
-        do {
-            try realm.write {
-                // DELETE
-                realm.delete(resultsDelete)
-                // INSERT
-                realm.add(metadatasForAdd, update: true)
+        // New
+        for metadata in metadatas {
+            let recordFound = metadatasDBImageVideo!.filter { $0.fileID == metadata.fileID }
+            if (recordFound.count == 0) {
+                metadatasForAdd.append(metadata)
             }
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-            realm.cancelWrite()
-            return false
         }
         
-        return true
+        if (metadatasForDelete.count > 0 || metadatasForAdd.count > 0) {
+            do {
+                try realm.write {
+                    // DELETE
+                    realm.delete(metadatasForDelete)
+                    // INSERT
+                    realm.add(metadatasForAdd, update: true)
+                }
+            } catch let error {
+                print("[LOG] Could not write to database: ", error)
+                realm.cancelWrite()
+            }
+        }        
     }
     
     /*
-    @objc func updateTableMetadatasContentTypeImageVideo(_ metadatas: [tableMetadata], startDirectory: String, activeUrl: String) -> Bool {
+    @objc func updateTableMetadatasContentTypeImageVideo(_ metadatas: [tableMetadata], startDirectory: String) -> Bool {
         
         let realm = try! Realm()
         realm.refresh()

+ 1 - 1
iOSClient/Photos/CCPhotos.m

@@ -608,7 +608,7 @@
             
             NSString *startDirectory = [[NCManageDatabase sharedInstance] getAccountStartDirectoryPhotosTab:[CCUtility getHomeServerUrlActiveUrl:appDelegate.activeUrl]];
 
-            (void)[[NCManageDatabase sharedInstance] updateTableMetadatasContentTypeImageVideo:metadatas startDirectory:startDirectory];
+            [[NCManageDatabase sharedInstance] updateTableMetadatasContentTypeImageVideo:metadatas startDirectory:startDirectory];
             
             dispatch_async(dispatch_get_main_queue(), ^{
                 [self reloadDatasourceFromSearch:YES];