From f1f9d8f5d8c88bfd1bc05e8ae7f6c3a900e86ae3 Mon Sep 17 00:00:00 2001 From: "itdrui.de" Date: Tue, 24 Feb 2026 13:54:33 +0100 Subject: [PATCH] dev: include plot text in Serienstream genre list entries --- CHANGELOG-NIGHTLY.md | 1 + addon/plugins/serienstream_plugin.py | 41 +++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/CHANGELOG-NIGHTLY.md b/CHANGELOG-NIGHTLY.md index 1e6dd17..c1163b1 100644 --- a/CHANGELOG-NIGHTLY.md +++ b/CHANGELOG-NIGHTLY.md @@ -6,6 +6,7 @@ - Genre-Listen laden strikt nur die angeforderte Seite (on-demand, max. 20 Titel). - Weitere Seiten werden erst bei `Naechste Seite` geladen. - Listen-Parser reduziert auf Titel, Serien-URL und Cover. +- Plot wird aus den Karten mit uebernommen und in der Liste angezeigt, falls vorhanden. - Detail-Metadaten werden erst beim Oeffnen von Staffel/Episode geholt. ## 0.1.61-nightly - 2026-02-23 diff --git a/addon/plugins/serienstream_plugin.py b/addon/plugins/serienstream_plugin.py index a433ebf..a4bd728 100644 --- a/addon/plugins/serienstream_plugin.py +++ b/addon/plugins/serienstream_plugin.py @@ -1427,6 +1427,42 @@ class SerienstreamPlugin(BasisPlugin): art.setdefault("poster", cover) self._series_metadata_cache[key] = (info, art) + @staticmethod + def _card_description(anchor: BeautifulSoupT) -> str: + if not anchor: + return "" + candidates: List[str] = [] + direct = (anchor.get("data-search") or "").strip() + if direct: + candidates.append(direct) + title_attr = (anchor.get("data-title") or "").strip() + if title_attr: + candidates.append(title_attr) + for selector in ("p", ".description", ".desc", ".text-muted", ".small", ".overview"): + node = anchor.select_one(selector) + if node is None: + continue + text = (node.get_text(" ", strip=True) or "").strip() + if text: + candidates.append(text) + parent = anchor.parent if anchor else None + if parent is not None: + parent_data = (parent.get("data-search") or "").strip() + if parent_data: + candidates.append(parent_data) + parent_text = "" + try: + parent_text = (parent.get_text(" ", strip=True) or "").strip() + except Exception: + parent_text = "" + if parent_text and len(parent_text) > 24: + candidates.append(parent_text) + for value in candidates: + cleaned = re.sub(r"\s+", " ", str(value or "")).strip() + if cleaned and len(cleaned) > 12: + return cleaned + return "" + def _parse_genre_entries_from_soup(self, soup: BeautifulSoupT) -> List[SeriesResult]: entries: List[SeriesResult] = [] seen_urls: set[str] = set() @@ -1459,10 +1495,7 @@ class SerienstreamPlugin(BasisPlugin): or (anchor.get("title") or "") or (anchor.get_text(" ", strip=True) or "") ).strip() - description = (anchor.get("data-search") or "").strip() - parent = anchor.parent if anchor else None - if parent is not None and not description: - description = (parent.get("data-search") or "").strip() + description = self._card_description(anchor) cover = (img.get("data-src") if img else "") or (img.get("src") if img else "") _add_entry(title, description, href, cover)