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
@@ -37,6 +37,8 @@ export const ERLAUBTE_EINSTELLUNGEN: ReadonlySet<string> = new Set([
'telegramToken',
'telegramChatId',
'design',
// 5.7.0: wie lange makemkvcon die Titel lesen darf (Kandidat 2 der Durchsicht)
'titelLesenMinuten',
])
/** Die Schlüssel, die Rip und Kompression lesen (Pipeline/Ablage). Das
@@ -56,6 +58,10 @@ const PIPELINE_EINSTELLUNGEN = [
] as const
export const AUTOMATIK_SEKUNDEN_VORGABE = 30
/** 5.7.0: Vorgabe 15 min (Commander-Entscheid 12.09.2026) — kopiergeschützte
* DVDs und Discs mit vielen Playlisten brauchen im MakeMKV-GUI regelmäßig
* länger als die alten fünf Minuten. */
export const TITEL_LESEN_MINUTEN_VORGABE = 15
export class EinstellungsDienst {
constructor(private readonly kontext: KernKontext) {}
@@ -101,6 +107,12 @@ export class EinstellungsDienst {
return this.lesen('automatik', 'an') !== 'aus'
}
/** Grenze fürs Titel-Lesen in Minuten (560, Vorgabe 15). */
titelLesenMinuten(): number {
const n = Number(this.lesen('titelLesenMinuten', String(TITEL_LESEN_MINUTEN_VORGABE)))
return Number.isInteger(n) && n >= 5 && n <= 60 ? n : TITEL_LESEN_MINUTEN_VORGABE
}
automatikSekunden(): number {
const n = Number(this.lesen('automatikSekunden', String(AUTOMATIK_SEKUNDEN_VORGABE)))
return Number.isInteger(n) && n >= 5 && n <= 600 ? n : AUTOMATIK_SEKUNDEN_VORGABE