feat(timer): diskten dosya silme seçeneği ekle

Timer kurallarına torrent silinirken dosyaların diskten de
silinip silinmeyeceğini belirleyen `deleteFiles` alanı eklendi.
Web arayüzüne ilgili ayar checkbox'ı eklendi. Varsayılan değer
dosyaları silmek (`true`) olarak ayarlandı. Torrent listesinde
eklenme tarihi görünümü eklendi.
This commit is contained in:
2026-01-09 12:47:34 +03:00
parent ce1693cf4e
commit dcd66fdd11
6 changed files with 35 additions and 1 deletions

View File

@@ -67,6 +67,11 @@ const formatCountdown = (seconds: number) => {
return `${days}g ${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
};
const formatAddedOn = (addedOn?: number) => {
if (!Number.isFinite(addedOn)) return "Bilinmiyor";
return new Date(addedOn * 1000).toLocaleString();
};
const trackerLabel = (tracker?: string) => {
if (!tracker) return "Bilinmiyor";
try {
@@ -91,6 +96,7 @@ export const TimerPage = () => {
const [seedUnit, setSeedUnit] = useState<(typeof unitOptions)[number]["value"]>(
"weeks"
);
const [deleteFiles, setDeleteFiles] = useState(true);
const [busy, setBusy] = useState(false);
const pushAlert = useUiStore((s) => s.pushAlert);
const [nowTick, setNowTick] = useState(() => Date.now());
@@ -225,9 +231,11 @@ export const TimerPage = () => {
const response = await api.post("/api/timer/rules", {
tags: selectedTags,
seedLimitSeconds,
deleteFiles,
});
setTimerRules([response.data, ...timerRules]);
setSelectedTags([]);
setDeleteFiles(true);
pushAlert({
title: "Kural kaydedildi",
description: "Timer kuralı aktif edildi.",
@@ -322,6 +330,9 @@ export const TimerPage = () => {
.filter(Boolean)
.join(", ") || "-"}
</div>
<div className="truncate">
Added: {formatAddedOn(torrent.added_on)}
</div>
</div>
</div>
))}
@@ -439,6 +450,20 @@ export const TimerPage = () => {
</select>
</div>
</div>
<label className="flex items-start gap-2 text-sm text-slate-700">
<input
type="checkbox"
checked={deleteFiles}
onChange={(event) => setDeleteFiles(event.target.checked)}
className="mt-1 h-4 w-4 rounded border-slate-300 text-slate-900"
/>
<span>
Dosyayı Disk'ten Kaldır
<span className="block text-xs text-slate-500">
İşaretli değilse torrent sadece qBittorrent'tan kaldırılır, dosya disk üzerinde kalır.
</span>
</span>
</label>
<Button onClick={handleSaveRule} disabled={busy}>
{busy ? "Kaydediliyor..." : "Kuralı Kaydet"}
</Button>
@@ -464,6 +489,10 @@ export const TimerPage = () => {
</div>
<div className="text-xs text-slate-500">
Seed limiti: {formatDuration(rule.seedLimitSeconds)}
{" • "}
{rule.deleteFiles ?? true
? "Silme: Disk + qBittorrent"
: "Silme: Sadece qBittorrent"}
</div>
</div>
<AlertDialog>