From c577d3d91fe4e171eee482eb9a30d4713b5968b2 Mon Sep 17 00:00:00 2001 From: Johannes Zellner Date: Thu, 4 Jan 2024 15:47:26 +0100 Subject: [PATCH] filemanager: ask user for confirmation on rename conflict --- frontend/src/models/DirectoryModel.js | 4 ++-- frontend/src/views/Home.vue | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/frontend/src/models/DirectoryModel.js b/frontend/src/models/DirectoryModel.js index fbc1e1866..ac4845a95 100644 --- a/frontend/src/models/DirectoryModel.js +++ b/frontend/src/models/DirectoryModel.js @@ -90,9 +90,9 @@ export function createDirectoryModel(origin, accessToken, api) { await superagent.del(`${origin}/api/v1/${api}/files/${filePath}`) .query({ access_token: accessToken }); }, - async rename(fromFilePath, toFilePath) { + async rename(fromFilePath, toFilePath, overwrite = false) { await superagent.put(`${origin}/api/v1/${api}/files/${fromFilePath}`) - .send({ action: 'rename', newFilePath: sanitize(toFilePath) }) + .send({ action: 'rename', newFilePath: sanitize(toFilePath), overwrite }) .query({ access_token: accessToken }); }, async copy(fromFilePath, toFilePath) { diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index d77971d72..c0c827711 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -378,8 +378,24 @@ export default { }, async renameHandler(file, newName) { - await this.directoryModel.rename(this.directoryModel.buildFilePath(this.cwd, file.name), sanitize(this.cwd + '/' + newName)); - await this.loadCwd(); + try { + await this.directoryModel.rename(this.directoryModel.buildFilePath(this.cwd, file.name), sanitize(this.cwd + '/' + newName)); + await this.loadCwd(); + } catch (e) { + if (e.status === 409) { + this.$confirm.require({ + message: this.$t('filemanager.renameDialog.reallyOverwrite'), + icon: '', + acceptClass: 'p-button-danger', + accept: async () => { + await this.directoryModel.rename(this.directoryModel.buildFilePath(this.cwd, file.name), sanitize(this.cwd + '/' + newName), true /* overwrite */); + await this.loadCwd(); + this.$confirm.close(); + } + }); + } + else console.error(`Failed to rename ${file} to ${newName}`, e); + } }, async changeOwnerHandler(files, newOwnerUid) { if (!files) return;