From 61dd51ae0237f15bde18e8772acc67576a4d0772 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Wed, 8 Mar 2023 23:27:45 +0100 Subject: [PATCH] Properly delete directory and all children when updating folder metadatas in database manager Signed-off-by: Claudio Cambra --- .../NextcloudFilesDatabaseManager.swift | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift index 4ddef4a9b..badb84cff 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift @@ -321,8 +321,6 @@ class NextcloudFilesDatabaseManager : NSObject { existingDirectoryMetadatas: Results, 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, -- 2.30.2