From 1969c21c11d46ded8914876f4bebdd652b723b6e Mon Sep 17 00:00:00 2001 From: "itdrui.de" Date: Wed, 11 Mar 2026 21:33:19 +0100 Subject: [PATCH] dev: TMDB API-Key automatisch aus Kodi-Scraper ermitteln --- CHANGELOG-DEV.md | 4 ++++ addon/addon.xml | 2 +- addon/core/metadata.py | 26 ++++++++++++++++++++++---- addon/default.py | 12 ++++++++++++ addon/resources/settings.xml | 3 ++- 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/CHANGELOG-DEV.md b/CHANGELOG-DEV.md index 5c06b3e..bcc3728 100644 --- a/CHANGELOG-DEV.md +++ b/CHANGELOG-DEV.md @@ -1,3 +1,7 @@ +## 0.1.78.5-dev - 2026-03-11 + +- dev: Uhrzeit aus Episodentitel entfernen, tvshow-Mediatype fix + ## 0.1.78.0-dev - 2026-03-11 - dev: Trakt-Scrobbling fuer alle Wiedergabe-Pfade diff --git a/addon/addon.xml b/addon/addon.xml index f9776e2..9bd1154 100644 --- a/addon/addon.xml +++ b/addon/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/addon/core/metadata.py b/addon/core/metadata.py index f246df5..6d74be8 100644 --- a/addon/core/metadata.py +++ b/addon/core/metadata.py @@ -52,6 +52,24 @@ def _require_init() -> None: print("[ViewIT/metadata] WARNUNG: metadata.init() wurde nicht aufgerufen – Metadaten-Funktionen arbeiten mit Standardwerten!", file=sys.stderr) +def _resolve_tmdb_api_key(user_key: str) -> str: + """Key aus ViewIT-Settings, installiertem Kodi-Scraper oder Community-Fallback.""" + if user_key: + return user_key + if xbmcaddon: + for addon_id in ( + "metadata.tvshows.themoviedb.org.python", + "metadata.themoviedb.org.python", + ): + try: + key = xbmcaddon.Addon(addon_id).getSetting("tmdb_apikey") + if key: + return key + except RuntimeError: + pass + return "80246691939720672db3fc71c74e0ef2" + + def init( *, get_setting_string: Callable[[str], str], @@ -153,7 +171,7 @@ def tmdb_labels_and_art(title: str) -> tuple[dict[str, str], dict[str, str], lis art: dict[str, str] = {} cast: list[TmdbCastMember] = [] query = (title or "").strip() - api_key = _get_setting_string("tmdb_api_key").strip() + api_key = _resolve_tmdb_api_key(_get_setting_string("tmdb_api_key").strip()) log_requests = _get_setting_bool("tmdb_log_requests", default=False) log_responses = _get_setting_bool("tmdb_log_responses", default=False) if api_key: @@ -295,7 +313,7 @@ def tmdb_episode_labels_and_art(*, title: str, season_label: str, episode_label: season_key = (tmdb_id, season_number, language, flags) cached_season = tmdb_cache_get(_TMDB_SEASON_CACHE, season_key) if cached_season is None: - api_key = _get_setting_string("tmdb_api_key").strip() + api_key = _resolve_tmdb_api_key(_get_setting_string("tmdb_api_key").strip()) if not api_key: return {"title": episode_label}, {} log_requests = _get_setting_bool("tmdb_log_requests", default=False) @@ -358,7 +376,7 @@ def tmdb_episode_cast(*, title: str, season_label: str, episode_label: str) -> l if cached is not None: return list(cached) - api_key = _get_setting_string("tmdb_api_key").strip() + api_key = _resolve_tmdb_api_key(_get_setting_string("tmdb_api_key").strip()) if not api_key: tmdb_cache_set(_TMDB_EPISODE_CAST_CACHE, cache_key, []) return [] @@ -398,7 +416,7 @@ def tmdb_season_labels_and_art( show_plot = _get_setting_bool("tmdb_show_plot", default=True) show_art = _get_setting_bool("tmdb_show_art", default=True) flags = f"p{int(show_plot)}a{int(show_art)}" - api_key = _get_setting_string("tmdb_api_key").strip() + api_key = _resolve_tmdb_api_key(_get_setting_string("tmdb_api_key").strip()) log_requests = _get_setting_bool("tmdb_log_requests", default=False) log_responses = _get_setting_bool("tmdb_log_responses", default=False) log_fn = tmdb_file_log if (log_requests or log_responses) else None diff --git a/addon/default.py b/addon/default.py index 8e1267a..22f4065 100644 --- a/addon/default.py +++ b/addon/default.py @@ -1681,6 +1681,17 @@ def _maybe_auto_install_resolveurl(action: str | None) -> None: _ensure_resolveurl_installed(force=False, silent=True) +def _sync_tmdb_active_key_setting() -> None: + from core.metadata import _resolve_tmdb_api_key + raw_key = _get_setting_string("tmdb_api_key").strip() + active_key = _resolve_tmdb_api_key(raw_key) + if active_key: + masked = active_key[:6] + "…" + active_key[-4:] if len(active_key) > 10 else active_key + else: + masked = "(kein)" + _set_setting_string("tmdb_api_key_active", masked) + + def _sync_update_version_settings() -> None: addon_version = _installed_addon_version_from_disk() if addon_version == "0.0.0": @@ -1693,6 +1704,7 @@ def _sync_update_version_settings() -> None: _set_setting_string("update_installed_version", addon_version) _sync_resolveurl_status_setting() _sync_update_channel_status_settings() + _sync_tmdb_active_key_setting() def _show_root_menu() -> None: diff --git a/addon/resources/settings.xml b/addon/resources/settings.xml index d7bca8b..e178104 100644 --- a/addon/resources/settings.xml +++ b/addon/resources/settings.xml @@ -29,7 +29,8 @@ - + +