diff --git a/server/lib/rss-sync.ts b/server/lib/rss-sync.ts index 1010b83..9eb0c67 100644 --- a/server/lib/rss-sync.ts +++ b/server/lib/rss-sync.ts @@ -109,10 +109,11 @@ function readOrganized(): Record> { function getOrganizedEpisodeIds(sd: any, organized: Record>): Set { const ids = new Set() - const manual = organized['manual'] ?? {} + // Sous n'importe quel hash : évite de retélécharger un épisode importé via un torrent disparu du scraper + const tracked = new Set(Object.values(organized).flatMap(eps => Object.keys(eps))) for (const season of sd.seasons ?? []) for (const ep of season.episodes ?? []) - if (manual[String(ep.id)]) ids.add(ep.id) + if (tracked.has(String(ep.id))) ids.add(ep.id) for (const t of sd.torrents ?? []) { const orgFiles = organized[t.infohash?.toLowerCase()] ?? {} diff --git a/server/lib/serie-helpers.ts b/server/lib/serie-helpers.ts index 6dbeda4..9d306f1 100644 --- a/server/lib/serie-helpers.ts +++ b/server/lib/serie-helpers.ts @@ -246,15 +246,9 @@ export function computeSerieDownloadState(serieData: any | null, organized: Reco } } - const manualOrg = organized['manual'] ?? {} - for (const season of serieData.seasons ?? []) { - for (const ep of season.episodes ?? []) { - if (manualOrg[String(ep.id)]) { - const key = epIdToKey.get(ep.id) - if (key) organizedEpKeys.add(key) - } - } - } + const trackedIds = new Set(Object.values(organized).flatMap(eps => Object.keys(eps))) + for (const [id, key] of epIdToKey) + if (trackedIds.has(String(id))) organizedEpKeys.add(key) if (uniqueEpKeys.size === 0 || organizedEpKeys.size === 0) return 'none' if (organizedEpKeys.size >= uniqueEpKeys.size) return 'complete' diff --git a/server/routes/series.ts b/server/routes/series.ts index b463a4b..4d2cacf 100644 --- a/server/routes/series.ts +++ b/server/routes/series.ts @@ -58,10 +58,11 @@ router.get('/series/:id', requireAuth, async (req, res) => { const integraleTorrents : any[] = [] const organizedEpisodeIds = new Set() - const manualOrg = organized['manual'] ?? {} + // Importé = une entrée pour l'épisode sous n'importe quel hash : les torrents du scraper peuvent disparaître + const trackedIds = new Set(Object.values(organized).flatMap(eps => Object.keys(eps))) for (const season of seasonsWithEpisodes) { for (const ep of season.episodes) { - if (manualOrg[String(ep.id)]) organizedEpisodeIds.add(ep.id) + if (trackedIds.has(String(ep.id))) organizedEpisodeIds.add(ep.id) } } if (serieData) {