ui: use ascii playstate markers

This commit is contained in:
2026-02-23 18:28:27 +01:00
parent 9f2f9a6e7b
commit d9e338c9b6

View File

@@ -231,6 +231,15 @@ def _progress_dialog(heading: str, message: str = ""):
pass 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: def _method_accepts_kwarg(method: object, kwarg_name: str) -> bool:
if not callable(method): if not callable(method):
return False return False
@@ -400,14 +409,14 @@ def _time_label(seconds: int) -> str:
def _label_with_playstate(label: str, playstate: dict[str, object]) -> str: def _label_with_playstate(label: str, playstate: dict[str, object]) -> str:
watched = bool(playstate.get("watched") or False) watched = bool(playstate.get("watched") or False)
if watched: if watched:
return f" {label}" return f"[gesehen] {label}"
resume_pos = playstate.get("resume_position") resume_pos = playstate.get("resume_position")
try: try:
pos = int(resume_pos) if resume_pos is not None else 0 pos = int(resume_pos) if resume_pos is not None else 0
except Exception: except Exception:
pos = 0 pos = 0
if pos > 0: if pos > 0:
return f" {_time_label(pos)} {label}" return f"[fortsetzen {_time_label(pos)}] {label}"
return label return label
@@ -1947,7 +1956,11 @@ def _show_genres(plugin_name: str) -> None:
xbmcplugin.endOfDirectory(handle) xbmcplugin.endOfDirectory(handle)
return return
try: try:
genres = plugin.genres() genres = _run_with_progress(
"Genres",
f"{plugin_name}: Genres werden geladen...",
lambda: plugin.genres(),
)
except Exception as exc: except Exception as exc:
_log(f"Genres konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) _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) 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) xbmcplugin.endOfDirectory(handle)
return return
try: try:
categories = list(getter() or []) categories = _run_with_progress(
"Kategorien",
f"{plugin_name}: Kategorien werden geladen...",
lambda: list(getter() or []),
)
except Exception as exc: except Exception as exc:
_log(f"Kategorien konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) _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) 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: 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: except Exception as exc:
_log(f"Kategorie-Seite konnte nicht geladen werden ({plugin_name}/{category} p{page}): {exc}", xbmc.LOGWARNING) _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) 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: 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: except Exception as exc:
_log(f"Genre-Seite konnte nicht geladen werden ({plugin_name}/{genre} p{page}): {exc}", xbmc.LOGWARNING) _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) 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) xbmcplugin.endOfDirectory(handle)
return return
try: 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: except Exception as exc:
_log(f"A-Z konnte nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) _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) 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: 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: except Exception as exc:
_log(f"A-Z Seite konnte nicht geladen werden ({plugin_name}/{letter} p{page}): {exc}", xbmc.LOGWARNING) _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) 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: 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: except Exception as exc:
_log(f"Serien konnten nicht geladen werden ({plugin_name} p{page}): {exc}", xbmc.LOGWARNING) _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) 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: try:
popular_getter = getattr(plugin, "popular_series", None) popular_getter = getattr(plugin, "popular_series", None)
if callable(popular_getter): 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: else:
label = _popular_genre_label(plugin) label = _popular_genre_label(plugin)
if not label: if not label:
titles = [] titles = []
else: 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: except Exception as exc:
_log(f"Beliebte Serien konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) _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) 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, is_folder=True,
) )
try: 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: except Exception as exc:
_log(f"Neue Titel konnten nicht geladen werden ({plugin_name} p{page}): {exc}", xbmc.LOGWARNING) _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) 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()) page_items.sort(key=lambda value: value.casefold())
else: else:
try: 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: except Exception as exc:
_log(f"Neue Titel konnten nicht geladen werden ({plugin_name}): {exc}", xbmc.LOGWARNING) _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) 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") _set_content(handle, "episodes")
try: try:
with _busy_dialog("Neueste Episoden werden geladen..."): entries = _run_with_progress(
entries = list(getter(page) or []) "Neueste Folgen",
f"{plugin_name}: Seite {page} wird geladen...",
lambda: list(getter(page) or []),
)
except Exception as exc: except Exception as exc:
_log(f"Neueste Folgen fehlgeschlagen ({plugin_name}): {exc}", xbmc.LOGWARNING) _log(f"Neueste Folgen fehlgeschlagen ({plugin_name}): {exc}", xbmc.LOGWARNING)
xbmcgui.Dialog().notification("Neueste Folgen", "Abruf fehlgeschlagen.", xbmcgui.NOTIFICATION_INFO, 3000) 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) grouped_has_more = getattr(plugin, "genre_group_has_more", None)
if callable(grouped_paging): if callable(grouped_paging):
try: 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: except Exception as exc:
_log(f"Genre-Serien konnten nicht geladen werden ({plugin_name}/{genre}/{group_code} p{page}): {exc}", xbmc.LOGWARNING) _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) xbmcgui.Dialog().notification("Genres", "Serien konnten nicht geladen werden.", xbmcgui.NOTIFICATION_INFO, 3000)