From 61e458b8ea91b25131591f79030b7e75a4f7b057 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sat, 21 Mar 2026 11:46:04 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20skip=200-byte=20files,=20?= =?UTF-8?q?fix=20drag-drop=20highlight=20flicker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Upload manager now rejects empty files (0 bytes) with clear error message instead of sending useless uploads to the server - Fix drag-drop zone highlight flickering caused by dragleave firing on child elements (classic browser bug, fixed with enter/leave counter) Co-Authored-By: Claude Opus 4.6 (1M context) --- lib/upload-manager.js | 6 ++++++ renderer/app.js | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/upload-manager.js b/lib/upload-manager.js index c76267d..ee5be8e 100644 --- a/lib/upload-manager.js +++ b/lib/upload-manager.js @@ -223,6 +223,12 @@ class UploadManager extends EventEmitter { }; try { + if (fileSize <= 0) { + const error = 'Datei ist leer (0 Bytes)'; + emitFinalStatus('skipped', { error, attempt: 0 }); + recordFinalResult('error', { error }); + return; + } if (settings.maxSizeMb > 0 && fileSize > settings.maxSizeMb * 1024 * 1024) { const error = `Datei zu groß (Max: ${settings.maxSizeMb} MB)`; emitFinalStatus('skipped', { error, attempt: 0 }); diff --git a/renderer/app.js b/renderer/app.js index bdc1c5f..cdac774 100644 --- a/renderer/app.js +++ b/renderer/app.js @@ -485,10 +485,12 @@ function setupDragDrop() { const dropZone = document.getElementById('dropZone'); // Allow drop on the entire upload view const uploadView = document.getElementById('upload-view'); - dropZone.addEventListener('dragover', (e) => { e.preventDefault(); e.stopPropagation(); dropZone.classList.add('drag-over'); }); - dropZone.addEventListener('dragleave', (e) => { e.preventDefault(); dropZone.classList.remove('drag-over'); }); + let _dragCounter = 0; + dropZone.addEventListener('dragover', (e) => { e.preventDefault(); e.stopPropagation(); }); + dropZone.addEventListener('dragenter', (e) => { e.preventDefault(); _dragCounter++; dropZone.classList.add('drag-over'); }); + dropZone.addEventListener('dragleave', (e) => { e.preventDefault(); _dragCounter--; if (_dragCounter <= 0) { _dragCounter = 0; dropZone.classList.remove('drag-over'); } }); dropZone.addEventListener('drop', (e) => { - e.preventDefault(); e.stopPropagation(); dropZone.classList.remove('drag-over'); + e.preventDefault(); e.stopPropagation(); _dragCounter = 0; dropZone.classList.remove('drag-over'); addDroppedFiles(e.dataTransfer.files).catch(console.error); }); dropZone.addEventListener('click', () => pickFiles());