From f8c66026045b68e2798c403b382555fbc06f2216 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Tue, 14 May 2024 02:11:30 +0200 Subject: [PATCH] Handle missing translations for episodes or seasons --- scanner/providers/types/episode.py | 12 ++++++------ scanner/providers/types/season.py | 14 ++++++-------- scanner/providers/utils.py | 12 +++++++++--- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/scanner/providers/types/episode.py b/scanner/providers/types/episode.py index 0401d4ee..8da11c44 100644 --- a/scanner/providers/types/episode.py +++ b/scanner/providers/types/episode.py @@ -1,8 +1,9 @@ -import os from datetime import date from dataclasses import dataclass, field, asdict from typing import Optional +from providers.utils import select_translation + from .show import Show from .metadataid import MetadataID @@ -24,8 +25,8 @@ class EpisodeID: @dataclass class EpisodeTranslation: - name: str - overview: Optional[str] + name: Optional[str] + overview: Optional[str] = None @dataclass @@ -45,10 +46,9 @@ class Episode: translations: dict[str, EpisodeTranslation] = field(default_factory=dict) def to_kyoo(self): - # For now, the API of kyoo only support one language so we remove the others. - default_language = os.environ["LIBRARY_LANGUAGES"].split(",")[0] + trans = select_translation(self) or EpisodeTranslation("") return { **asdict(self), - **asdict(self.translations[default_language]), + **asdict(trans), "show": None, } diff --git a/scanner/providers/types/season.py b/scanner/providers/types/season.py index 0c224ece..b553dae0 100644 --- a/scanner/providers/types/season.py +++ b/scanner/providers/types/season.py @@ -1,8 +1,9 @@ -import os from datetime import date from dataclasses import dataclass, field, asdict from typing import Optional +from providers.utils import select_translation, select_image + from .metadataid import MetadataID @@ -28,13 +29,10 @@ class Season: translations: dict[str, SeasonTranslation] = field(default_factory=dict) def to_kyoo(self): - # For now, the API of kyoo only support one language so we remove the others. - default_language = os.environ["LIBRARY_LANGUAGES"].split(",")[0] + trans = select_translation(self) or SeasonTranslation() return { **asdict(self), - **asdict(self.translations[default_language]), - "poster": next(iter(self.translations[default_language].posters), None), - "thumbnail": next( - iter(self.translations[default_language].thumbnails), None - ), + **asdict(trans), + "poster": select_image(self, "posters"), + "thumbnail": select_image(self, "thumbnails"), } diff --git a/scanner/providers/utils.py b/scanner/providers/utils.py index 452cc713..691c98fc 100644 --- a/scanner/providers/utils.py +++ b/scanner/providers/utils.py @@ -3,10 +3,15 @@ from __future__ import annotations import os from datetime import date -from typing import Literal +from typing import Literal, Any from providers.types.movie import Movie from providers.types.show import Show +from providers.types.season import Season +from providers.types.episode import Episode +from providers.types.collection import Collection + +type Resource = Movie | Show | Season | Episode | Collection def format_date(date: date | int | None) -> str | None: @@ -21,9 +26,10 @@ def format_date(date: date | int | None) -> str | None: default_languages = os.environ["LIBRARY_LANGUAGES"].split(",") -def select_translation(value: Movie | Show, *, prefer_orginal=False): +def select_translation(value: Resource, *, prefer_orginal=False) -> Any: if ( prefer_orginal + and (isinstance(value, Movie) or isinstance(value, Show)) and value.original_language and value.original_language in value.translations ): @@ -35,7 +41,7 @@ def select_translation(value: Movie | Show, *, prefer_orginal=False): def select_image( - value: Movie | Show, + value: Resource, kind: Literal["posters"] | Literal["thumbnails"] | Literal["logos"], ) -> str | None: trans = select_translation(value, prefer_orginal=True) or next(