feat(v5): Titel lesen bis 15 Minuten (einstellbar), Zwischenstand im Dialog, Abbrechen beendet den Lauf

WAS: Die Grenze fürs Titel-Lesen kommt aus der Einstellung
titelLesenMinuten (5–60, Vorgabe 15; Einstellungen → Allgemein). Ab der
zweiten Minute meldet der Kern jede Minute, wie lange MakeMKV schon liest
und wo die Grenze liegt; „Abbrechen" im Dialog beendet den Lauf auch im
Kern (titel-abbruch), damit das Laufwerk frei wird. Läuft die Zeit ab,
nennt die Meldung Kopierschutz und viele Playlisten als mögliche Gründe
statt nur „beschädigte Disc" — mit dem Rat, die Disc im MakeMKV-Programm
zu öffnen und die Zeit zu stoppen.
WARUM: Durchsicht 12.09.2026, Kandidat 2 (Commander-Entscheid: 15 Minuten
plus Regler) — fünf Minuten fest war für ältere DVDs mit Kopierschutz zu
kurz, das GUI wartet, Rippy nicht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-12 21:44:44 +02:00
co-authored by Claude Opus 5
parent ae82d8c0fd
commit 6b6e5c3436
7 changed files with 82 additions and 7 deletions
@@ -23,7 +23,7 @@ import type {
TitelStand,
} from '../../gemeinsam/nachrichten'
import { DialogRahmen, IconDisc, KNOPF_GOLD, datumKurz, dauerText, gb, gbKurz, posterUrlKlein, sprachenVorbelegt } from '../bausteine'
import { metadatenSuchen, ripStarten } from '../kernverbindung'
import { metadatenSuchen, ripStarten, titelAbbrechen } from '../kernverbindung'
/** Sprach-Chips eines Titels — anklickbar, außerhalb des Auswahl-Labels
* (ein Knopf IM Label würde die Checkbox mit umschalten). */
@@ -181,9 +181,12 @@ export function TitelWahlDialog({
<h3 className="font-display text-xl font-bold text-schnee">Was soll gerippt werden?</h3>
{stand === undefined || stand.laeuft ? (
<p className="mt-4 font-mono text-xs text-nebel">
Rippy liest die Titel der Disc das dauert bis zu zwei Minuten. Solange dreht das Laufwerk.
</p>
<div className="mt-4">
<p className="font-mono text-xs text-nebel">Rippy liest die Titel der Disc meist dauert das ein bis zwei Minuten. Solange dreht das Laufwerk.</p>
{/* 5.7.0 (Kandidat 2): Ab der zweiten Minute sagt der Kern, wie lange
es schon läuft und wo die Grenze liegt. */}
{stand !== undefined && stand.einordnung.length > 0 && <p className="mt-2 font-mono text-xs text-warn">{stand.einordnung}</p>}
</div>
) : stand.fehler.length > 0 ? (
<p className="mt-4 font-mono text-xs text-rot"> {stand.fehler}</p>
) : (
@@ -463,7 +466,15 @@ export function TitelWahlDialog({
)}
<div className="mt-5 flex justify-between gap-2">
<button onClick={schliessen} className="rounded-lg border border-tinte/15 px-4 py-1.5 text-xs text-dunst hover:text-schnee">
<button
onClick={() => {
// Läuft der Titel-Lauf noch, beendet „Abbrechen" ihn auch im Kern —
// sonst dreht das Laufwerk weiter, obwohl der Dialog zu ist.
if (stand !== undefined && stand.laeuft) titelAbbrechen(id)
schliessen()
}}
className="rounded-lg border border-tinte/15 px-4 py-1.5 text-xs text-dunst hover:text-schnee"
>
Abbrechen
</button>
<button