From f255683caffc2bb08b7038bfcb86bb267f5476d4 Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Tue, 22 Oct 2024 15:21:05 +0200 Subject: [PATCH 1/4] Restoring multiple files from trash - Resolve #1651 --- www/common/drive-ui.js | 52 ++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/www/common/drive-ui.js b/www/common/drive-ui.js index 135b0eae0..b7edb5fac 100644 --- a/www/common/drive-ui.js +++ b/www/common/drive-ui.js @@ -1459,7 +1459,6 @@ define([ } }); if (paths.length > 1) { - hide.push('restore'); hide.push('properties', 'access'); hide.push('rename'); hide.push('openparent'); @@ -5181,24 +5180,43 @@ define([ return void deletePaths(paths); } else if ($this.hasClass("cp-app-drive-context-restore")) { - if (paths.length !== 1) { return; } - var restorePath = paths[0].path; - var restoreName = paths[0].path[paths[0].path.length - 1]; - if (restorePath.length === 4) { - var rEl = manager.find(restorePath); - if (manager.isFile(rEl)) { - restoreName = manager.getTitle(rEl); - } else if (manager.isSharedFolder(rEl)) { - var sfData = manager.getSharedFolderData(rEl); - restoreName = sfData.title || sfData.lastTitle || Messages.fm_deletedFolder; - } else { - restoreName = restorePath[1]; + let getRestoreProperties = (path) => { + let restorePath = path; + let restoreName = path.at(-1); + if (restorePath.length === 4) { + let rEl = manager.find(restorePath); + if (manager.isFile(rEl)) { + restoreName = manager.getTitle(rEl); + } else if (manager.isSharedFolder(rEl)) { + let sfData = manager.getSharedFolderData(rEl); + restoreName = sfData.title || sfData.lastTitle || Messages.fm_deletedFolder; + } else { + restoreName = restorePath[1]; + } } + return [restorePath, restoreName]; + }; + let restoreNumber = paths.length; + if (restoreNumber === 0) { return; } + if (restoreNumber === 1) { // single file restoration + let [restorePath, restoreName] = getRestoreProperties(paths[0].path); + UI.confirm(Messages._getKey("fm_restoreDialog", [restoreName]), function(res) { + if (!res) { return; } + manager.restore(restorePath, refresh); + }); + } else { // multiple files restoration + UI.confirm(Messages._getKey("fm_restoreMultipleDialog", [restoreNumber]), function(res) { + if (!res) { return; } + paths.forEach(path => { + if (!path) { // We met an error + console.error("Error while restoring files: no path"); + return; + } + let restorePath = getRestoreProperties(path.path)[0]; + manager.restore(restorePath, refresh); + }); + }); } - UI.confirm(Messages._getKey("fm_restoreDialog", [restoreName]), function(res) { - if (!res) { return; } - manager.restore(restorePath, refresh); - }); } else if ($this.hasClass("cp-app-drive-context-openparent")) { if (paths.length !== 1) { return; } From d709c6c2d0efd75c2d82da4583c63a79a591f89e Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Tue, 22 Oct 2024 15:27:45 +0200 Subject: [PATCH 2/4] Add translation key for restoring multiple files - Related to #1651 --- customize.dist/messages.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/customize.dist/messages.js b/customize.dist/messages.js index a5784b495..2ee88fc81 100755 --- a/customize.dist/messages.js +++ b/customize.dist/messages.js @@ -136,6 +136,8 @@ define(req, function(AppConfig, Default, Language) { } }; + Messages.fm_restoreMultipleDialog = "Are you sure you want to restore {0} files and/or folders to their previous locations?"; // XXX: new translation key + return Messages; }); From b7ffb5dc6f4af8b331f5a380d9623cb18df672c9 Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Tue, 22 Oct 2024 16:11:49 +0200 Subject: [PATCH 3/4] Minor: consistent callback calls in #1692 --- www/common/drive-ui.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/common/drive-ui.js b/www/common/drive-ui.js index b7edb5fac..e656ebb38 100644 --- a/www/common/drive-ui.js +++ b/www/common/drive-ui.js @@ -5200,12 +5200,12 @@ define([ if (restoreNumber === 0) { return; } if (restoreNumber === 1) { // single file restoration let [restorePath, restoreName] = getRestoreProperties(paths[0].path); - UI.confirm(Messages._getKey("fm_restoreDialog", [restoreName]), function(res) { + UI.confirm(Messages._getKey("fm_restoreDialog", [restoreName]), res => { if (!res) { return; } manager.restore(restorePath, refresh); }); } else { // multiple files restoration - UI.confirm(Messages._getKey("fm_restoreMultipleDialog", [restoreNumber]), function(res) { + UI.confirm(Messages._getKey("fm_restoreMultipleDialog", [restoreNumber]), res => { if (!res) { return; } paths.forEach(path => { if (!path) { // We met an error From c90541d35e9c68b34d14e8506c6e9a26fb128720 Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Tue, 29 Oct 2024 16:43:37 +0100 Subject: [PATCH 4/4] Fix too much calls to refresh with nThen - Add a non-zero timeout to avoid flooding the browser - Fix an issue in #1692 --- www/common/drive-ui.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/www/common/drive-ui.js b/www/common/drive-ui.js index e656ebb38..acf1b2f7e 100644 --- a/www/common/drive-ui.js +++ b/www/common/drive-ui.js @@ -5207,14 +5207,16 @@ define([ } else { // multiple files restoration UI.confirm(Messages._getKey("fm_restoreMultipleDialog", [restoreNumber]), res => { if (!res) { return; } - paths.forEach(path => { - if (!path) { // We met an error - console.error("Error while restoring files: no path"); - return; - } - let restorePath = getRestoreProperties(path.path)[0]; - manager.restore(restorePath, refresh); - }); + nThen(waitFor => { + paths.forEach(path => { + if (!path) { // We met an error + console.error("Error while restoring files: no path"); + return; + } + let restorePath = getRestoreProperties(path.path)[0]; + setTimeout(manager.restore(restorePath, waitFor()), 10); + }); + }).nThen(refresh); }); } }