From 8fab68a0e4db0c5975ef175d584c48e38ea35af1 Mon Sep 17 00:00:00 2001 From: MasutaYunikon Date: Fri, 13 Mar 2026 02:51:41 +0100 Subject: [PATCH] fix: season fallback --- server/organize-worker.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/server/organize-worker.ts b/server/organize-worker.ts index bd2ecd4..9fd1936 100644 --- a/server/organize-worker.ts +++ b/server/organize-worker.ts @@ -249,10 +249,26 @@ async function organizeTorrent(hash: string, name: string, savePath: string) { } // ── Map filename → season ───────────────────────────────── + // Priorité : season_number dans torrent_files (packs multi-saisons) + // Fallback : resolved_episodes matchés par episode_number (torrents individuels) const filenameSeasonMap = new Map() + + // Index resolved_episodes par episode_number pour lookup rapide + const epByNum = new Map() // ep_number → season_number for (const ep of torrent.resolved_episodes ?? []) { - if (ep.filename && ep.season_number !== undefined) - filenameSeasonMap.set(ep.filename, ep.season_number) + if (ep.episode_number !== undefined && ep.season_number !== undefined) + epByNum.set(ep.episode_number, ep.season_number) + } + + for (const tf of torrentFiles) { + const sn: number | null = tf.season_number ?? null + if (sn !== null) { + filenameSeasonMap.set(tf.filename, sn) + } else if (tf.num !== undefined && epByNum.has(tf.num)) { + filenameSeasonMap.set(tf.filename, epByNum.get(tf.num)!) + } else if (torrent.season_number !== undefined) { + filenameSeasonMap.set(tf.filename, torrent.season_number) + } } result.total = torrentFiles.length