Просмотр исходного кода

feat: files update correctly on destination/current folder

Signed-off-by: Eduardo Morales <emoral435@gmail.com>
Eduardo Morales 3 месяцев назад
Родитель
Сommit
960bf248ad
1 измененных файлов с 12 добавлено и 19 удалено
  1. 12 19
      apps/files/src/actions/moveOrCopyAction.ts

+ 12 - 19
apps/files/src/actions/moveOrCopyAction.ts

@@ -32,7 +32,7 @@ import { emit } from '@nextcloud/event-bus'
 import { FilePickerClosed, getFilePickerBuilder, showError } from '@nextcloud/dialogs'
 import { Permission, FileAction, FileType, NodeStatus, davGetClient, davRootPath, davResultToNode, davGetDefaultPropfind } from '@nextcloud/files'
 import { translate as t } from '@nextcloud/l10n'
-import { getUploader, openConflictPicker, hasConflict } from '@nextcloud/upload'
+import { openConflictPicker, hasConflict } from '@nextcloud/upload'
 import Vue from 'vue'
 
 import CopyIconSvg from '@mdi/svg/svg/folder-multiple.svg?raw'
@@ -136,34 +136,27 @@ export const handleCopyMoveNodeTo = async (node: Node, destination: Folder, meth
 				}
 			} else {
 				// show conflict file popup if we do not allow overwriting
-				logger.debug("NO CONFLICTS SHOULD BE FOUND11")
 				const otherNodes = await getContents(destination.path)
-				logger.debug("NO CONFLICTS SHOULD BE FOUND2")
-				let files: (Node|File)[] = [node]
 				if (hasConflict([node], otherNodes.contents)) {
-					const conflicts = otherNodes.contents.filter((otherNode: Node) => {
-						return otherNode.basename === node.basename 
-					}).filter(Boolean) as Node[]
-
-					const uploads = otherNodes.contents.filter((otherNode: Node) => {
-						return !conflicts.includes(otherNode)
-					})
-
 					try {
 						// Let the user choose what to do with the conflicting files
-						const { selected, renamed } = await openConflictPicker(destination.path, conflicts, otherNodes.contents)
-						files = [...uploads, ...selected, ...renamed]
+						const { selected, renamed } = await openConflictPicker(destination.path, [node], otherNodes.contents)
+						// if the user selected to keep the old file, and did not select the new file
+						// that means they opted to delete the current node
+						if (!selected.length && !renamed.length) {
+							await client.deleteFile(currentPath)
+							emit('files:node:deleted', node)
+							return
+						}
 					} catch (error) {
 						// User cancelled
-						showError(t('files','Upload cancelled'))
+						showError(t('files','Move cancelled'))
 						return
 					}
-
 				}
-				
-				logger.debug("NO CONFLICTS SHOULD BE FOUND")
+				// getting here means either no conflict, file was renamed to keep both files
+				// in a conflict, or the selected file was chosen to be kept during the conflict
 				await client.moveFile(currentPath, join(destinationPath, node.basename))
-				logger.debug("FINALLY DELETE THE NODE")
 				// Delete the node as it will be fetched again
 				// when navigating to the destination folder
 				emit('files:node:deleted', node)