ui: use ascii playstate markers
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user