dev: umfangreiches Refactoring, Trakt-Integration und Code-Review-Fixes (0.1.69-dev)
Core & Architektur: - Neues Verzeichnis addon/core/ mit router.py, trakt.py, metadata.py, gui.py, playstate.py, plugin_manager.py, updater.py - Tests-Verzeichnis hinzugefügt (24 Tests, pytest + Coverage) Trakt-Integration: - OAuth Device Flow, Scrobbling, Watchlist, History, Calendar - Upcoming Episodes, Weiterschauen (Continue Watching) - Watched-Status in Episodenlisten - _trakt_find_in_plugins() mit 5-Min-Cache Serienstream-Suche: - API-Ergebnisse werden immer mit Katalog-Cache ergänzt (serverseitiges 10-Treffer-Limit) - Katalog-Cache wird beim Addon-Start im Daemon-Thread vorgewärmt - Notification nach Cache-Load via xbmc.executebuiltin() (thread-sicher) Bugfixes (Code-Review): - Race Condition auf _TRAKT_WATCHED_CACHE: _TRAKT_WATCHED_CACHE_LOCK hinzugefügt - GUI-Dialog aus Daemon-Thread: xbmcgui -> xbmc.executebuiltin() - ValueError in Trakt-Watchlist-Routen abgesichert - Token expires_at==0 Check korrigiert - get_setting_bool() Kontrollfluss in gui.py bereinigt - topstreamfilm_plugin: try-finally um xbmcvfs.File.close() Cleanup: - default.py.bak und refactor_router.py entfernt - .gitignore: /tests/ Eintrag entfernt - Type-Hints vereinheitlicht (Dict/List/Tuple -> dict/list/tuple)
This commit is contained in:
@@ -270,6 +270,27 @@ def dump_response_html(
|
||||
_append_text_file(path, content)
|
||||
|
||||
|
||||
def resolve_via_resolveurl(link: str, *, fallback_to_link: bool = True) -> Optional[str]:
|
||||
"""Versucht einen Hoster-Link mit resolveurl_backend aufzuloesen.
|
||||
|
||||
Gibt den aufgeloesten Link zurueck, oder – wenn resolveurl nicht verfuegbar
|
||||
ist oder nichts liefert – den Original-Link (wenn fallback_to_link=True)
|
||||
bzw. None (wenn fallback_to_link=False).
|
||||
"""
|
||||
link = (link or "").strip()
|
||||
if not link:
|
||||
return None
|
||||
try:
|
||||
from resolveurl_backend import resolve as _resolve_fn # type: ignore[import-not-found]
|
||||
except Exception:
|
||||
_resolve_fn = None
|
||||
if callable(_resolve_fn):
|
||||
resolved = _resolve_fn(link)
|
||||
if resolved:
|
||||
return resolved
|
||||
return link if fallback_to_link else None
|
||||
|
||||
|
||||
def normalize_resolved_stream_url(final_url: str, *, source_url: str = "") -> str:
|
||||
"""Normalisiert hoster-spezifische Header im finalen Stream-Link.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user