dev: bump to 0.1.72-dev – Autoplay-Setting, Moflix Hoster-Dialog, Update-Hinweis im Hauptmenue
This commit is contained in:
@@ -57,6 +57,7 @@ else: # pragma: no cover
|
||||
|
||||
|
||||
SETTING_BASE_URL = "serienstream_base_url"
|
||||
SETTING_CATALOG_SEARCH = "serienstream_catalog_search"
|
||||
DEFAULT_BASE_URL = "https://s.to"
|
||||
DEFAULT_PREFERRED_HOSTERS = ["voe"]
|
||||
DEFAULT_TIMEOUT = 20
|
||||
@@ -710,36 +711,46 @@ def _store_catalog_index_in_cache(items: list[SeriesResult]) -> None:
|
||||
|
||||
|
||||
def search_series(query: str, *, progress_callback: ProgressCallback = None) -> list[SeriesResult]:
|
||||
"""Sucht Serien im (/serien)-Katalog nach Titel. Nutzt Cache + Ein-Pass-Filter."""
|
||||
"""Sucht Serien. Katalog-Suche (vollstaendig) oder API-Suche (max 10) je nach Setting."""
|
||||
_ensure_requests()
|
||||
if not _normalize_search_text(query):
|
||||
return []
|
||||
_emit_progress(progress_callback, "Pruefe Such-Cache", 15)
|
||||
cached = _load_catalog_index_from_cache()
|
||||
if cached is not None:
|
||||
matched_from_cache = [entry for entry in cached if entry.title and _matches_query(query, title=entry.title)]
|
||||
_emit_progress(progress_callback, f"Cache-Treffer: {len(cached)}", 35)
|
||||
if matched_from_cache:
|
||||
return matched_from_cache
|
||||
|
||||
_emit_progress(progress_callback, "Lade Katalogseite", 42)
|
||||
catalog_url = f"{_get_base_url()}/serien?by=genre"
|
||||
items: list[SeriesResult] = []
|
||||
try:
|
||||
# Bevorzugt den Soup-Helper, damit Tests HTML einfache injizieren koennen.
|
||||
soup = _get_soup_simple(catalog_url)
|
||||
items = _catalog_index_from_soup(soup)
|
||||
except Exception:
|
||||
body = _get_html_simple(catalog_url)
|
||||
items = _extract_catalog_index_from_html(body, progress_callback=progress_callback)
|
||||
if not items:
|
||||
_emit_progress(progress_callback, "Fallback-Parser", 58)
|
||||
soup = BeautifulSoup(body, "html.parser")
|
||||
use_catalog = _get_setting_bool(SETTING_CATALOG_SEARCH, default=True)
|
||||
|
||||
if use_catalog:
|
||||
_emit_progress(progress_callback, "Pruefe Such-Cache", 15)
|
||||
cached = _load_catalog_index_from_cache()
|
||||
if cached is not None:
|
||||
matched_from_cache = [entry for entry in cached if entry.title and _matches_query(query, title=entry.title)]
|
||||
_emit_progress(progress_callback, f"Cache-Treffer: {len(cached)}", 35)
|
||||
if matched_from_cache:
|
||||
return matched_from_cache
|
||||
|
||||
_emit_progress(progress_callback, "Lade Katalogseite", 42)
|
||||
catalog_url = f"{_get_base_url()}/serien?by=genre"
|
||||
items: list[SeriesResult] = []
|
||||
try:
|
||||
soup = _get_soup_simple(catalog_url)
|
||||
items = _catalog_index_from_soup(soup)
|
||||
if items:
|
||||
_store_catalog_index_in_cache(items)
|
||||
_emit_progress(progress_callback, f"Filtere Treffer ({len(items)})", 70)
|
||||
return [entry for entry in items if entry.title and _matches_query(query, title=entry.title)]
|
||||
except Exception:
|
||||
body = _get_html_simple(catalog_url)
|
||||
items = _extract_catalog_index_from_html(body, progress_callback=progress_callback)
|
||||
if not items:
|
||||
_emit_progress(progress_callback, "Fallback-Parser", 58)
|
||||
soup = BeautifulSoup(body, "html.parser")
|
||||
items = _catalog_index_from_soup(soup)
|
||||
if items:
|
||||
_store_catalog_index_in_cache(items)
|
||||
_emit_progress(progress_callback, f"Filtere Treffer ({len(items)})", 70)
|
||||
return [entry for entry in items if entry.title and _matches_query(query, title=entry.title)]
|
||||
|
||||
# API-Suche (primaer wenn Katalog deaktiviert, Fallback wenn Katalog leer)
|
||||
_emit_progress(progress_callback, "API-Suche", 60)
|
||||
api_results = _search_series_api(query)
|
||||
if api_results:
|
||||
_emit_progress(progress_callback, f"API-Treffer: {len(api_results)}", 80)
|
||||
return api_results
|
||||
|
||||
_emit_progress(progress_callback, "Server-Suche", 85)
|
||||
server_results = _search_series_server(query)
|
||||
|
||||
Reference in New Issue
Block a user