From 240e22bc2e4f6b67b032c0a317e456958520fe90 Mon Sep 17 00:00:00 2001 From: Agando Date: Sun, 18 Oct 2026 17:19:14 +0200 Subject: newOS4 v4.6.40: review fixes (bug diagnostics, trash tree, dir paste, stale capture, preview) --- modules/ext/critical-ext-bundle.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'modules/ext/critical-ext-bundle.js') diff --git a/modules/ext/critical-ext-bundle.js b/modules/ext/critical-ext-bundle.js index 504dfa8..8f63081 100644 --- a/modules/ext/critical-ext-bundle.js +++ b/modules/ext/critical-ext-bundle.js @@ -1737,6 +1737,10 @@ class FileManagerModule { const name = src.split('/').pop(); const destPath = dest === '/' ? '/' + name : dest + '/' + name; if (destPath === src || destPath.startsWith(src + '/')) { skipped++; return; } + // Directory → existing directory would REPLACE the whole subtree silently; skip it. + let srcIsDir = false; + try { srcIsDir = typeof fs.readDir === 'function' && fs.readDir(src) !== null; } catch (_e) {} + if (this._exists(destPath) && srcIsDir) { skipped++; return; } if (this._exists(destPath) && !confirm('Overwrite ' + destPath + '?')) { skipped++; return; } try { const ok = this._clipboard.mode === 'copy' ? fs.copy(src, destPath) : fs.move(src, destPath); @@ -1754,8 +1758,8 @@ class FileManagerModule { _batchDelete() { const paths = this._getSelectedPaths(); - if (!paths.length) { this._updateStatus('No files selected'); return; } - if (!confirm('Delete ' + paths.length + ' item(s)?')) return; + if (!paths.length) { this._updateStatus('No files selected'); return false; } + if (!confirm('Delete ' + paths.length + ' item(s)?')) return false; const fs = this.terminal.fs; let count = 0, failed = 0; paths.forEach(p => { @@ -1768,6 +1772,7 @@ class FileManagerModule { this._selectedFile = null; this._refreshFileList(); this._updateStatus('🗑️ Deleted ' + count + ' item(s)' + (failed ? ' — ' + failed + ' failed' : '')); + return count > 0; } _batchRename() { @@ -1880,8 +1885,8 @@ class FileManagerModule { if (!this._getSelectedPaths().length && this._selectedFile) { this._multiSelect.add(this._selectedFile); } - this._batchDelete(); - this._clearPreview(); + // Only clear the preview when something was actually deleted (not on cancel). + if (this._batchDelete()) this._clearPreview(); } _actionDownload() { -- cgit v1.2.3