From: Claudio Cambra Date: Thu, 9 Mar 2023 15:47:27 +0000 (+0100) Subject: Use ocIds for directory metadata deletion, prevent deletion if no such directory... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~10^2~55^2~186 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=25a09e17048dcf3b7d77dfb74d003300af494031;p=nextcloud-desktop.git Use ocIds for directory metadata deletion, prevent deletion if no such directory found in NextcloudFilesDatabaseManager Signed-off-by: Claudio Cambra --- diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift index ee038a740..9d76f78c3 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift @@ -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 { diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift index 10ea1cf78..f17e693bd 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift @@ -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) } }