// 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() const gesamt = new Map() 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] }) }