"use client"; import { useState } from "react"; import { Card, CardHeader, CardTitle, CardDescription, CardContent, Button, FormField, FormInput, FormSelect, Icon } from "@/app/components/ui"; import { useTranslation } from "@/lib/i18n/context"; export function QBittorrentCard({ handleUpdateSetting, initialQbittorrent, initialTorrentImport }: { handleUpdateSetting: (key: string, value: unknown) => Promise; initialQbittorrent: Record | null; initialTorrentImport: Record | null }) { const { t } = useTranslation(); const [qbUrl, setQbUrl] = useState(initialQbittorrent?.url ? String(initialQbittorrent.url) : ""); const [qbUsername, setQbUsername] = useState(initialQbittorrent?.username ? String(initialQbittorrent.username) : ""); const [qbPassword, setQbPassword] = useState(initialQbittorrent?.password ? String(initialQbittorrent.password) : ""); const [isTesting, setIsTesting] = useState(false); const [testResult, setTestResult] = useState<{ success: boolean; message: string } | null>(null); const [importEnabled, setImportEnabled] = useState(initialTorrentImport?.enabled === true); function saveQbittorrent() { handleUpdateSetting("qbittorrent", { url: qbUrl, username: qbUsername, password: qbPassword, }); } async function handleTestConnection() { setIsTesting(true); setTestResult(null); try { const resp = await fetch("/api/qbittorrent/test"); const data = await resp.json(); if (data.error) { setTestResult({ success: false, message: data.error }); } else { setTestResult(data); } } catch { setTestResult({ success: false, message: "Failed to connect" }); } finally { setIsTesting(false); } } return ( {t("settings.qbittorrent")} {t("settings.qbittorrentDesc")}
setQbUrl(e.target.value)} onBlur={() => saveQbittorrent()} />
setQbUsername(e.target.value)} onBlur={() => saveQbittorrent()} /> setQbPassword(e.target.value)} onBlur={() => saveQbittorrent()} />
{testResult && ( {testResult.message} )}
{ const val = e.target.value === "true"; setImportEnabled(val); handleUpdateSetting("torrent_import", { enabled: val }); }} > {importEnabled && (

{t("settings.torrentImportPollingInfo")}

)}
); }