feature: duplicate 02
This commit is contained in:
@@ -359,6 +359,7 @@ function contextMenuElements() {
|
||||
editButton: document.getElementById("context-menu-edit-btn"),
|
||||
downloadButton: document.getElementById("context-menu-download-btn"),
|
||||
renameButton: document.getElementById("context-menu-rename-btn"),
|
||||
duplicateButton: document.getElementById("context-menu-duplicate-btn"),
|
||||
copyButton: document.getElementById("context-menu-copy-btn"),
|
||||
moveButton: document.getElementById("context-menu-move-btn"),
|
||||
deleteButton: document.getElementById("context-menu-delete-btn"),
|
||||
@@ -706,6 +707,8 @@ function openContextMenu(pane, entry, event) {
|
||||
elements.downloadButton.classList.remove("hidden");
|
||||
elements.downloadButton.disabled = !downloadableSelection;
|
||||
elements.renameButton.classList.toggle("hidden", isMulti);
|
||||
elements.duplicateButton.classList.remove("hidden");
|
||||
elements.duplicateButton.disabled = items.length === 0;
|
||||
elements.copyButton.classList.remove("hidden");
|
||||
elements.copyButton.disabled = items.length === 0;
|
||||
elements.moveButton.classList.remove("hidden");
|
||||
@@ -782,6 +785,36 @@ function startContextMenuCopy() {
|
||||
startCopySelected();
|
||||
}
|
||||
|
||||
async function startDuplicateSelected() {
|
||||
const sourcePane = state.activePane;
|
||||
const selectedItems = [...paneState(sourcePane).selectedItems];
|
||||
if (selectedItems.length === 0) {
|
||||
return;
|
||||
}
|
||||
setError("actions-error", "");
|
||||
try {
|
||||
const result = await createDuplicateTask(selectedItems.map((item) => item.path));
|
||||
state.selectedTaskId = result.task_id;
|
||||
await refreshTasksSnapshot();
|
||||
await Promise.all([loadBrowsePane("left"), loadBrowsePane("right")]);
|
||||
showActionSummary("Duplicate", 1, 0, null);
|
||||
} catch (err) {
|
||||
showActionSummary("Duplicate", 0, 1, err.message);
|
||||
}
|
||||
}
|
||||
|
||||
function startContextMenuDuplicate() {
|
||||
if (contextMenuElements().duplicateButton?.disabled) {
|
||||
return;
|
||||
}
|
||||
if (!applyContextMenuSelection()) {
|
||||
closeContextMenu();
|
||||
return;
|
||||
}
|
||||
closeContextMenu();
|
||||
startDuplicateSelected();
|
||||
}
|
||||
|
||||
function startContextMenuOpen() {
|
||||
if (contextMenuElements().openButton?.disabled) {
|
||||
return;
|
||||
@@ -1165,6 +1198,10 @@ async function createArchiveDownloadTask(paths) {
|
||||
return apiRequest("POST", "/api/files/download/archive-prepare", { paths });
|
||||
}
|
||||
|
||||
async function createDuplicateTask(paths) {
|
||||
return apiRequest("POST", "/api/files/duplicate", { paths });
|
||||
}
|
||||
|
||||
async function getTaskRequest(taskId) {
|
||||
return apiRequest("GET", `/api/tasks/${encodeURIComponent(taskId)}`);
|
||||
}
|
||||
@@ -4633,6 +4670,9 @@ function setupEvents() {
|
||||
if (contextMenu.downloadButton) {
|
||||
contextMenu.downloadButton.onclick = startContextMenuDownload;
|
||||
}
|
||||
if (contextMenu.duplicateButton) {
|
||||
contextMenu.duplicateButton.onclick = startContextMenuDuplicate;
|
||||
}
|
||||
if (contextMenu.copyButton) {
|
||||
contextMenu.copyButton.onclick = startContextMenuCopy;
|
||||
}
|
||||
|
||||
@@ -144,6 +144,7 @@
|
||||
<button id="context-menu-edit-btn" type="button" role="menuitem">Edit</button>
|
||||
<button id="context-menu-download-btn" type="button" role="menuitem">Download</button>
|
||||
<button id="context-menu-rename-btn" type="button" role="menuitem">Rename</button>
|
||||
<button id="context-menu-duplicate-btn" type="button" role="menuitem">Duplicate</button>
|
||||
<button id="context-menu-copy-btn" type="button" role="menuitem">Copy</button>
|
||||
<button id="context-menu-move-btn" type="button" role="menuitem">Move</button>
|
||||
<button id="context-menu-delete-btn" type="button" role="menuitem">Delete</button>
|
||||
|
||||
Reference in New Issue
Block a user