From b449a74cad58d30b27e878f25412bb48e7e52902 Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:15:08 +0200 Subject: [PATCH] Make internal drag and drop robust --- build-plugin.sh | 2 +- packages/u-navigator-0.2.7.tgz | Bin 11368 -> 0 bytes packages/u-navigator-0.2.8.tgz | Bin 0 -> 11821 bytes .../emhttp/plugins/u-navigator/api/common.php | 22 +++++++ .../emhttp/plugins/u-navigator/api/job.php | 3 +- server/public/app.js | 56 +++++++++++++++--- server/public/styles.css | 4 +- u-navigator.plg | 4 +- 8 files changed, 78 insertions(+), 13 deletions(-) delete mode 100644 packages/u-navigator-0.2.7.tgz create mode 100644 packages/u-navigator-0.2.8.tgz diff --git a/build-plugin.sh b/build-plugin.sh index 5281a74..73f2dee 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="0.2.7" +VERSION="0.2.8" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-0.2.7.tgz b/packages/u-navigator-0.2.7.tgz deleted file mode 100644 index 1ade6c77ec2d6c137cb885626ac6f30f448887d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11368 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 diff --git a/packages/u-navigator-0.2.8.tgz b/packages/u-navigator-0.2.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..48e31efcd1139a253c2cbb847b9097527edc9f90 GIT binary patch literal 11821 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 VMyr&7b_Rkp;J-!%`w0&A{{Ss2#%TZm literal 0 HcmV?d00001 diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php index 1a78d5e..53b86b3 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php @@ -122,6 +122,28 @@ function unav_copy_recursive(string $source, string $destination): void { } } +function unav_delete_recursive(string $path): void { + if (is_link($path) || is_file($path)) { + if (!unlink($path)) { + unav_error(500, 'Could not remove source after move'); + } + return; + } + if (is_dir($path)) { + foreach (scandir($path) ?: [] as $entry) { + if ($entry === '.' || $entry === '..') { + continue; + } + unav_delete_recursive($path . '/' . $entry); + } + if (!rmdir($path)) { + unav_error(500, 'Could not remove source directory after move'); + } + return; + } + unav_error(400, 'Only files and directories can be moved'); +} + function unav_guard_destination(string $source, string $destination): void { if (file_exists($destination)) { unav_error(409, 'Destination already exists'); diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php index 5915c84..a95c413 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php @@ -24,7 +24,8 @@ unav_guard_destination($source['path'], $destination['path']); if ($action === 'move') { if (!rename($source['path'], $destination['path'])) { - unav_error(500, 'Move failed'); + unav_copy_recursive($source['path'], $destination['path']); + unav_delete_recursive($source['path']); } } elseif ($action === 'copy') { unav_copy_recursive($source['path'], $destination['path']); diff --git a/server/public/app.js b/server/public/app.js index c867baf..9a624b6 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -7,6 +7,7 @@ const state = { focusedId: null, selectedEntry: null, contextMenu: null, + draggedEntry: null, jobs: new Map(), nextWindowId: 1, zIndex: 20 @@ -196,11 +197,20 @@ function renderExplorer(body, win) { body.querySelector('[data-action="up"]').addEventListener('click', () => loadExplorer(win, parentPath(data.path))); const dropZone = body.querySelector('.drop-zone'); + dropZone.addEventListener('dragenter', (event) => { + if (hasDropPayload(event)) { + event.preventDefault(); + data.dragOver = true; + dropZone.classList.add('drag-over'); + } + }); dropZone.addEventListener('dragover', (event) => { - event.preventDefault(); - event.dataTransfer.dropEffect = event.altKey ? 'copy' : 'move'; - data.dragOver = true; - dropZone.classList.add('drag-over'); + if (hasDropPayload(event)) { + event.preventDefault(); + event.dataTransfer.dropEffect = event.altKey ? 'copy' : 'move'; + data.dragOver = true; + dropZone.classList.add('drag-over'); + } }); dropZone.addEventListener('dragleave', () => { data.dragOver = false; @@ -210,7 +220,11 @@ function renderExplorer(body, win) { event.preventDefault(); data.dragOver = false; dropZone.classList.remove('drag-over'); - await handleDrop(event, win, data.path); + try { + await handleDrop(event, win, data.path); + } catch (error) { + showError(error); + } }); dropZone.addEventListener('contextmenu', (event) => { event.preventDefault(); @@ -227,6 +241,7 @@ function renderExplorer(body, win) { } }); row.addEventListener('dragstart', (event) => { + state.draggedEntry = { path: entry.path, name: entry.name, sourceWindowId: win.id }; event.dataTransfer.setData('application/x-u-navigator-path', entry.path); event.dataTransfer.setData('text/plain', entry.path); event.dataTransfer.effectAllowed = 'copyMove'; @@ -234,6 +249,9 @@ function renderExplorer(body, win) { }); row.addEventListener('dragend', () => { row.classList.remove('dragging'); + setTimeout(() => { + state.draggedEntry = null; + }, 0); }); row.addEventListener('dragover', (event) => { if (entry.type === 'directory') { @@ -246,7 +264,11 @@ function renderExplorer(body, win) { if (entry.type !== 'directory') return; event.preventDefault(); event.stopPropagation(); - await handleDrop(event, win, entry.path); + try { + await handleDrop(event, win, entry.path); + } catch (error) { + showError(error); + } }); row.addEventListener('contextmenu', (event) => { event.preventDefault(); @@ -337,12 +359,15 @@ async function handleDrop(event, win, targetPath) { return; } - const internalPath = event.dataTransfer.getData('application/x-u-navigator-path') || event.dataTransfer.getData('text/plain'); + const internalPath = event.dataTransfer.getData('application/x-u-navigator-path') || event.dataTransfer.getData('text/plain') || state.draggedEntry?.path; if (internalPath) { const name = internalPath.split('/').filter(Boolean).at(-1); const destination = `${targetPath.replace(/\/$/, '')}/${name}`; + if (internalPath === destination) { + throw new Error('Quelle und Ziel sind identisch.'); + } await createJob(event.altKey ? 'copy' : 'move', internalPath, destination); - await loadExplorer(win, win.data.path); + await reloadExplorerWindows([win.id, state.draggedEntry?.sourceWindowId].filter(Boolean)); return; } @@ -370,6 +395,21 @@ async function createJob(type, source, destination) { render(); } +async function reloadExplorerWindows(ids) { + const uniqueIds = new Set(ids); + const targets = state.windows.filter((win) => win.kind === 'explorer' && (uniqueIds.has(win.id) || !uniqueIds.size)); + await Promise.all(targets.map((win) => loadExplorer(win, win.data.path))); +} + +function hasDropPayload(event) { + return Boolean(state.draggedEntry || event.dataTransfer?.types?.includes('Files') || event.dataTransfer?.types?.includes('application/x-u-navigator-path') || event.dataTransfer?.types?.includes('text/plain')); +} + +function showError(error) { + const message = error?.message || String(error); + alert(message); +} + async function renameEntry(win, entry) { const nextName = prompt('Neuer Name', entry.name); if (!nextName || nextName === entry.name) { diff --git a/server/public/styles.css b/server/public/styles.css index d2c50e2..6031804 100644 --- a/server/public/styles.css +++ b/server/public/styles.css @@ -191,8 +191,10 @@ } .u-nav .drop-zone.drag-over { - background: color-mix(in srgb, var(--accent) 10%, transparent); + background: color-mix(in srgb, var(--accent) 18%, transparent); border-color: var(--accent); + border-style: solid; + box-shadow: inset 0 0 0 2px var(--accent); } .u-nav .file-table { diff --git a/u-navigator.plg b/u-navigator.plg index 16b2408..bccb9e8 100644 --- a/u-navigator.plg +++ b/u-navigator.plg @@ -1,7 +1,7 @@ - + ]> @@ -14,7 +14,7 @@ https://git.casaderoll.de/michael/Unraid-Navigator/raw/branch/main/packages/&package; -c22b248a40a369a93ef58126e72fe823 +5e77298b9383a80c1ca8c27020b1d8b0