From d9e338c9b651e547c8f548e0c43dd01d24629848 Mon Sep 17 00:00:00 2001 From: "itdrui.de" Date: Mon, 23 Feb 2026 18:28:27 +0100 Subject: [PATCH] ui: use ascii playstate markers --- addon/default.py | 93 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 77 insertions(+), 16 deletions(-) diff --git a/addon/default.py b/addon/default.py index f3f0107..dc8a9ec 100644 --- a/addon/default.py +++ b/addon/default.py @@ -231,6 +231,15 @@ def _progress_dialog(heading: str, message: str = ""): pass +def _run_with_progress(heading: str, message: str, loader): + """Fuehrt eine Ladefunktion mit sichtbarem Fortschrittsdialog aus.""" + with _progress_dialog(heading, message) as progress: + progress(10, message) + result = loader() + progress(100, "Fertig") + return result + + def _method_accepts_kwarg(method: object, kwarg_name: str) -> bool: if not callable(method): return False @@ -400,14 +409,14 @@ def _time_label(seconds: int) -> str: def _label_with_playstate(label: str, playstate: dict[str, object]) -> str: watched = bool(playstate.get("watched") or False) if watched: - return f"✓ {label}" + return f"[gesehen] {label}" resume_pos = playstate.get("resume_position") try: pos = int(resume_pos) if resume_pos is not None else 0 except Exception: pos = 0 if pos > 0: - return f"↩ {_time_label(pos)} {label}" + return f"[fortsetzen {_time_label(pos)}] {label}" return label @@ -1947,7 +1956,11 @@ def _show_genres(plugin_name: str) -> None: xbmcplugin.endOfDirectory(handle) return try: - genres = plugin.genres() + genres = _run_with_progress( + "Genres", + f"{plugin_name}: Genres werden geladen...", + lambda: plugin.genres(), + ) except Exception as exc: _log(f"Genres konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Genres", "Genres konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -1989,7 +2002,11 @@ def _show_categories(plugin_name: str) -> None: xbmcplugin.endOfDirectory(handle) return try: - categories = list(getter() or []) + categories = _run_with_progress( + "Kategorien", + f"{plugin_name}: Kategorien werden geladen...", + lambda: list(getter() or []), + ) except Exception as exc: _log(f"Kategorien konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Kategorien", "Kategorien konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2048,7 +2065,11 @@ def _show_category_titles_page(plugin_name: str, category: str, page: int = 1) - ) try: - titles = list(paging_getter(category, page) or []) + titles = _run_with_progress( + "Kategorien", + f"{plugin_name}: {category} Seite {page} wird geladen...", + lambda: list(paging_getter(category, page) or []), + ) except Exception as exc: _log(f"Kategorie-Seite konnte nicht geladen werden ({plugin_name}/{category} p{page}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Kategorien", "Seite konnte nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2164,7 +2185,11 @@ def _show_genre_titles_page(plugin_name: str, genre: str, page: int = 1) -> None ) try: - titles = list(paging_getter(genre, page) or []) + titles = _run_with_progress( + "Genres", + f"{plugin_name}: {genre} Seite {page} wird geladen...", + lambda: list(paging_getter(genre, page) or []), + ) except Exception as exc: _log(f"Genre-Seite konnte nicht geladen werden ({plugin_name}/{genre} p{page}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Genres", "Seite konnte nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2256,7 +2281,11 @@ def _show_alpha_index(plugin_name: str) -> None: xbmcplugin.endOfDirectory(handle) return try: - letters = list(getter() or []) + letters = _run_with_progress( + "A-Z", + f"{plugin_name}: Index wird geladen...", + lambda: list(getter() or []), + ) except Exception as exc: _log(f"A-Z konnte nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("A-Z", "A-Z konnte nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2315,7 +2344,11 @@ def _show_alpha_titles_page(plugin_name: str, letter: str, page: int = 1) -> Non ) try: - titles = list(paging_getter(letter, page) or []) + titles = _run_with_progress( + "A-Z", + f"{plugin_name}: {letter} Seite {page} wird geladen...", + lambda: list(paging_getter(letter, page) or []), + ) except Exception as exc: _log(f"A-Z Seite konnte nicht geladen werden ({plugin_name}/{letter} p{page}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("A-Z", "Seite konnte nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2427,7 +2460,11 @@ def _show_series_catalog(plugin_name: str, page: int = 1) -> None: ) try: - titles = list(paging_getter(page) or []) + titles = _run_with_progress( + "Serien", + f"{plugin_name}: Seite {page} wird geladen...", + lambda: list(paging_getter(page) or []), + ) except Exception as exc: _log(f"Serien konnten nicht geladen werden ({plugin_name} p{page}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Serien", "Serien konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2638,13 +2675,21 @@ def _show_popular(plugin_name: str | None = None, page: int = 1) -> None: try: popular_getter = getattr(plugin, "popular_series", None) if callable(popular_getter): - titles = list(popular_getter() or []) + titles = _run_with_progress( + "Beliebte Serien", + f"{plugin_name}: Liste wird geladen...", + lambda: list(popular_getter() or []), + ) else: label = _popular_genre_label(plugin) if not label: titles = [] else: - titles = list(plugin.titles_for_genre(label) or []) + titles = _run_with_progress( + "Beliebte Serien", + f"{plugin_name}: Liste wird geladen...", + lambda: list(plugin.titles_for_genre(label) or []), + ) except Exception as exc: _log(f"Beliebte Serien konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Beliebte Serien", "Serien konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2776,7 +2821,11 @@ def _show_new_titles(plugin_name: str, page: int = 1) -> None: is_folder=True, ) try: - page_items = list(paging_getter(page) or []) + page_items = _run_with_progress( + "Neue Titel", + f"{plugin_name}: Seite {page} wird geladen...", + lambda: list(paging_getter(page) or []), + ) except Exception as exc: _log(f"Neue Titel konnten nicht geladen werden ({plugin_name} p{page}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Neue Titel", "Titel konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2786,7 +2835,11 @@ def _show_new_titles(plugin_name: str, page: int = 1) -> None: page_items.sort(key=lambda value: value.casefold()) else: try: - titles = list(getter() or []) + titles = _run_with_progress( + "Neue Titel", + f"{plugin_name}: Liste wird geladen...", + lambda: list(getter() or []), + ) except Exception as exc: _log(f"Neue Titel konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Neue Titel", "Titel konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2904,8 +2957,11 @@ def _show_latest_episodes(plugin_name: str, page: int = 1) -> None: _set_content(handle, "episodes") try: - with _busy_dialog("Neueste Episoden werden geladen..."): - entries = list(getter(page) or []) + entries = _run_with_progress( + "Neueste Folgen", + f"{plugin_name}: Seite {page} wird geladen...", + lambda: list(getter(page) or []), + ) except Exception as exc: _log(f"Neueste Folgen fehlgeschlagen ({plugin_name}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Neueste Folgen", "Abruf fehlgeschlagen.", xbmcgui.NOTIFICATION_INFO, 3000) @@ -2975,7 +3031,12 @@ def _show_genre_series_group(plugin_name: str, genre: str, group_code: str, page grouped_has_more = getattr(plugin, "genre_group_has_more", None) if callable(grouped_paging): try: - page_items = [str(t).strip() for t in list(grouped_paging(genre, group_code, page, page_size) or []) if t and str(t).strip()] + raw_items = _run_with_progress( + "Genres", + f"{plugin_name}: {genre} [{group_code}] Seite {page} wird geladen...", + lambda: list(grouped_paging(genre, group_code, page, page_size) or []), + ) + page_items = [str(t).strip() for t in raw_items if t and str(t).strip()] except Exception as exc: _log(f"Genre-Serien konnten nicht geladen werden ({plugin_name}/{genre}/{group_code} p{page}): {exc}", xbmc.LOGWARNING) xbmcgui.Dialog().notification("Genres", "Serien konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000)