From 97e472b7d5ba83522b2d9d02104853edb72f319b Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Fri, 13 Mar 2026 18:36:25 +0100 Subject: [PATCH] Properly handle missing aboslute numbers of tvdb --- scanner/scanner/fsscan.py | 1 + scanner/scanner/providers/thetvdb.py | 42 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/scanner/scanner/fsscan.py b/scanner/scanner/fsscan.py index d738a734..759704f3 100644 --- a/scanner/scanner/fsscan.py +++ b/scanner/scanner/fsscan.py @@ -103,6 +103,7 @@ class FsScanner: await self.scan(file) case Change.added: logger.info("New video found: %s", file) + self._info = await self._client.get_videos_info() await self._register([file]) case Change.deleted: logger.info("Delete video at: %s", file) diff --git a/scanner/scanner/providers/thetvdb.py b/scanner/scanner/providers/thetvdb.py index b1291465..e9032d01 100644 --- a/scanner/scanner/providers/thetvdb.py +++ b/scanner/scanner/providers/thetvdb.py @@ -551,6 +551,48 @@ class TVDB(Provider): if entry.extra["linked_movie"]: ret[i] = await self.process_movie_entry(entry) + # guess absolute numbers for episodes where tvdb has not assigned one (order=0). + season_refs: dict[int, list[tuple[int, float]]] = {} + for entry in ret: + if ( + entry.order != 0 + and entry.kind == "episode" + and entry.season_number is not None + and entry.episode_number is not None + ): + season_refs.setdefault(entry.season_number, []).append( + (entry.episode_number, entry.order) + ) + for entry in ret: + if ( + entry.order != 0 + or entry.kind != "episode" + or entry.season_number is None + or entry.episode_number is None + ): + continue + + refs = season_refs.get(entry.season_number) + if refs: + # Use a reference episode from the same season: + ref_ep, ref_abs = refs[0] + entry.order = ref_abs - ref_ep + entry.episode_number + else: + prev_season = season_refs.get(entry.season_number - 1) + if prev_season: + entry.order = ( + max(abs for _ep, abs in prev_season) + entry.episode_number + ) + else: + # we hope it's season 1 + entry.order = entry.episode_number + + season_refs.setdefault(entry.season_number, []).append( + (entry.episode_number, entry.order) + ) + + # handle specials and such that are between seasons + for entry in ret: if entry.order != 0: continue