dev: bump to 0.1.74-dev – BurningSeries entfernt, Paging-Fix Neuste Titel

This commit is contained in:
2026-03-10 10:41:37 +01:00
parent 6e7b4c3d39
commit 5564851d35
10 changed files with 109 additions and 213 deletions

View File

@@ -9,7 +9,7 @@ Vorgehen fuer ein neues Plugin:
3. `search_titles`, `seasons_for`, `episodes_for` gemaess Zielseite implementieren
4. Optional weitere Methoden implementieren capabilities deklarieren und Methoden ueberschreiben:
- `popular_series()` + capability 'popular_series'
- `latest_titles(page)` + capability 'latest_titles'
- `new_titles()` + `new_titles_page(page)` + capability 'new_titles'
- `genres()` + `titles_for_genre(genre)` + `titles_for_genre_page(genre, page)`
- `alpha_index()` + `titles_for_alpha_page(letter, page)`
- `years_available()` + `titles_for_year(year, page)` + capability 'year_filter'
@@ -169,7 +169,7 @@ class TemplatePlugin(BasisPlugin):
Bekannte Werte (aus plugin_interface.py):
- 'popular_series' Plugin hat beliebte Serien/Filme
- 'latest_titles' Plugin hat neu hinzugefuegte Titel
- 'new_titles' Plugin hat neu hinzugefuegte Titel
- 'year_filter' Plugin unterstuetzt Jahr-Filter
- 'country_filter' Plugin unterstuetzt Land-Filter
- 'collections' Plugin hat Sammlungen/Filmreihen

View File

@@ -1025,7 +1025,7 @@ class AniworldPlugin(BasisPlugin):
_session_cache_set(self._season_episodes_cache_name(season_url), payload)
def capabilities(self) -> set[str]:
return {"popular_series", "genres", "latest_episodes", "latest_titles"}
return {"popular_series", "genres", "latest_episodes", "new_titles"}
def _find_series_by_title(self, title: str) -> Optional[SeriesResult]:
title = (title or "").strip()
@@ -1345,7 +1345,7 @@ class AniworldPlugin(BasisPlugin):
except Exception:
return 1
def latest_titles(self, page: int = 1) -> List[str]:
def new_titles_page(self, page: int = 1) -> List[str]:
"""Liefert neu hinzugefuegte Anime vom Animekalender."""
if not self._requests_available:
return []
@@ -1372,6 +1372,9 @@ class AniworldPlugin(BasisPlugin):
except Exception:
return []
def new_titles(self) -> List[str]:
return self.new_titles_page(1)
def _season_label(self, number: int) -> str:
return f"Staffel {number}"

View File

@@ -1019,7 +1019,7 @@ class EinschaltenPlugin(BasisPlugin):
return resolve_via_resolveurl(link, fallback_to_link=True)
def capabilities(self) -> Set[str]:
return {"new_titles", "genres", "popular_series", "latest_titles"}
return {"new_titles", "genres", "popular_series"}
def popular_series(self) -> List[str]:
"""Liefert die am besten bewerteten Filme (nach voteAverage sortiert)."""
@@ -1042,14 +1042,6 @@ class EinschaltenPlugin(BasisPlugin):
titles.append(movie.title)
return titles
def latest_titles(self, page: int = 1) -> List[str]:
"""Liefert neu hinzugefügte Filme (Alias zu new_titles_page)."""
if not REQUESTS_AVAILABLE:
return []
if not self._get_base_url():
return []
return self.new_titles_page(max(1, int(page or 1)))
def new_titles(self) -> List[str]:
if not REQUESTS_AVAILABLE:
return []

View File

@@ -525,7 +525,7 @@ class FilmpalastPlugin(BasisPlugin):
return max_page
def capabilities(self) -> set[str]:
return {"genres", "alpha", "series_catalog", "popular_series", "latest_titles"}
return {"genres", "alpha", "series_catalog", "popular_series", "new_titles"}
def _parse_alpha_links(self, soup: BeautifulSoupT) -> Dict[str, str]:
alpha: Dict[str, str] = {}
@@ -1057,7 +1057,7 @@ class FilmpalastPlugin(BasisPlugin):
except Exception:
return []
def latest_titles(self, page: int = 1) -> List[str]:
def new_titles_page(self, page: int = 1) -> List[str]:
"""Liefert neu hinzugefuegte Titel von /movies/new."""
if not self._requests_available:
return []
@@ -1071,6 +1071,9 @@ class FilmpalastPlugin(BasisPlugin):
except Exception:
return []
def new_titles(self) -> List[str]:
return self.new_titles_page(1)
def resolve_stream_link(self, link: str) -> Optional[str]:
if not link:
return None

View File

@@ -231,10 +231,13 @@ class NetzkinoPlugin(BasisPlugin):
# Browsing
# ------------------------------------------------------------------
def latest_titles(self, page: int = 1) -> List[str]:
def new_titles_page(self, page: int = 1) -> List[str]:
url = _URL_CATEGORY.format(slug="neue-filme")
return self._load_posts(url)
def new_titles(self) -> List[str]:
return self.new_titles_page(1)
def genres(self) -> List[str]:
# Gibt die Anzeigenamen zurück (sortiert, Browsing-Kategorien)
return sorted(CATEGORIES.values())
@@ -248,4 +251,4 @@ class NetzkinoPlugin(BasisPlugin):
return self._load_posts(url)
def capabilities(self) -> set[str]:
return {"latest_titles", "genres"}
return {"new_titles", "genres"}

View File

@@ -1167,7 +1167,7 @@ class TopstreamfilmPlugin(BasisPlugin):
return resolve_via_resolveurl(link, fallback_to_link=True)
def capabilities(self) -> set[str]:
return {"genres", "popular_series", "year_filter", "latest_titles"}
return {"genres", "popular_series", "year_filter", "new_titles"}
def years_available(self) -> List[str]:
"""Liefert verfügbare Erscheinungsjahre (aktuelles Jahr bis 1980)."""
@@ -1207,7 +1207,7 @@ class TopstreamfilmPlugin(BasisPlugin):
self._save_title_url_cache()
return titles
def latest_titles(self, page: int = 1) -> List[str]:
def new_titles_page(self, page: int = 1) -> List[str]:
"""Liefert neu hinzugefügte Filme.
URL-Muster: /neueste-filme/ oder /neueste-filme/page/{n}/
@@ -1238,6 +1238,9 @@ class TopstreamfilmPlugin(BasisPlugin):
self._save_title_url_cache()
return titles
def new_titles(self) -> List[str]:
return self.new_titles_page(1)
# Alias für die automatische Plugin-Erkennung.
Plugin = TopstreamfilmPlugin