From 8ce0ca1f24d5d1a2fe03065165b867922d11932f Mon Sep 17 00:00:00 2001 From: MasutaYunikon Date: Fri, 13 Mar 2026 19:02:38 +0100 Subject: [PATCH] feat: fix worker for multiple series in integral (one piece fix ?) --- server/organize-worker.ts | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/server/organize-worker.ts b/server/organize-worker.ts index f7d9de1..eefac19 100644 --- a/server/organize-worker.ts +++ b/server/organize-worker.ts @@ -218,8 +218,35 @@ async function organizeTorrent(hash: string, name: string, savePath: string) { // ── Téléchargement NFO/images depuis GitLab ─────────────── if (nfoSupport) { - const serieDestRoot = path.join(mediaPath, serieTitle) - await downloadGitlabFolder(serieTitle, serieDestRoot) + // Collecter tous les titres de séries distincts depuis resolved_episodes + // (un pack_integrale peut mélanger plusieurs séries, ex: One Piece Yabai + Kaï) + const serieTitlesMap = new Map() + + // Titre principal du torrent + serieTitlesMap.set(torrent.serie_id ?? 0, serieTitle) + + // Titres alternatifs depuis resolved_episodes + // resolved_episodes n'a pas toujours serie_title → on cherche dans torrent_final.json + const allTorrents: any[] = (() => { + try { return JSON.parse(fs.readFileSync(TORRENTS_PATH, 'utf-8')) } catch { return [] } + })() + const serieIdToTitle = new Map() + for (const t of allTorrents) { + if (t.serie_id && t.serie_title) serieIdToTitle.set(t.serie_id, t.serie_title) + } + + for (const ep of torrent.resolved_episodes ?? []) { + if (ep.serie_id && !serieTitlesMap.has(ep.serie_id)) { + const title = ep.serie_title ?? serieIdToTitle.get(ep.serie_id) + if (title) serieTitlesMap.set(ep.serie_id, title) + } + } + + // Télécharger NFO pour chaque série distincte + for (const title of serieTitlesMap.values()) { + const serieDestRoot = path.join(mediaPath, title) + await downloadGitlabFolder(title, serieDestRoot) + } } // ── Cas fichier unique ────────────────────────────────────