Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: files update correctly on destination/current folder
Signed-off-by: Eduardo Morales <[email protected]>
  • Loading branch information
emoral435 committed Mar 9, 2024
commit 960bf248adf71ad23d34f94b53096cffa95e51d0
31 changes: 12 additions & 19 deletions apps/files/src/actions/moveOrCopyAction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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)
Expand Down