From d69fb410244b7cea66d7a484e0139a350e079e73 Mon Sep 17 00:00:00 2001 From: szbk Date: Sun, 14 Dec 2025 20:24:58 +0300 Subject: [PATCH] =?UTF-8?q?feat(transfers):=20websocket=20ba=C4=9Flant?= =?UTF-8?q?=C4=B1s=C4=B1=20i=C3=A7in=20dayan=C4=B1kl=C4=B1l=C4=B1k=20mekan?= =?UTF-8?q?izmas=C4=B1=20ekle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebSocket bağlantısı düştüğünde otomatik yeniden bağlanma ve geçici polling ile veri akışını sürdürme yeteneği eklendi. Bağlantı hatalarında konsola uyarı mesajı yazdırılır ve component kaldırıldığında timer'lar temizlenir. --- client/src/routes/Transfers.svelte | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/client/src/routes/Transfers.svelte b/client/src/routes/Transfers.svelte index dd64071..b6e6c14 100644 --- a/client/src/routes/Transfers.svelte +++ b/client/src/routes/Transfers.svelte @@ -7,6 +7,7 @@ let isAllPaused = false; let totalDownloaded = 0; let totalDownloadSpeed = 0; + let pollTimer; // Modal / player state let showModal = false; @@ -27,6 +28,12 @@ const token = getAccessToken(); const url = `${API.replace("http", "ws")}?token=${token || ""}`; ws = new WebSocket(url); + ws.onopen = () => { + if (pollTimer) { + clearInterval(pollTimer); + pollTimer = null; + } + }; ws.onmessage = (e) => { const d = JSON.parse(e.data); if (d.type === "progress") { @@ -37,6 +44,17 @@ updateTransferStats(); } }; + ws.onerror = (err) => { + console.warn("WS hata:", err); + ws.close(); + }; + ws.onclose = () => { + // WS koptuğunda hafif bir polling ile listeyi güncel tut + if (!pollTimer) { + pollTimer = setInterval(list, 4000); + } + setTimeout(wsConnect, 2000); + }; } async function list() { @@ -449,7 +467,11 @@ slider.style.setProperty("--fill", slider.value * 100); } window.addEventListener("keydown", onEsc); - return () => window.removeEventListener("keydown", onEsc); + return () => { + window.removeEventListener("keydown", onEsc); + if (ws) ws.close(); + if (pollTimer) clearInterval(pollTimer); + }; });