Properly handle missing aboslute numbers of tvdb

This commit is contained in:
Zoe Roux 2026-03-13 18:36:25 +01:00
parent 848e1154e1
commit 97e472b7d5
No known key found for this signature in database
2 changed files with 43 additions and 0 deletions

View File

@ -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)

View File

@ -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