diff --git a/addon/default.py b/addon/default.py index be01b1c..9c72782 100644 --- a/addon/default.py +++ b/addon/default.py @@ -3666,6 +3666,21 @@ def _resolveurl_last_error() -> str: return "" +def _resolveurl_resolve(url: str) -> str | None: + try: + from resolveurl_backend import resolve as _resolve # type: ignore + except Exception: + return None + try: + result = _resolve(url) + except Exception as exc: + _log(f"ResolveURL direkter Aufruf fehlgeschlagen: {exc}", xbmc.LOGWARNING) + return None + if not result: + return None + return str(result) + + def _is_cloudflare_challenge_error(message: str) -> bool: text = str(message or "").casefold() if not text: @@ -3841,17 +3856,23 @@ def _play_episode( _log(f"Stream-Link: {link}", xbmc.LOGDEBUG) resolved_link = plugin.resolve_stream_link(link) err = _resolveurl_last_error() + if err: + _log(f"ResolveURL Status: {err}", xbmc.LOGDEBUG) if resolved_link and _looks_like_embed_page_url(resolved_link) and _is_resolveurl_soft_error(err): _log("Unaufgeloester Hoster-Link erkannt: versuche ResolveURL-Reparatur.", xbmc.LOGWARNING) _ensure_resolveurl_installed(force=True, silent=True) resolved_link = plugin.resolve_stream_link(link) err = _resolveurl_last_error() + if err: + _log(f"ResolveURL Status (nach Reparatur): {err}", xbmc.LOGDEBUG) if not resolved_link: if _is_resolveurl_missing_error(err): _log("ResolveURL fehlt: versuche Auto-Installation.", xbmc.LOGWARNING) _ensure_resolveurl_installed(force=True, silent=True) resolved_link = plugin.resolve_stream_link(link) err = _resolveurl_last_error() + if err: + _log(f"ResolveURL Status (nach Auto-Installation): {err}", xbmc.LOGDEBUG) if _is_cloudflare_challenge_error(err): _log(f"ResolveURL Cloudflare-Challenge: {err}", xbmc.LOGWARNING) xbmcgui.Dialog().notification( @@ -3865,14 +3886,19 @@ def _play_episode( final_link = normalize_resolved_stream_url(final_link, source_url=link) err = _resolveurl_last_error() if _looks_like_embed_page_url(final_link): + direct_resolved = _resolveurl_resolve(final_link) + if direct_resolved: + _log(f"ResolveURL Direkt-Fallback Treffer: {direct_resolved}", xbmc.LOGDEBUG) + final_link = normalize_resolved_stream_url(direct_resolved, source_url=final_link) _log(f"Hoster-Link nicht aufgeloest: {final_link}", xbmc.LOGWARNING) - xbmcgui.Dialog().notification( - "Wiedergabe", - "Hoster-Link konnte nicht aufgeloest werden. ResolveURL pruefen.", - xbmcgui.NOTIFICATION_INFO, - 5000, - ) - return + if _looks_like_embed_page_url(final_link): + xbmcgui.Dialog().notification( + "Wiedergabe", + "Hoster-Link konnte nicht aufgeloest werden. ResolveURL pruefen.", + xbmcgui.NOTIFICATION_INFO, + 5000, + ) + return if _is_cloudflare_challenge_error(err) and final_link.strip() == link.strip(): _log(f"ResolveURL Cloudflare-Challenge (unresolved): {err}", xbmc.LOGWARNING) xbmcgui.Dialog().notification( @@ -3970,17 +3996,23 @@ def _play_episode_url( _log(f"Stream-Link: {link}", xbmc.LOGDEBUG) resolved_link = plugin.resolve_stream_link(link) err = _resolveurl_last_error() + if err: + _log(f"ResolveURL Status: {err}", xbmc.LOGDEBUG) if resolved_link and _looks_like_embed_page_url(resolved_link) and _is_resolveurl_soft_error(err): _log("Unaufgeloester Hoster-Link erkannt: versuche ResolveURL-Reparatur.", xbmc.LOGWARNING) _ensure_resolveurl_installed(force=True, silent=True) resolved_link = plugin.resolve_stream_link(link) err = _resolveurl_last_error() + if err: + _log(f"ResolveURL Status (nach Reparatur): {err}", xbmc.LOGDEBUG) if not resolved_link: if _is_resolveurl_missing_error(err): _log("ResolveURL fehlt: versuche Auto-Installation.", xbmc.LOGWARNING) _ensure_resolveurl_installed(force=True, silent=True) resolved_link = plugin.resolve_stream_link(link) err = _resolveurl_last_error() + if err: + _log(f"ResolveURL Status (nach Auto-Installation): {err}", xbmc.LOGDEBUG) if _is_cloudflare_challenge_error(err): _log(f"ResolveURL Cloudflare-Challenge: {err}", xbmc.LOGWARNING) xbmcgui.Dialog().notification( @@ -3994,14 +4026,19 @@ def _play_episode_url( final_link = normalize_resolved_stream_url(final_link, source_url=link) err = _resolveurl_last_error() if _looks_like_embed_page_url(final_link): + direct_resolved = _resolveurl_resolve(final_link) + if direct_resolved: + _log(f"ResolveURL Direkt-Fallback Treffer: {direct_resolved}", xbmc.LOGDEBUG) + final_link = normalize_resolved_stream_url(direct_resolved, source_url=final_link) _log(f"Hoster-Link nicht aufgeloest: {final_link}", xbmc.LOGWARNING) - xbmcgui.Dialog().notification( - "Wiedergabe", - "Hoster-Link konnte nicht aufgeloest werden. ResolveURL pruefen.", - xbmcgui.NOTIFICATION_INFO, - 5000, - ) - return + if _looks_like_embed_page_url(final_link): + xbmcgui.Dialog().notification( + "Wiedergabe", + "Hoster-Link konnte nicht aufgeloest werden. ResolveURL pruefen.", + xbmcgui.NOTIFICATION_INFO, + 5000, + ) + return if _is_cloudflare_challenge_error(err) and final_link.strip() == link.strip(): _log(f"ResolveURL Cloudflare-Challenge (unresolved): {err}", xbmc.LOGWARNING) xbmcgui.Dialog().notification(