diff --git a/src/main/download-manager.ts b/src/main/download-manager.ts index e0b72b2..3bae838 100644 --- a/src/main/download-manager.ts +++ b/src/main/download-manager.ts @@ -1029,7 +1029,14 @@ function hasSceneGroupSuffix(fileName: string): boolean { const fallbackMatch = text.match(SCENE_GROUP_SUFFIX_FALLBACK_RE); 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 diff --git a/tests/auto-rename.test.ts b/tests/auto-rename.test.ts index fb14d69..81b7b82 100644 --- a/tests/auto-rename.test.ts +++ b/tests/auto-rename.test.ts @@ -112,6 +112,22 @@ describe("decideAutoRenameBaseName (shared naming decision — used by auto-rena ); 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", () => {