From 7f9f7c0e629e99ad152c4789da102e807e9ab6ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 29 Jun 2026 15:14:01 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20DrHider=20=E2=80=94=20better=20JS=20erro?= =?UTF-8?q?r=20handling,=20progress=20messages,=20timeout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/templates/drhider.html | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/site/templates/drhider.html b/site/templates/drhider.html index c3fac37..f8262a6 100644 --- a/site/templates/drhider.html +++ b/site/templates/drhider.html @@ -121,16 +121,21 @@ function render() { BTN.onclick = async () => { if (!files.length) return; BTN.disabled = true; - setStatus('progress', '⏳ Обработка...'); + setStatus('progress', '⏳ Отправка на сервер...'); const fd = new FormData(); files.forEach(f => fd.append('files', f)); try { - const r = await fetch('/api/drhider', { method:'POST', body:fd }); - if (!r.ok) throw new Error(await r.text()); + setStatus('progress', '⏳ Обработка (может занять до минуты)...'); + const r = await fetch('/api/drhider', { method:'POST', body:fd, signal:AbortSignal.timeout(300000) }); + if (!r.ok) { + const txt = await r.text(); + throw new Error(txt); + } const blob = await r.blob(); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'drhider_output.zip'; a.click(); setStatus('done', '✅ Готово! ZIP скачан.'); } catch(e) { - setStatus('error', '❌ ' + e.message); + setStatus('error', '❌ ' + (e.name === 'TimeoutError' ? 'Сервер не ответил за 5 минут' : e.message || 'Неизвестная ошибка')); + console.error('DrHider error:', e); } BTN.disabled = false; };