diff --git a/webui/static/downloads.js b/webui/static/downloads.js index 39f0cf5a..2681da13 100644 --- a/webui/static/downloads.js +++ b/webui/static/downloads.js @@ -5658,7 +5658,10 @@ let _gsController = null; if (clearBtn) clearBtn.style.display = q.length > 0 ? '' : 'none'; if (_gsState.debounceTimer) clearTimeout(_gsState.debounceTimer); if (q.length < 2) { _gsHideResults(); return; } - _gsState.debounceTimer = setTimeout(() => _gsController.submitQuery(q), 300); + // 600ms (was 300) — coalesce a name being typed into one search + // instead of one external-API search per letter (#751). Enter still + // fires immediately via the keydown handler. + _gsState.debounceTimer = setTimeout(() => _gsController.submitQuery(q), 600); }); if (clearBtn) { diff --git a/webui/static/search.js b/webui/static/search.js index f963f465..71d4ae58 100644 --- a/webui/static/search.js +++ b/webui/static/search.js @@ -243,10 +243,13 @@ function initializeSearchModeToggle() { return; } - // Debounce search + // Debounce search. 600ms (was 300) so a name being typed coalesces + // into ONE search after the user pauses, instead of firing a new + // external-API search per letter (#751). Enter still triggers an + // immediate search via the keypress handler below. debounceTimer = setTimeout(() => { searchController.submitQuery(query); - }, 300); + }, 600); }); enhancedInput.addEventListener('keypress', (e) => {