]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Handle renaming of both files and folders correctly in FileProviderExtension
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 6 Mar 2023 15:18:49 +0000 (16:18 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:20 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift

index f3b22cc8eea12a64414511f7004ba0ef2ee9497e..a2cb906ded8bdaeba99468fd321ba41ab1fa2c82 100644 (file)
@@ -357,15 +357,10 @@ 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 {
+        // TODO: Also handle reparenting here
+        if changedFields.contains(.filename) {
             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))
@@ -378,12 +373,16 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
                                         serverUrlFileNameDestination: newServerUrlFileName,
                                         overwrite: false) { account, error in
                 guard error == .success else {
-                    NSLog("Could not move folder with name: %@, received error: %@", item.filename, error.errorDescription)
+                    NSLog("Could not move file or folder with name: %@, received error: %@", item.filename, error.errorDescription)
                     completionHandler(nil, [], false, NSFileProviderError(.serverUnreachable))
                     return
                 }
 
-                dbManager.renameDirectoryAndPropagateToChildren(ocId: ocId, newServerUrl: newServerUrlFileName, newFileName: item.filename)
+                if itemTemplateIsFolder {
+                    dbManager.renameDirectoryAndPropagateToChildren(ocId: ocId, newServerUrl: newServerUrlFileName, newFileName: item.filename)
+                } else {
+                    dbManager.renameItemMetadata(ocId: ocId, newFileName: item.filename)
+                }
 
                 guard let newMetadata = dbManager.itemMetadataFromOcId(ocId) else {
                     NSLog("Could not acquire metadata of item with identifier: %@", ocId)
@@ -391,11 +390,16 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
                     return
                 }
 
+                // TODO: Handle several modifications, not just a rename or a content change at once
                 let fpItem = FileProviderItem(metadata: newMetadata, parentItemIdentifier: parentItemIdentifier, ncKit: self.ncKit)
 
                 completionHandler(fpItem, [], false, nil)
             }
 
+            return Progress()
+        } else if itemTemplateIsFolder {
+            NSLog("System requested modification for folder with ocID %@ (%@) of something other than folder name.", item.itemIdentifier.rawValue, newServerUrlFileName)
+            completionHandler(item, [], false, nil)
             return Progress()
         }