Use ocIds for directory metadata deletion, prevent deletion if no such directory...
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 9 Mar 2023 15:47:27 +0000 (16:47 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:23 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift

index ee038a740ca966e999da83b259ca8ab116c28bcf..9d76f78c3a1eaef197cdc4f826fd0e10e2f823c9 100644 (file)
@@ -550,8 +550,8 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
 
             let serverUrl = itemMetadata.serverUrl
 
-            if itemMetadata.directory && dbManager.directoryMetadata(ocId: ocId) != nil {
-                dbManager.deleteDirectoryAndSubdirectoriesMetadata(account: account, serverUrl: serverUrl)
+            if itemMetadata.directory {
+                dbManager.deleteDirectoryAndSubdirectoriesMetadata(ocId: ocId)
             }
 
             if dbManager.localFileMetadataFromOcId(ocId) != nil {
index 10ea1cf78e34cb5ca178289c23a2508c78014350..f17e693bdec986f1b3349c159ee3eb218322ea24 100644 (file)
@@ -333,7 +333,7 @@ class NextcloudFilesDatabaseManager : NSObject {
                   """
                   , metadataToDelete.ocId, metadataToDelete.serverUrl, metadataToDelete.etag)
 
-            self.deleteDirectoryAndSubdirectoriesMetadata(account: metadataToDelete.account, serverUrl: metadataToDelete.serverUrl)
+            self.deleteDirectoryAndSubdirectoriesMetadata(ocId: metadataToDelete.ocId)
         }
     }
 
@@ -450,9 +450,14 @@ class NextcloudFilesDatabaseManager : NSObject {
     }
 
     // Deletes all metadatas related to the info of the directory provided
-    func deleteDirectoryAndSubdirectoriesMetadata(account: String, serverUrl: String) {
+    func deleteDirectoryAndSubdirectoriesMetadata(ocId: String) {
         let database = ncDatabase()
-        let results = database.objects(NextcloudDirectoryMetadataTable.self).filter("account == %@ AND serverUrl BEGINSWITH %@", account, serverUrl)
+        guard let directoryMetadata = database.objects(NextcloudDirectoryMetadataTable.self).filter("ocId == %@", ocId).first else {
+            NSLog("Could not find directory metadata for ocId %@. Not proceeding with deletion", ocId)
+            return
+        }
+
+        let results = database.objects(NextcloudDirectoryMetadataTable.self).filter("account == %@ AND serverUrl BEGINSWITH %@", directoryMetadata.account, directoryMetadata.serverUrl)
 
         for result in results {
             deleteItemMetadata(ocId: result.ocId)
@@ -464,7 +469,7 @@ class NextcloudFilesDatabaseManager : NSObject {
                 database.delete(results)
             }
         } catch let error {
-            NSLog("Could not relete directory metadata with serverUrl: %@, received error: %@", serverUrl, error.localizedDescription)
+            NSLog("Could not delete directory metadata with ocId: %@ and serverUrl: %@, received error: %@", directoryMetadata.ocId, directoryMetadata.serverUrl, error.localizedDescription)
         }
     }