Default offline cleanup dialog to entire packages first

This commit is contained in:
Sucukdeluxe
2026-09-04 21:59:18 +02:00
parent 2a721dc955
commit 3436fcdd24
4 changed files with 12 additions and 10 deletions
+3 -3
View File
@@ -1921,7 +1921,7 @@ export function App(): ReactElement {
const [startConflictPrompt, setStartConflictPrompt] = useState<StartConflictPromptState | null>(null);
const startConflictResolverRef = useRef<((result: { policy: Extract<DuplicatePolicy, "skip" | "overwrite">; applyToAll: boolean } | null) => void) | null>(null);
const [confirmPrompt, setConfirmPrompt] = useState<ConfirmPromptState | null>(null);
const offlineRemovalScopeRef = useRef<OfflineSkipScope>("archive");
const offlineRemovalScopeRef = useRef<OfflineSkipScope>("package");
const [backupPassphraseMode, setBackupPassphraseMode] = useState<BackupPassphraseMode | null>(null);
const [onlineBackupDialog, setOnlineBackupDialog] = useState<OnlineBackupDialogState | null>(null);
const [remoteDiag, setRemoteDiag] = useState<RemoteDiagnosticsInfo | null>(null);
@@ -4864,9 +4864,9 @@ export function App(): ReactElement {
const english = normalizeLanguage(settings.language) === "en";
const count = candidates.length.toLocaleString(english ? "en-US" : "de-DE");
const packageLabel = english ? (candidates.length === 1 ? "package" : "packages") : (candidates.length === 1 ? "Paket" : "Pakete");
offlineRemovalScopeRef.current = "archive";
offlineRemovalScopeRef.current = "package";
const confirmed = await askConfirmPrompt({
offlineScope: "archive",
offlineScope: "package",
title: english ? "Remove packages with offline links" : "Pakete mit Offline-Links entfernen",
message: english
? `${count} ${packageLabel} with offline links in the entire queue. This applies regardless of filters or selection.`
@@ -8,18 +8,18 @@ export function OfflineRemovalScopeChoice({ scope, english, onChange }: {
return (
<fieldset style={{ border: 0, padding: 0, margin: "16px 0", display: "grid", gap: 14 }}>
<legend style={{ marginBottom: 12 }}>{english ? "What should be removed?" : "Was soll entfernt werden?"}</legend>
<label style={{ display: "flex", alignItems: "flex-start", gap: 10 }}>
<input type="radio" name="offline-removal-scope" value="archive" checked={scope === "archive"} onChange={() => onChange("archive")} />
<span><strong>{english ? "Only affected archive sets" : "Nur betroffene Archivsätze"}</strong><br />
{english ? "Remove all parts of the affected episode or archive. Other episodes in the package remain." : "Alle Parts der betroffenen Folge oder des Archivs entfernen. Andere Folgen im Paket bleiben erhalten."}
</span>
</label>
<label style={{ display: "flex", alignItems: "flex-start", gap: 10 }}>
<input type="radio" name="offline-removal-scope" value="package" checked={scope === "package"} onChange={() => onChange("package")} />
<span><strong>{english ? "Entire packages" : "Ganze Pakete"}</strong><br />
{english ? "Remove the entire parent package as soon as one link is offline." : "Das gesamte übergeordnete Paket entfernen, sobald ein Link offline ist."}
</span>
</label>
<label style={{ display: "flex", alignItems: "flex-start", gap: 10 }}>
<input type="radio" name="offline-removal-scope" value="archive" checked={scope === "archive"} onChange={() => onChange("archive")} />
<span><strong>{english ? "Only affected archive sets" : "Nur betroffene Archivsätze"}</strong><br />
{english ? "Remove all parts of the affected episode or archive. Other episodes in the package remain." : "Alle Parts der betroffenen Folge oder des Archivs entfernen. Andere Folgen im Paket bleiben erhalten."}
</span>
</label>
<p style={{ margin: 0 }}>{english ? "Active downloads being removed will stop. Downloaded files are kept in both cases." : "Die zu entfernenden laufenden Downloads werden gestoppt. Heruntergeladene Dateien bleiben in beiden Fällen erhalten."}</p>
</fieldset>
);