Die sechs Punkte des Commanders vom 02.09.2026 abends und seine Entscheide:
* Restzeit der Kompression aus HandBrakes eigener ETA-Klammer (Formatstring
aus dem Binary 1.11.2 gelesen), KompressionStand.restS.
* Kachel zeigt nach dem Rip nur noch eine Zeile — Balken, Prozent, Ziel in
der Kompressions-Karte und im Verlauf ("nur in der Kompressions-Karte").
* Kopfzeile bleibt beim Scrollen stehen (sticky), Sektionswahl darunter.
* Untertitel-Vorwahl je Extra ("NUR für Extras, IMMER OPTIONAL"): welche
Untertitel-Spur beim Abspielen an ist — weiche Spur, nie eingebrannt;
RipAuftragTitel/RohDatei.untertitelVorwahl, sprachwahl.
* Mehrere Filme je Disc: "anderer Film …" je Titel mit TMDb-Suche;
filme.ts filmGruppen trennt am Rip-Ende in eigene Roh-Ordner, Vorgänge
und Kompressions-Aufträge mit voller Zuordnung (erkennung.zuordnungAus).
* Roh-Ordner und Dateien tragen den Filmnamen (filme.ts rohOrdnerName,
ablage/dateinamen.ts: Akira (1988).mkv, - Fassung n, - Extra nn).
* Hell-Modus: Einstellung design (dunkel/hell/system), data-design auf
<html>, Token --color-tinte statt white/-Alpha-Klassen.
* Vorgangs-Leiste (Commander: "Phase 1–4 plus Komprimierung — zu einem
machen"): gemeinsam/vorgangsleiste.ts + uebersicht/VorgangsLeiste.tsx,
vier Stationen (Rettung als Zwischenstation), Segment-Balken in der
aktiven Station; Kachel, Kompressions-Karte, Verlauf. PHASE-x/4-Texte weg.
* Automatik-Kasten leert sich, sobald ein Rip startet.
Beweise: 446 Tests (neu: filme, dateinamen, vorgangsleiste; erweitert:
auftrag, handbrake, automatik, ablegen), drei Typprüfungen, Klick-Beweis
33 Schritte inkl. Vorwahl, anderer Film, Vorgangs-Leiste, Restzeit,
Hell-Modus (Bilder beweise/klick/01…11).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
48 lines
2.0 KiB
TypeScript
48 lines
2.0 KiB
TypeScript
// Dateinamen in der Ablage (5.6.0, Commander: „die Ordner … müssen direkt
|
|
// den Filmnamen haben" — und die Dateien darin auch): Statt MakeMKVs
|
|
// title_t00.mkv heißt der Hauptfilm „Akira (1988).mkv", zwei Fassungen
|
|
// „Akira (1988) - Fassung 1.mkv" und „… - Fassung 2.mkv", Zugaben „Akira
|
|
// (1988) - Extra 01.mkv" im Unterordner extras. Folgen behalten ihren
|
|
// Namen, bis die Episoden-Zuordnung sie umbenennt (struktur.ts) — ohne
|
|
// Zuordnung bleiben sie, wie sie sind (lieber gar nicht als falsch). Ohne
|
|
// erkannten Titel bleibt alles beim MakeMKV-Namen. PUR.
|
|
import { extname } from 'node:path'
|
|
import { sichererName } from '../../gemeinsam/ablagepfad'
|
|
import type { TitelRolle } from '../../gemeinsam/nachrichten'
|
|
|
|
export interface NamensEingabe {
|
|
titel: string
|
|
jahr: number | null
|
|
alsSerie: boolean
|
|
rolle: TitelRolle
|
|
/** 1-basierte Nummer unter den Dateien GLEICHER Rolle (Ablage-Reihenfolge). */
|
|
nummer: number
|
|
/** Wie viele Dateien dieser Rolle es gibt. */
|
|
anzahl: number
|
|
/** MakeMKVs Dateiname (mit Endung). */
|
|
original: string
|
|
}
|
|
|
|
export function zielDateiname(e: NamensEingabe): string {
|
|
const endung = extname(e.original) || '.mkv'
|
|
const name = e.alsSerie ? sichererName(e.titel) : sichererName(e.titel, e.jahr)
|
|
if (e.titel.trim().length === 0 || name.length === 0) return e.original
|
|
const nn = String(e.nummer).padStart(2, '0')
|
|
if (e.rolle === 'extra') return `${name} - Extra ${nn}${endung}`
|
|
if (e.alsSerie) return e.original
|
|
if (e.rolle === 'hauptfilm') return e.anzahl > 1 ? `${name} - Fassung ${e.nummer}${endung}` : `${name}${endung}`
|
|
return e.original
|
|
}
|
|
|
|
/** Nummern je Rolle in Ablage-Reihenfolge (pur): [nummer, anzahl] je Index. */
|
|
export function rollenNummern(rollen: readonly TitelRolle[]): Array<[number, number]> {
|
|
const zaehler = new Map<TitelRolle, number>()
|
|
const gesamt = new Map<TitelRolle, number>()
|
|
for (const r of rollen) gesamt.set(r, (gesamt.get(r) ?? 0) + 1)
|
|
return rollen.map((r) => {
|
|
const n = (zaehler.get(r) ?? 0) + 1
|
|
zaehler.set(r, n)
|
|
return [n, gesamt.get(r) ?? 1]
|
|
})
|
|
}
|