fix(v5): Serien über mehrere Discs — nur die eigenen Folgen benennen, nie überschreiben; HandBrake schreibt auf Zwischennamen
WAS: - episodenUmbenennen bekommt die Dateien DIESER Disc (nurDiese) statt den ganzen Season-Ordner zu zählen. Vorher hieß es bei Disc 2 „über- sprungen: 4 Dateien, 2 Zuordnungen", sobald Disc 1 dort schon S01E01/ S01E02 abgelegt hatte — Serien-Merker und „ab Folge" liefen ins Leere. - freierName: eine vorhandene Datei gleichen Namens im Ziel wird nie ersetzt („title_t00 (2).mkv") — außer beim Wiederholen, wo die alte Fassung ausdrücklich weicht (auftrag.ersetzt). - komprimieren() lässt HandBrake auf „<name>.teil.mkv" schreiben und benennt erst die fertige Datei um; nach Abbruch oder Fehler werden die Reste (auch eine Datei daneben) entfernt. Vorher blieb eine halbe Datei unter dem endgültigen Namen liegen — ohne Arbeitsordner direkt in der Ablage, wo Jellyfin sie als kaputten Film zeigte. WARUM: Durchsicht 12.09.2026, Funde F3 und F9 — mit Tests (Season-Ordner mit Bestand, Kollision, Zwischenname, Reste). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
8c4456d005
commit
904e4b2ef6
@@ -347,3 +347,51 @@ describe('Wiederholen ersetzt die alte Fassung', () => {
|
||||
expect(readFileSync(alt, 'utf8')).toBe('alt')
|
||||
})
|
||||
})
|
||||
|
||||
// ── 5.7.0: Funde der Durchsicht vom 12.09.2026 ─────────────────────────
|
||||
describe('komprimierenUndAblegen — Durchsicht 5.7.0', () => {
|
||||
// F3: Disc 2 derselben Staffel landet im selben Season-Ordner wie Disc 1.
|
||||
// Vorher zählte die Umbenennung ALLE MKVs des Ordners („4 Dateien, 2
|
||||
// Zuordnungen") und tat nichts — der Serien-Merker lief ins Leere.
|
||||
it('F3: zweite Disc in denselben Season-Ordner — nur ihre Folgen werden benannt', async () => {
|
||||
const { ablage, roh, dateien } = aufbau(['title_t00.mkv', 'title_t01.mkv'], ['folge', 'folge'])
|
||||
const season = join(ablage, 'Serien', 'Spartacus', 'Season 01')
|
||||
mkdirSync(season, { recursive: true })
|
||||
writeFileSync(join(season, 'Spartacus S01E01.mkv'), 'disc1')
|
||||
writeFileSync(join(season, 'Spartacus S01E02.mkv'), 'disc1')
|
||||
const ergebnis = await komprimierenUndAblegen(
|
||||
auftrag({ rohOrdner: roh, dateien, zuordnung: zuordnung('tv', 'Spartacus', 2010), staffel: 1, ersteFolge: 3 }),
|
||||
umgebung(ablage),
|
||||
() => {},
|
||||
KEIN_ABBRUCH,
|
||||
)
|
||||
expect(ergebnis.status).toBe('fertig')
|
||||
expect(readdirSync(season).filter((n) => n.endsWith('.mkv')).sort()).toEqual([
|
||||
'Spartacus S01E01.mkv',
|
||||
'Spartacus S01E02.mkv',
|
||||
'Spartacus S01E03.mkv',
|
||||
'Spartacus S01E04.mkv',
|
||||
])
|
||||
expect(readFileSync(join(season, 'Spartacus S01E01.mkv'), 'utf8')).toBe('disc1')
|
||||
expect(ergebnis.folgenVergeben).toEqual([3, 4])
|
||||
})
|
||||
|
||||
// F3: Liegt im Season-Ordner noch ein title_t00.mkv der ersten Disc
|
||||
// (deren Umbenennung ausfiel), darf die zweite es NICHT überschreiben.
|
||||
it('F3: gleichnamige Datei im Ziel wird nie überschrieben — „(2)" statt Verlust', async () => {
|
||||
const { ablage, roh, dateien } = aufbau(['title_t00.mkv'], ['folge'])
|
||||
const season = join(ablage, 'Serien', 'Spartacus', 'Season 01')
|
||||
mkdirSync(season, { recursive: true })
|
||||
writeFileSync(join(season, 'title_t00.mkv'), 'disc1-unbenannt')
|
||||
const ergebnis = await komprimierenUndAblegen(
|
||||
auftrag({ rohOrdner: roh, dateien, zuordnung: zuordnung('tv', 'Spartacus', 2010), staffel: 1 }),
|
||||
umgebung(ablage),
|
||||
() => {},
|
||||
KEIN_ABBRUCH,
|
||||
)
|
||||
expect(ergebnis.status).toBe('fertig')
|
||||
expect(readFileSync(join(season, 'title_t00.mkv'), 'utf8')).toBe('disc1-unbenannt')
|
||||
expect(existsSync(join(season, 'title_t00 (2).mkv'))).toBe(true)
|
||||
expect(ergebnis.dateien.map((d) => d.split(/[\\/]/).pop())).toEqual(['title_t00 (2).mkv'])
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user