Renaming: Scene-Gruppen mit Unterstrich erkennen (-idTV_iNT) — kein Verschlimmbessern zum Paketnamen

User-Report (aus Desktop-Rename-Log): castle.s08e02.german.dl.720p.web.h264-idtv_int.mkv im
sauberen Episoden-Ordner "Castle.S08E02.GERMAN.DL.720p.WEB.H264-idTV_iNT" (Paket "scn2-cstl7")
wurde zu "scn2-cstl7.S08E02.mkv" VERSCHLIMMBESSERT (guter Quellname -> obfuskierter Paketname).

Ursache (vorbestehend, nicht durch v1.7.178): hasSceneGroupSuffix erkannte die Scene-Gruppe
"-idTV_iNT" nicht (SCENE_GROUP_SUFFIX_RE + Fallback verbieten Unterstriche). Der saubere
Episoden-Ordner wurde dadurch als Nicht-Scene-Ordner verworfen, und die Namensherleitung fiel
auf den obfuskierten Paket-Ordner "scn2-cstl7" zurueck -> "scn2-cstl7.S08E02".

Fix: hasSceneGroupSuffix nutzt jetzt zusaetzlich extractFlexibleSceneGroupSuffix (existierte
bereits, war aber nicht verdrahtet), das Unterstrich-Gruppen korrekt erkennt (splittet auf "_",
validiert jeden Teil). Der saubere Ordner wird akzeptiert -> idealer Name
"Castle.S08E02.GERMAN.DL.720p.WEB.H264-idTV_iNT". Mein v1.7.178-Folder-Token-Guard schuetzt
generische Paketordner (Mega-Direct) weiterhin.

Verifiziert: tsc 6, 679 Tests gruen (+1 Charakterisierung fuer den idTV_iNT-Fall), Build gruen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sucukdeluxe 2026-06-03 11:55:42 +02:00
parent f2e9de8da0
commit 5349554b01
2 changed files with 24 additions and 1 deletions

View File

@ -1029,7 +1029,14 @@ function hasSceneGroupSuffix(fileName: string): boolean {
const fallbackMatch = text.match(SCENE_GROUP_SUFFIX_FALLBACK_RE); const fallbackMatch = text.match(SCENE_GROUP_SUFFIX_FALLBACK_RE);
const suffix = String(fallbackMatch?.[1] || "").trim(); const suffix = String(fallbackMatch?.[1] || "").trim();
return isValidSceneGroupSuffix(suffix); if (isValidSceneGroupSuffix(suffix)) {
return true;
}
// Auch Scene-Gruppen MIT Unterstrich erkennen (z.B. "-idTV_iNT", "-NZ_iNT", "-DUBBED_iNT").
// Sonst wird ein sauber benannter Episoden-Ordner wie "Castle.S08E02.GERMAN.DL.720p.WEB.H264-
// idTV_iNT" faelschlich NICHT als Scene-Ordner erkannt → die Namensherleitung faellt auf den
// obfuskierten Paket-Ordner ("scn2-cstl7") zurueck und verschlimmbessert den Namen.
return extractFlexibleSceneGroupSuffix(text) !== null;
} }
/** Older scene releases used "1x01" instead of "S01E01". The episode group /** Older scene releases used "1x01" instead of "S01E01". The episode group

View File

@ -112,6 +112,22 @@ describe("decideAutoRenameBaseName (shared naming decision — used by auto-rena
); );
expect(decision.kind).toBe("skip"); expect(decision.kind).toBe("skip");
}); });
it("uses the CLEAN per-episode folder (scene group WITH underscore, e.g. -idTV_iNT) — not the obfuscated package folder", () => {
// User-Report v1.7.178: castle.s08e02....mkv im sauberen Ordner "Castle.S08E02...H264-idTV_iNT"
// (Paket: "scn2-cstl7") wurde zu "scn2-cstl7.S08E02" verschlimmbessert, weil hasSceneGroupSuffix
// die Unterstrich-Gruppe "-idTV_iNT" nicht erkannte und auf den Paketordner zurueckfiel.
const epFolder = "Castle.S08E02.GERMAN.DL.720p.WEB.H264-idTV_iNT";
const decision = decideAutoRenameBaseName(
[epFolder, "scn2-cstl7"],
"castle.s08e02.german.dl.720p.web.h264-idtv_int.mkv",
"castle.s08e02.german.dl.720p.web.h264-idtv_int",
epFolder,
"scn2-cstl7"
);
expect(decision.kind).toBe("rename");
expect(decision.kind === "rename" && decision.baseName).toBe(epFolder);
});
}); });
describe("hasMeaningfulSeriesPrefix", () => { describe("hasMeaningfulSeriesPrefix", () => {