diff --git a/client/src/routes/Settings.svelte b/client/src/routes/Settings.svelte index 52e7c05..080b5b5 100644 --- a/client/src/routes/Settings.svelte +++ b/client/src/routes/Settings.svelte @@ -13,6 +13,11 @@ let cookiesUpdatedAt = null; let loadingCookies = false; let savingCookies = false; + let loadingYtSettings = false; + let savingYtSettings = false; + let selectedResolution = "1080p"; + let onlyAudio = false; + const resolutionOptions = ["1080p", "720p", "480p", "360p", "240p", "144p"]; let error = null; let success = null; @@ -64,8 +69,51 @@ } } + async function loadYoutubeSettings() { + loadingYtSettings = true; + error = null; + try { + const resp = await apiFetch("/api/youtube/settings"); + if (!resp.ok) throw new Error(`HTTP ${resp.status}`); + const data = await resp.json(); + if (data?.resolution) selectedResolution = data.resolution; + if (typeof data?.onlyAudio === "boolean") onlyAudio = data.onlyAudio; + } catch (err) { + error = err?.message || "YouTube ayarları alınamadı."; + } finally { + loadingYtSettings = false; + } + } + + async function saveYoutubeSettings() { + if (savingYtSettings) return; + savingYtSettings = true; + error = null; + success = null; + try { + const resp = await apiFetch("/api/youtube/settings", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + resolution: selectedResolution, + onlyAudio + }) + }); + const data = await resp.json().catch(() => ({})); + if (!resp.ok || !data?.ok) { + throw new Error(data?.error || `HTTP ${resp.status}`); + } + success = "YouTube indirme ayarları kaydedildi."; + } catch (err) { + error = err?.message || "YouTube ayarları kaydedilemedi."; + } finally { + savingYtSettings = false; + } + } + onMount(() => { loadCookies(); + loadYoutubeSettings(); }); function formatDate(ts) { @@ -98,6 +146,47 @@ {#if activeTab === "youtube"} +