Add original language data fetching for episodes and series

This commit is contained in:
Zoe Roux 2024-05-14 01:13:29 +02:00
parent fee6faceaa
commit 95a2766aee
No known key found for this signature in database

View File

@ -144,11 +144,14 @@ class TVDB(Provider):
async def get_episodes( async def get_episodes(
self, self,
show_id: str, show_id: str,
language: str, language: Optional[str] = None,
): ):
try: try:
path = f"series/{show_id}/episodes/default"
if language is not None:
path += "/{language}"
ret = await self.get( ret = await self.get(
f"series/{show_id}/episodes/default/{language}", 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}",
) )
episodes = ret["data"]["episodes"] episodes = ret["data"]["episodes"]
@ -192,6 +195,10 @@ 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)
@ -201,12 +208,12 @@ class TVDB(Provider):
for el in translations for el in translations
] ]
translations = { ep_trans = {
self.normalize_lang(lang): EpisodeTranslation( self.normalize_lang(lang): EpisodeTranslation(
name=val["name"], name=val["name"],
overview=val["overview"], overview=val["overview"],
) )
for lang, val in zip(self._languages, trans) for lang, val in zip(languages, trans)
if val is not None if val is not None
} }
@ -234,7 +241,7 @@ class TVDB(Provider):
f"https://thetvdb.com/series/{show_id}/episodes/{ret['id']}", f"https://thetvdb.com/series/{show_id}/episodes/{ret['id']}",
), ),
}, },
translations=translations, translations=ep_trans,
) )
@cache(ttl=timedelta(days=1)) @cache(ttl=timedelta(days=1))
@ -246,7 +253,11 @@ class TVDB(Provider):
logger.debug("TVDB responded: %s", ret) logger.debug("TVDB responded: %s", ret)
async def process_translation(lang: str) -> Optional[ShowTranslation]: async def process_translation(lang: str) -> Optional[ShowTranslation]:
data = await self.get(f"series/{show_id}/translations/{lang}") data = (
await self.get(f"series/{show_id}/translations/{lang}")
if lang is not ret["orginalLanguage"]
else ret
)
return ShowTranslation( return ShowTranslation(
name=data["data"]["name"], name=data["data"]["name"],
tagline=None, tagline=None,
@ -275,8 +286,13 @@ class TVDB(Provider):
], ],
) )
languages = (
[*self._languages, ret["originalLanguage"]]
if ret["originalLanguage"] not in self._languages
else self._languages
)
translations = await asyncio.gather( translations = await asyncio.gather(
*(process_translation(lang) for lang in self._languages) *(process_translation(lang) for lang in languages)
) )
trans = { trans = {
self.normalize_lang(lang): ts self.normalize_lang(lang): ts