Improve Serienstream genre loading and bump to 0.1.48
This commit is contained in:
@@ -1966,6 +1966,86 @@ def _show_genre_series_group(plugin_name: str, genre: str, group_code: str, page
|
||||
handle = _get_handle()
|
||||
page_size = 10
|
||||
page = max(1, int(page or 1))
|
||||
plugin = _discover_plugins().get(plugin_name)
|
||||
if plugin is None:
|
||||
xbmcgui.Dialog().notification("Genres", "Plugin nicht gefunden.", xbmcgui.NOTIFICATION_INFO, 3000)
|
||||
xbmcplugin.endOfDirectory(handle)
|
||||
return
|
||||
|
||||
grouped_paging = getattr(plugin, "titles_for_genre_group_page", None)
|
||||
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()]
|
||||
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)
|
||||
xbmcplugin.endOfDirectory(handle)
|
||||
return
|
||||
|
||||
xbmcplugin.setPluginCategory(handle, f"{genre} [{group_code}] ({page})")
|
||||
show_tmdb = _get_setting_bool("tmdb_genre_metadata", default=False)
|
||||
if page > 1:
|
||||
_add_directory_item(
|
||||
handle,
|
||||
"Vorherige Seite",
|
||||
"genre_series_group",
|
||||
{"plugin": plugin_name, "genre": genre, "group": group_code, "page": str(page - 1)},
|
||||
is_folder=True,
|
||||
)
|
||||
if page_items:
|
||||
if show_tmdb:
|
||||
with _busy_dialog():
|
||||
tmdb_prefetched = _tmdb_labels_and_art_bulk(page_items)
|
||||
for title in page_items:
|
||||
info_labels, art, cast = tmdb_prefetched.get(title, _tmdb_labels_and_art(title))
|
||||
info_labels = dict(info_labels or {})
|
||||
info_labels.setdefault("mediatype", "tvshow")
|
||||
if (info_labels.get("mediatype") or "").strip().casefold() == "tvshow":
|
||||
info_labels.setdefault("tvshowtitle", title)
|
||||
playstate = _title_playstate(plugin_name, title)
|
||||
info_labels = _apply_playstate_to_info(dict(info_labels), playstate)
|
||||
display_label = _label_with_duration(title, info_labels)
|
||||
display_label = _label_with_playstate(display_label, playstate)
|
||||
_add_directory_item(
|
||||
handle,
|
||||
display_label,
|
||||
"seasons",
|
||||
{"plugin": plugin_name, "title": title, **_series_url_params(plugin, title)},
|
||||
is_folder=True,
|
||||
info_labels=info_labels,
|
||||
art=art,
|
||||
cast=cast,
|
||||
)
|
||||
else:
|
||||
for title in page_items:
|
||||
playstate = _title_playstate(plugin_name, title)
|
||||
_add_directory_item(
|
||||
handle,
|
||||
_label_with_playstate(title, playstate),
|
||||
"seasons",
|
||||
{"plugin": plugin_name, "title": title, **_series_url_params(plugin, title)},
|
||||
is_folder=True,
|
||||
info_labels=_apply_playstate_to_info({"title": title}, playstate),
|
||||
)
|
||||
show_next = False
|
||||
if callable(grouped_has_more):
|
||||
try:
|
||||
show_next = bool(grouped_has_more(genre, group_code, page, page_size))
|
||||
except Exception:
|
||||
show_next = False
|
||||
elif len(page_items) >= page_size:
|
||||
show_next = True
|
||||
if show_next:
|
||||
_add_directory_item(
|
||||
handle,
|
||||
"Nächste Seite",
|
||||
"genre_series_group",
|
||||
{"plugin": plugin_name, "genre": genre, "group": group_code, "page": str(page + 1)},
|
||||
is_folder=True,
|
||||
)
|
||||
xbmcplugin.endOfDirectory(handle)
|
||||
return
|
||||
|
||||
try:
|
||||
titles = _get_genre_titles(plugin_name, genre)
|
||||
|
||||
Reference in New Issue
Block a user