]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Properly delete directory and all children when updating folder metadatas in database...
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 8 Mar 2023 22:27:45 +0000 (23:27 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:22 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift

index 4ddef4a9beba105b4dce5ce50921ee8e85176349..badb84cff51b9f452bddbcc4dd714729c4fa6cdd 100644 (file)
@@ -321,8 +321,6 @@ class NextcloudFilesDatabaseManager : NSObject {
                                            existingDirectoryMetadatas: Results<NextcloudDirectoryMetadataTable>,
                                            updatedDirectoryMetadatas: [NextcloudDirectoryMetadataTable]) {
 
-        assert(databaseToWriteTo.isInWriteTransaction)
-
         for existingMetadata in existingDirectoryMetadatas {
             guard !updatedDirectoryMetadatas.contains(where: { $0.ocId == existingMetadata.ocId }),
                   let metadataToDelete = directoryMetadata(ocId: existingMetadata.ocId) else { continue }
@@ -335,8 +333,7 @@ class NextcloudFilesDatabaseManager : NSObject {
                   """
                   , metadataToDelete.ocId, metadataToDelete.serverUrl, metadataToDelete.etag)
 
-            // Can't pass copies, we need the originals from the database
-            databaseToWriteTo.delete(databaseToWriteTo.objects(NextcloudDirectoryMetadataTable.self).filter("ocId == %@", metadataToDelete.ocId))
+            self.deleteDirectoryAndSubdirectoriesMetadata(account: metadataToDelete.account, serverUrl: metadataToDelete.serverUrl)
         }
     }
 
@@ -378,13 +375,15 @@ class NextcloudFilesDatabaseManager : NSObject {
     func updateDirectoryMetadatas(account: String, parentDirectoryServerUrl: String, updatedDirectoryMetadatas: [NextcloudDirectoryMetadataTable]) {
         let database = ncDatabase()
 
+        let existingDirectoryMetadatas = ncDatabase().objects(NextcloudDirectoryMetadataTable.self).filter("account == %@ AND parentDirectoryServerUrl == %@", account, parentDirectoryServerUrl)
+
+        // Actual db writing handled internally
+        processDirectoryMetadatasToDelete(databaseToWriteTo: database,
+                                          existingDirectoryMetadatas: existingDirectoryMetadatas,
+                                          updatedDirectoryMetadatas: updatedDirectoryMetadatas)
+
         do {
             try database.write {
-                let existingDirectoryMetadatas = ncDatabase().objects(NextcloudDirectoryMetadataTable.self).filter("account == %@ AND parentDirectoryServerUrl == %@", account, parentDirectoryServerUrl)
-
-                processDirectoryMetadatasToDelete(databaseToWriteTo: database,
-                                                  existingDirectoryMetadatas: existingDirectoryMetadatas,
-                                                  updatedDirectoryMetadatas: updatedDirectoryMetadatas)
 
                 processDirectoryMetadatasToUpdate(databaseToWriteTo: database,
                                                   existingDirectoryMetadatas: existingDirectoryMetadatas,