import { prisma } from "@streamclipper/db"; import { updateYtdlpCookies, updateSystemSettings, updateNotificationPrefs, updateSttEnabled, updateAutoRenderEnabled, updateDeleteAfterTelegramSend, updateSendRawSegmentsToTelegram, addCookieProfile, updateCookieProfile, deleteCookieProfile, } from "../actions"; import { formatTr } from "../../lib/formatDate"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { SettingSwitch } from "../components/SettingSwitch"; import { ConfirmButton } from "../components/ConfirmButton"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle, CardDescription, CardFooter } from "@/components/ui/card"; import { Separator } from "@/components/ui/separator"; export const dynamic = "force-dynamic"; const STALE_COOKIE_HOURS = 4; export default async function SettingsPage() { const [ setting, pollSetting, ttlSetting, notifyStart, notifyRender, notifyError, sttSetting, autoRenderSetting, deleteAfterSendSetting, sendRawSetting, cookieProfiles, ] = await Promise.all([ prisma.appSetting.findUnique({ where: { key: "ytdlp_cookies" } }), prisma.appSetting.findUnique({ where: { key: "poll_interval_ms" } }), prisma.appSetting.findUnique({ where: { key: "raw_segment_ttl_hours" } }), prisma.appSetting.findUnique({ where: { key: "notify_stream_start" } }), prisma.appSetting.findUnique({ where: { key: "notify_render_done" } }), prisma.appSetting.findUnique({ where: { key: "notify_poll_error" } }), prisma.appSetting.findUnique({ where: { key: "stt_enabled" } }), prisma.appSetting.findUnique({ where: { key: "auto_render_enabled" } }), prisma.appSetting.findUnique({ where: { key: "delete_after_telegram_send" } }), prisma.appSetting.findUnique({ where: { key: "send_raw_segments_to_telegram" } }), prisma.cookieProfile.findMany({ orderBy: { createdAt: "asc" } }), ]); const cookieAgeHours = setting ? (Date.now() - setting.updatedAt.getTime()) / 3_600_000 : null; const cookieStale = cookieAgeHours !== null && cookieAgeHours > STALE_COOKIE_HOURS; const pollIntervalSec = pollSetting ? Math.round(Number(pollSetting.value) / 1000) : 60; const ttlHours = ttlSetting ? Number(ttlSetting.value) : 24; const notifyStreamStart = notifyStart?.value !== "false"; const notifyRenderDone = notifyRender?.value !== "false"; const notifyPollError = notifyError?.value !== "false"; const sttEnabled = sttSetting?.value !== "false"; const autoRenderEnabled = autoRenderSetting?.value !== "false"; const deleteAfterTelegramSend = deleteAfterSendSetting?.value === "true"; const sendRawSegmentsToTelegram = sendRawSetting?.value === "true"; return (

Ayarlar

Cookie Hesapları Her kanal, aşağıdaki hesaplardan birine sabit olarak atanır (aynı kanal hep aynı hesabı kullanır, kanallar havuza dağılır). Tek hesap çok kanalı taramaya çalışınca YouTube hesabın kendisini şüpheli bulup "Sign in to confirm you're not a bot" hatası verebiliyor — birkaç ayrı, önemsiz Google hesabı ekleyerek bu yükü dağıt. Her hesap ayrı bir tarayıcıda giriş yapılıp cookies.txt olarak dışa aktarılmalı. {cookieProfiles.length === 0 ? (

Henüz hesap eklenmedi — aşağıdan en az bir tane ekle. Eklenene kadar aşağıdaki tekli/eski cookie ayarı kullanılmaya devam eder.

) : (
{cookieProfiles.map((profile) => { const ageHours = (Date.now() - profile.updatedAt.getTime()) / 3_600_000; const stale = ageHours > STALE_COOKIE_HOURS; return (
{profile.label}
{formatTr(profile.updatedAt)}
{stale && ( ⚠️ {Math.round(ageHours)} saattir güncellenmedi )}
Cookie'yi yenile