diff --git a/client/src/routes/Transfers.svelte b/client/src/routes/Transfers.svelte index 22a9a6b..03311c2 100644 --- a/client/src/routes/Transfers.svelte +++ b/client/src/routes/Transfers.svelte @@ -221,9 +221,73 @@ return `${m}:${s}`; } + let dragActive = false; + let pageDragOverlay = false; + let dragCounter = 0; + + // sadece drop-zone alanına gelen olayları işleme + function handleDragOver(e) { + e.preventDefault(); + e.stopPropagation(); + if (torrents.length === 0) dragActive = true; + else pageDragOverlay = true; + } + + function handleDragEnter(e) { + e.preventDefault(); + e.stopPropagation(); + dragCounter++; + if (torrents.length === 0) dragActive = true; + else pageDragOverlay = true; + } + + function handleDragLeave(e) { + e.preventDefault(); + e.stopPropagation(); + dragCounter--; + if (dragCounter <= 0) { + dragActive = false; + pageDragOverlay = false; + } + } + + async function handleDrop(e) { + e.preventDefault(); + e.stopPropagation(); + dragCounter = 0; + dragActive = false; + pageDragOverlay = false; + + const files = Array.from(e.dataTransfer?.files || []); + const torrentsToUpload = files.filter((f) => f.name.endsWith(".torrent")); + if (!torrentsToUpload.length) return; + + for (const file of torrentsToUpload) { + const fd = new FormData(); + fd.append("torrent", file); + await apiFetch("/api/transfer", { method: "POST", body: fd }); + } + + await list(); + } + + // 🧩 Global dinleyiciler — sadece overlay için, drop'u engellemeden + function addGlobalDragListeners() { + window.addEventListener("dragenter", handleDragEnter); + window.addEventListener("dragleave", handleDragLeave); + window.addEventListener("dragover", (e) => e.preventDefault()); + window.addEventListener("drop", (e) => { + e.preventDefault(); + dragCounter = 0; + dragActive = false; + pageDragOverlay = false; + }); + } + onMount(() => { list(); // 🔒 token'lı liste çekimi wsConnect(); // 🔒 token'lı WebSocket + addGlobalDragListeners(); const slider = document.querySelector(".volume-slider"); if (slider) { slider.value = volume; @@ -255,12 +319,27 @@ {#if torrents.length === 0} -
-
-
No files whatsoever!
+
+
+ +
Drop your .torrent file here
+
or use the buttons above
+
{:else} -
+
{#each torrents as t (t.infoHash)}
openModal(t)}> {#if t.thumbnail} @@ -328,16 +407,28 @@
{/each} + {#if pageDragOverlay} +
+
+ + Drop to add torrent +
+
+ {/if}
{/if} {#if showModal && selectedVideo}