Fix missing seasons and episodes translations

This commit is contained in:
Zoe Roux 2024-05-14 23:48:15 +02:00
parent 47f364840b
commit e02912119b
No known key found for this signature in database
2 changed files with 13 additions and 14 deletions

View File

@ -9,6 +9,7 @@ from langcodes import Language
from matcher.cache import cache from matcher.cache import cache
from ..provider import Provider, ProviderError from ..provider import Provider, ProviderError
from ..utils import normalize_lang
from ..types.season import Season, SeasonTranslation from ..types.season import Season, SeasonTranslation
from ..types.episode import Episode, EpisodeTranslation, PartialShow, EpisodeID from ..types.episode import Episode, EpisodeTranslation, PartialShow, EpisodeID
from ..types.studio import Studio from ..types.studio import Studio
@ -75,9 +76,6 @@ class TVDB(Provider):
"awards-show": None, "awards-show": None,
} }
def normalize_lang(self, lang: str) -> str:
return str(Language.get(lang))
@cache(ttl=timedelta(days=30)) @cache(ttl=timedelta(days=30))
async def login(self) -> str: async def login(self) -> str:
async with self._client.post( async with self._client.post(
@ -149,7 +147,7 @@ class TVDB(Provider):
try: try:
path = f"series/{show_id}/episodes/default" path = f"series/{show_id}/episodes/default"
if language is not None: if language is not None:
path += "/{language}" path += f"/{language}"
ret = await self.get( ret = await self.get(
path, path,
not_found_fail=f"Could not find show with id {show_id}", not_found_fail=f"Could not find show with id {show_id}",
@ -195,10 +193,6 @@ class TVDB(Provider):
f"Could not retrive episode {show['name']} s{season}e{episode_nbr}, absolute {absolute}" f"Could not retrive episode {show['name']} s{season}e{episode_nbr}, absolute {absolute}"
) )
languages = self._languages
if show["originalLanguage"] not in languages:
languages = [*self._languages, show["originalLanguage"]]
translations.append(await self.get_episodes(show_id))
trans = [ trans = [
( (
next((ep for ep in el[0] if ep["id"] == ret["id"]), None) next((ep for ep in el[0] if ep["id"] == ret["id"]), None)
@ -209,18 +203,18 @@ class TVDB(Provider):
] ]
ep_trans = { ep_trans = {
self.normalize_lang(lang): EpisodeTranslation( normalize_lang(lang): EpisodeTranslation(
name=val["name"], name=val["name"],
overview=val["overview"], overview=val["overview"],
) )
for lang, val in zip(languages, trans) for lang, val in zip(self._languages, trans)
if val is not None if val is not None
} }
return Episode( return Episode(
show=PartialShow( show=PartialShow(
name=show["name"], name=show["name"],
original_language=self.normalize_lang(show["originalLanguage"]), original_language=normalize_lang(show["originalLanguage"]),
external_id={ external_id={
self.name: MetadataID( self.name: MetadataID(
show_id, f"https://thetvdb.com/series/{show['slug']}" show_id, f"https://thetvdb.com/series/{show['slug']}"
@ -295,13 +289,13 @@ class TVDB(Provider):
*(process_translation(lang) for lang in languages) *(process_translation(lang) for lang in languages)
) )
trans = { trans = {
self.normalize_lang(lang): ts normalize_lang(lang): ts
for (lang, ts) in zip(self._languages, translations) for (lang, ts) in zip(self._languages, translations)
if ts is not None if ts is not None
} }
ret = ret["data"] ret = ret["data"]
return Show( return Show(
original_language=self.normalize_lang(ret["originalLanguage"]), original_language=normalize_lang(ret["originalLanguage"]),
aliases=[x["name"] for x in ret["aliases"]], aliases=[x["name"] for x in ret["aliases"]],
start_air=datetime.strptime(ret["firstAired"], "%Y-%m-%d").date(), start_air=datetime.strptime(ret["firstAired"], "%Y-%m-%d").date(),
end_air=datetime.strptime(ret["lastAired"], "%Y-%m-%d").date(), end_air=datetime.strptime(ret["lastAired"], "%Y-%m-%d").date(),
@ -403,7 +397,7 @@ class TVDB(Provider):
trans = await asyncio.gather(*(process_translation(x) for x in self._languages)) trans = await asyncio.gather(*(process_translation(x) for x in self._languages))
translations = { translations = {
self.normalize_lang(lang): tl normalize_lang(lang): tl
for lang, tl in zip(self._languages, trans) for lang, tl in zip(self._languages, trans)
if tl is not None if tl is not None
} }

View File

@ -3,6 +3,7 @@ from __future__ import annotations
import os import os
from datetime import date from datetime import date
from itertools import chain from itertools import chain
from langcodes import Language
from typing import TYPE_CHECKING, Literal, Any, Optional from typing import TYPE_CHECKING, Literal, Any, Optional
if TYPE_CHECKING: if TYPE_CHECKING:
@ -21,6 +22,10 @@ def format_date(date: date | int | None) -> str | None:
return date.isoformat() return date.isoformat()
def normalize_lang(lang: str) -> str:
return str(Language.get(lang))
# For now, the API of kyoo only support one language so we remove the others. # For now, the API of kyoo only support one language so we remove the others.
default_languages = os.environ["LIBRARY_LANGUAGES"].split(",") default_languages = os.environ["LIBRARY_LANGUAGES"].split(",")