From 7c8aab38d2e421bf5dc9a4e49b7284d4fb98694e Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Fri, 10 Mar 2023 18:51:14 +0100 Subject: [PATCH] Fix erroneous deletion of metadata when updating serverUrl subject directory Signed-off-by: Claudio Cambra --- .../FileProviderExt/FileProviderEnumerator.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift index 51d63806d2..fdced9fa7d 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift @@ -383,7 +383,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { var allFpItemUpdates: [FileProviderItem] = [] var allFpItemDeletionsIdentifiers = Array(allDeletedMetadatas.map { NSFileProviderItemIdentifier($0.ocId) }) - DispatchQueue.main.sync { + DispatchQueue.main.sync { // TODO: Find a way to make this non-blocking for updMetadata in allUpdatedMetadatas { guard let parentItemIdentifier = parentItemIdentifierFromMetadata(updMetadata) else { NSLog("Not enumerating change for metadata: %@ %@ as could not get parent item metadata.", updMetadata.ocId, updMetadata.fileName) @@ -464,7 +464,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { } NSLog("Starting async conversion of NKFiles for serverUrl: %@ for user: %@", serverUrl, ncKitAccount) - DispatchQueue.main.async { + DispatchQueue.main.async { // TODO: Background thread? But avoid crash with Realm dbManager.convertNKFilesFromDirectoryReadToItemMetadatas(files, account: ncKitAccount) { directoryMetadata, childDirectoriesMetadata, metadatas in // STORE DATA FOR CURRENTLY SCANNED DIRECTORY @@ -472,7 +472,8 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { // unless it's the root container -- this method deletes metadata for directories under the path that we do not // provide as the updatedDirectoryItemMetadatas, don't do this with root folder or we will purge metadatas wrongly if serverUrl != ncAccount.davFilesUrl { - dbManager.updateDirectoryMetadatasFromItemMetadatas(account: ncKitAccount, parentDirectoryServerUrl: serverUrl, updatedDirectoryItemMetadatas: [directoryMetadata], recordEtag: true) + // Don't use serverUrl here, get the parent serverUrl from retrieved metadata + dbManager.updateDirectoryMetadatasFromItemMetadatas(account: ncKitAccount, parentDirectoryServerUrl: directoryMetadata.serverUrl, updatedDirectoryItemMetadatas: [directoryMetadata], recordEtag: true) } // STORE ETAG-LESS DIRECTORY METADATA FOR CHILD DIRECTORIES