dev: bump to 0.1.85.0-dev settings.xml auf Kodi 19+ Format (version=1) migriert, Level-Filter fuer Expert/Advanced korrigiert

This commit is contained in:
2026-04-01 22:51:17 +02:00
parent e5d93e3af6
commit 82c90110e4
5 changed files with 938 additions and 153 deletions

View File

@@ -205,6 +205,19 @@ def _set_trakt_ids_property(title: str, tmdb_id: int, imdb_id: str = "") -> None
# Trakt-Helfer
# ---------------------------------------------------------------------------
_PREFERRED_HOSTERS_LIST = ["voe", "streamtape", "doodstream", "vidoza", "mixdrop", "supervideo", "dropload"]
def _get_preferred_hoster() -> str:
"""Liest preferred_hoster (enum-Index) und gibt den Hosternamen zurück."""
raw = _get_setting_string("preferred_hoster").strip()
try:
idx = int(raw)
return _PREFERRED_HOSTERS_LIST[idx]
except (ValueError, IndexError):
return raw # Fallback: alten Textwert direkt verwenden
def _trakt_load_token():
"""Laedt den gespeicherten Trakt-Token aus den Addon-Settings."""
access = _get_setting_string("trakt_access_token").strip()
@@ -225,6 +238,7 @@ def _trakt_save_token(token) -> None:
addon.setSetting("trakt_access_token", token.access_token)
addon.setSetting("trakt_refresh_token", token.refresh_token)
addon.setSetting("trakt_token_expires", str(token.expires_at))
addon.setSetting("trakt_status", "Verbunden" if token.access_token else "Nicht verbunden")
TRAKT_CLIENT_ID = "5f1a46be11faa2ef286d6a5d4fbdcdfe3b19c87d3799c11af8cf25dae5b802e9"
@@ -1542,6 +1556,13 @@ def _sync_update_channel_status_settings() -> None:
_set_setting_string("update_active_channel", _channel_label(channel))
_set_setting_string("update_active_repo_url", selected_info_url)
_set_setting_string("update_available_selected", available_selected)
installed = _get_setting_string("update_installed_version").strip()
has_update = (
bool(available_selected) and available_selected not in ("-", "", "0.0.0")
and bool(installed) and installed not in ("-", "", "0.0.0")
and _version_sort_key(available_selected) > _version_sort_key(installed)
)
_get_addon().setSettingBool("update_available_flag", has_update)
def _repo_addon_xml_path() -> str:
@@ -4388,7 +4409,7 @@ def _play_episode(
selected_hoster: str | None = None
forced_hoster = (forced_hoster or "").strip()
autoplay = _get_setting_bool("autoplay_enabled", default=False)
preferred = _get_setting_string("preferred_hoster").strip()
preferred = _get_preferred_hoster()
if available_hosters:
if forced_hoster:
for hoster in available_hosters:
@@ -4507,7 +4528,7 @@ def _play_episode_url(
selected_hoster: str | None = None
autoplay = _get_setting_bool("autoplay_enabled", default=False)
preferred = _get_setting_string("preferred_hoster").strip()
preferred = _get_preferred_hoster()
if available_hosters:
if autoplay and preferred:
pref_lower = preferred.casefold()
@@ -4716,28 +4737,34 @@ def _show_country_titles_page(plugin_name: str, country: str, page: int = 1) ->
xbmcplugin.endOfDirectory(handle)
def _show_collections_menu(plugin_name: str) -> None:
"""Zeigt Sammlungen/Filmreihen eines Plugins (Capability: collections)."""
def _show_collections_menu(plugin_name: str, page: int = 1) -> None:
"""Zeigt Sammlungen/Filmreihen eines Plugins (Capability: collections) - paginiert."""
handle = _get_handle()
plugin = _discover_plugins().get(plugin_name)
if plugin is None:
xbmcgui.Dialog().notification("Sammlungen", "Quelle nicht gefunden.", xbmcgui.NOTIFICATION_INFO, 3000)
xbmcplugin.endOfDirectory(handle)
return
getter = getattr(plugin, "collections", None)
if not callable(getter):
page_getter = getattr(plugin, "_collections_page", None)
if not callable(page_getter):
xbmcplugin.endOfDirectory(handle)
return
xbmcplugin.setPluginCategory(handle, f"{plugin_name}: Sammlungen")
xbmcplugin.setPluginCategory(handle, f"{plugin_name}: Sammlungen (Seite {page})")
try:
cols = list(getter() or [])
cols = list(page_getter(page) or [])
except Exception as exc:
_log(f"Sammlungen konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING)
_log(f"Sammlungen (Seite {page}) konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING)
xbmcplugin.endOfDirectory(handle)
return
if page > 1:
_add_directory_item(handle, "Vorherige Seite", "collections_menu",
{"plugin": plugin_name, "page": str(page - 1)}, is_folder=True)
for col in cols:
_add_directory_item(handle, str(col), "collection_titles_page",
{"plugin": plugin_name, "collection": str(col), "page": "1"}, is_folder=True)
if cols:
_add_directory_item(handle, "Naechste Seite", "collections_menu",
{"plugin": plugin_name, "page": str(page + 1)}, is_folder=True)
xbmcplugin.endOfDirectory(handle)
@@ -4792,8 +4819,9 @@ def _show_collection_titles_page(plugin_name: str, collection: str, page: int =
_add_directory_item(handle, title, "seasons",
{"plugin": plugin_name, "title": title, **_series_url_params(plugin, title)},
is_folder=True, info_labels=info_labels, art=art, cast=cast)
_add_directory_item(handle, "Naechste Seite", "collection_titles_page",
{"plugin": plugin_name, "collection": collection, "page": str(page + 1)}, is_folder=True)
if getattr(plugin, "_collection_has_more", False):
_add_directory_item(handle, "Naechste Seite", "collection_titles_page",
{"plugin": plugin_name, "collection": collection, "page": str(page + 1)}, is_folder=True)
xbmcplugin.endOfDirectory(handle)
@@ -5438,7 +5466,10 @@ def _route_country_titles_page(params: dict[str, str]) -> None:
@_router.route("collections_menu")
def _route_collections_menu(params: dict[str, str]) -> None:
_show_collections_menu(params.get("plugin", ""))
_show_collections_menu(
params.get("plugin", ""),
_parse_positive_int(params.get("page", "1"), default=1),
)
@_router.route("collection_titles_page")
@@ -5540,12 +5571,19 @@ def _route_fallback(params: dict[str, str]) -> None:
_show_root_menu()
def _sync_trakt_status_setting() -> None:
"""Setzt trakt_status anhand des gespeicherten Tokens."""
connected = bool(_trakt_load_token())
_get_addon().setSetting("trakt_status", "Verbunden" if connected else "Nicht verbunden")
def run() -> None:
params = _parse_params()
action = params.get("action")
_log(f"Action: {action}", xbmc.LOGDEBUG)
_maybe_run_auto_update_check(action)
_maybe_auto_install_resolveurl(action)
_sync_trakt_status_setting()
_router.dispatch(action=action, params=params)