From: Claudio Cambra Date: Mon, 27 Feb 2023 22:04:36 +0000 (+0100) Subject: Properly handle renaming folders in FileProviderExtension modifyItem X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~96^2^2~55^2~217 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5f2452727056400f816940742acec1e773933170;p=nextcloud-desktop.git Properly handle renaming folders in FileProviderExtension modifyItem Signed-off-by: Claudio Cambra --- diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift index 3cc2a13d2..f3b22cc8e 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift @@ -357,6 +357,48 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm NSLog("About to upload item with identifier: %@ of type: %@ (is folder: %@) and filename: %@ to server url: %@ with contents located at: %@", item.itemIdentifier.rawValue, item.contentType?.identifier ?? "UNKNOWN", itemTemplateIsFolder ? "yes" : "no", item.filename, newServerUrlFileName, fileNameLocalPath) + if itemTemplateIsFolder { + let ocId = item.itemIdentifier.rawValue + + guard changedFields.contains(.filename) else { + NSLog("System requested modification for folder with ocID %@ (%@) of something other than folder name.", ocId, newServerUrlFileName) + completionHandler(item, [], false, nil) + return Progress() + } + + guard let metadata = dbManager.itemMetadataFromOcId(ocId) else { + NSLog("Could not acquire metadata of item with identifier: %@", ocId) + completionHandler(nil, [], false, NSFileProviderError(.noSuchItem)) + return Progress() + } + + let oldServerUrlFileName = metadata.serverUrl + "/" + metadata.fileName + + self.ncKit.moveFileOrFolder(serverUrlFileNameSource: oldServerUrlFileName, + serverUrlFileNameDestination: newServerUrlFileName, + overwrite: false) { account, error in + guard error == .success else { + NSLog("Could not move folder with name: %@, received error: %@", item.filename, error.errorDescription) + completionHandler(nil, [], false, NSFileProviderError(.serverUnreachable)) + return + } + + dbManager.renameDirectoryAndPropagateToChildren(ocId: ocId, newServerUrl: newServerUrlFileName, newFileName: item.filename) + + guard let newMetadata = dbManager.itemMetadataFromOcId(ocId) else { + NSLog("Could not acquire metadata of item with identifier: %@", ocId) + completionHandler(nil, [], false, NSFileProviderError(.noSuchItem)) + return + } + + let fpItem = FileProviderItem(metadata: newMetadata, parentItemIdentifier: parentItemIdentifier, ncKit: self.ncKit) + + completionHandler(fpItem, [], false, nil) + } + + return Progress() + } + self.ncKit.upload(serverUrlFileName: newServerUrlFileName, fileNameLocalPath: fileNameLocalPath, requestHandler: { _ in