From 60dbf167b9a88e6273a4256a5844c6bf4fbe32ae Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Thu, 9 Mar 2023 02:09:39 +0100 Subject: [PATCH] Fix the serverUrl used to fetch database item metadatas on enumerateItems Signed-off-by: Claudio Cambra --- .../FileProviderEnumerator.swift | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift index e96ee7135..8d5beebe3 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderEnumerator.swift @@ -45,8 +45,10 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { } else { NSLog("Providing enumerator for item with identifier: %@", enumeratedItemIdentifier.rawValue) let dbManager = NextcloudFilesDatabaseManager.shared - if let itemMetadata = dbManager.itemMetadataFromFileProviderItemIdentifier(enumeratedItemIdentifier) { - self.serverUrl = itemMetadata.serverUrl + "/" + itemMetadata.fileName + + enumeratedItemMetadata = dbManager.itemMetadataFromFileProviderItemIdentifier(enumeratedItemIdentifier) + if enumeratedItemMetadata != nil { + self.serverUrl = enumeratedItemMetadata!.serverUrl + "/" + enumeratedItemMetadata!.fileName } else { NSLog("Could not find itemMetadata for file with identifier: %@", enumeratedItemIdentifier.rawValue) } @@ -109,13 +111,29 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { guard readError == nil else { NSLog("Finishing enumeration with error") observer.finishEnumeratingWithError(readError!) - return; + return } let ncKitAccount = self.ncAccount.ncKitAccount // Return all now known metadatas - let metadatas = NextcloudFilesDatabaseManager.shared.itemMetadatas(account: ncKitAccount, serverUrl: self.serverUrl) + var metadatas: [NextcloudItemMetadataTable] + + if self.enumeratingSystemIdentifier || (self.enumeratedItemMetadata != nil && self.enumeratedItemMetadata!.directory) { + metadatas = NextcloudFilesDatabaseManager.shared.itemMetadatas(account: ncKitAccount, serverUrl: self.serverUrl) + } else if (self.enumeratedItemMetadata != nil) { + guard let updatedEnumeratedItemMetadata = NextcloudFilesDatabaseManager.shared.itemMetadataFromOcId(self.enumeratedItemMetadata!.ocId) else { + NSLog("Cannot finish enumeration as the enumerated item could not be fetched from database. %@ %@", self.enumeratedItemIdentifier.rawValue, self.serverUrl) + observer.finishEnumeratingWithError(NSFileProviderError(.noSuchItem)) + return + } + + metadatas = [updatedEnumeratedItemMetadata] + } else { + NSLog("Cannot finish enumeration as we do not have a valid server URL. NOTE: this error should not be possible and indicates something is going wrong before.") + observer.finishEnumeratingWithError(NSFileProviderError(.noSuchItem)) + return + } NSLog("Finished reading serverUrl: %@ for user: %@. Processed %d metadatas", self.serverUrl, ncKitAccount, metadatas.count) -- 2.30.2