dev: roll back resolver routing changes and publish 0.1.65-dev
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
# Changelog (Dev)
|
# Changelog (Dev)
|
||||||
|
|
||||||
|
## 0.1.65-dev - 2026-02-24
|
||||||
|
|
||||||
|
- Resolver-Diagnosepfad wieder vereinfacht (Fallback/Embed-Block aus dem Router entfernt).
|
||||||
|
- Serienstream und AniWorld wieder mit VOE als bevorzugtem Hoster in der Default-Prioritaet.
|
||||||
|
|
||||||
## 0.1.64-dev - 2026-02-24
|
## 0.1.64-dev - 2026-02-24
|
||||||
|
|
||||||
- Update-Kanaele in den Settings erweitert: `Dev` ist jetzt ein eigener Kanal.
|
- Update-Kanaele in den Settings erweitert: `Dev` ist jetzt ein eigener Kanal.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<addon id="plugin.video.viewit" name="ViewIt" version="0.1.64-dev" provider-name="ViewIt">
|
<addon id="plugin.video.viewit" name="ViewIt" version="0.1.65-dev" provider-name="ViewIt">
|
||||||
<requires>
|
<requires>
|
||||||
<import addon="xbmc.python" version="3.0.0" />
|
<import addon="xbmc.python" version="3.0.0" />
|
||||||
<import addon="script.module.requests" />
|
<import addon="script.module.requests" />
|
||||||
|
|||||||
100
addon/default.py
100
addon/default.py
@@ -3666,21 +3666,6 @@ def _resolveurl_last_error() -> str:
|
|||||||
return ""
|
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:
|
def _is_cloudflare_challenge_error(message: str) -> bool:
|
||||||
text = str(message or "").casefold()
|
text = str(message or "").casefold()
|
||||||
if not text:
|
if not text:
|
||||||
@@ -3692,37 +3677,6 @@ def _is_resolveurl_missing_error(message: str) -> bool:
|
|||||||
return str(message or "").strip().casefold() == "resolveurl missing"
|
return str(message or "").strip().casefold() == "resolveurl missing"
|
||||||
|
|
||||||
|
|
||||||
def _is_resolveurl_soft_error(message: str) -> bool:
|
|
||||||
text = str(message or "").strip().casefold()
|
|
||||||
return text in {"resolveurl missing", "unresolved", "invalid url"}
|
|
||||||
|
|
||||||
|
|
||||||
def _looks_like_media_url(url: str) -> bool:
|
|
||||||
raw = str(url or "").strip()
|
|
||||||
if not raw:
|
|
||||||
return False
|
|
||||||
source = raw.split("|", 1)[0]
|
|
||||||
path = urlparse(source).path.casefold()
|
|
||||||
return bool(
|
|
||||||
re.search(r"\.(m3u8|mpd|mp4|mkv|webm|avi|mov|ts)(?:$|[/?#])", path)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _looks_like_embed_page_url(url: str) -> bool:
|
|
||||||
raw = str(url or "").strip()
|
|
||||||
if not raw:
|
|
||||||
return False
|
|
||||||
source = raw.split("|", 1)[0]
|
|
||||||
parsed = urlparse(source)
|
|
||||||
host = (parsed.netloc or "").casefold()
|
|
||||||
path = (parsed.path or "").casefold()
|
|
||||||
if not host.startswith(("voe.", "streamtape.", "dood.", "filemoon.", "vidmoly.", "supervideo.", "veev.", "vidnest.", "vidara.", "strmup.")):
|
|
||||||
return False
|
|
||||||
if _looks_like_media_url(source):
|
|
||||||
return False
|
|
||||||
return bool(re.search(r"/(e|embed|v)/", path))
|
|
||||||
|
|
||||||
|
|
||||||
def _play_final_link(
|
def _play_final_link(
|
||||||
link: str,
|
link: str,
|
||||||
*,
|
*,
|
||||||
@@ -3855,24 +3809,13 @@ def _play_episode(
|
|||||||
return
|
return
|
||||||
_log(f"Stream-Link: {link}", xbmc.LOGDEBUG)
|
_log(f"Stream-Link: {link}", xbmc.LOGDEBUG)
|
||||||
resolved_link = plugin.resolve_stream_link(link)
|
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 not resolved_link:
|
||||||
|
err = _resolveurl_last_error()
|
||||||
if _is_resolveurl_missing_error(err):
|
if _is_resolveurl_missing_error(err):
|
||||||
_log("ResolveURL fehlt: versuche Auto-Installation.", xbmc.LOGWARNING)
|
_log("ResolveURL fehlt: versuche Auto-Installation.", xbmc.LOGWARNING)
|
||||||
_ensure_resolveurl_installed(force=True, silent=True)
|
_ensure_resolveurl_installed(force=True, silent=True)
|
||||||
resolved_link = plugin.resolve_stream_link(link)
|
resolved_link = plugin.resolve_stream_link(link)
|
||||||
err = _resolveurl_last_error()
|
err = _resolveurl_last_error()
|
||||||
if err:
|
|
||||||
_log(f"ResolveURL Status (nach Auto-Installation): {err}", xbmc.LOGDEBUG)
|
|
||||||
if _is_cloudflare_challenge_error(err):
|
if _is_cloudflare_challenge_error(err):
|
||||||
_log(f"ResolveURL Cloudflare-Challenge: {err}", xbmc.LOGWARNING)
|
_log(f"ResolveURL Cloudflare-Challenge: {err}", xbmc.LOGWARNING)
|
||||||
xbmcgui.Dialog().notification(
|
xbmcgui.Dialog().notification(
|
||||||
@@ -3885,20 +3828,6 @@ def _play_episode(
|
|||||||
final_link = resolved_link or link
|
final_link = resolved_link or link
|
||||||
final_link = normalize_resolved_stream_url(final_link, source_url=link)
|
final_link = normalize_resolved_stream_url(final_link, source_url=link)
|
||||||
err = _resolveurl_last_error()
|
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)
|
|
||||||
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():
|
if _is_cloudflare_challenge_error(err) and final_link.strip() == link.strip():
|
||||||
_log(f"ResolveURL Cloudflare-Challenge (unresolved): {err}", xbmc.LOGWARNING)
|
_log(f"ResolveURL Cloudflare-Challenge (unresolved): {err}", xbmc.LOGWARNING)
|
||||||
xbmcgui.Dialog().notification(
|
xbmcgui.Dialog().notification(
|
||||||
@@ -3995,24 +3924,13 @@ def _play_episode_url(
|
|||||||
return
|
return
|
||||||
_log(f"Stream-Link: {link}", xbmc.LOGDEBUG)
|
_log(f"Stream-Link: {link}", xbmc.LOGDEBUG)
|
||||||
resolved_link = plugin.resolve_stream_link(link)
|
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 not resolved_link:
|
||||||
|
err = _resolveurl_last_error()
|
||||||
if _is_resolveurl_missing_error(err):
|
if _is_resolveurl_missing_error(err):
|
||||||
_log("ResolveURL fehlt: versuche Auto-Installation.", xbmc.LOGWARNING)
|
_log("ResolveURL fehlt: versuche Auto-Installation.", xbmc.LOGWARNING)
|
||||||
_ensure_resolveurl_installed(force=True, silent=True)
|
_ensure_resolveurl_installed(force=True, silent=True)
|
||||||
resolved_link = plugin.resolve_stream_link(link)
|
resolved_link = plugin.resolve_stream_link(link)
|
||||||
err = _resolveurl_last_error()
|
err = _resolveurl_last_error()
|
||||||
if err:
|
|
||||||
_log(f"ResolveURL Status (nach Auto-Installation): {err}", xbmc.LOGDEBUG)
|
|
||||||
if _is_cloudflare_challenge_error(err):
|
if _is_cloudflare_challenge_error(err):
|
||||||
_log(f"ResolveURL Cloudflare-Challenge: {err}", xbmc.LOGWARNING)
|
_log(f"ResolveURL Cloudflare-Challenge: {err}", xbmc.LOGWARNING)
|
||||||
xbmcgui.Dialog().notification(
|
xbmcgui.Dialog().notification(
|
||||||
@@ -4025,20 +3943,6 @@ def _play_episode_url(
|
|||||||
final_link = resolved_link or link
|
final_link = resolved_link or link
|
||||||
final_link = normalize_resolved_stream_url(final_link, source_url=link)
|
final_link = normalize_resolved_stream_url(final_link, source_url=link)
|
||||||
err = _resolveurl_last_error()
|
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)
|
|
||||||
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():
|
if _is_cloudflare_challenge_error(err) and final_link.strip() == link.strip():
|
||||||
_log(f"ResolveURL Cloudflare-Challenge (unresolved): {err}", xbmc.LOGWARNING)
|
_log(f"ResolveURL Cloudflare-Challenge (unresolved): {err}", xbmc.LOGWARNING)
|
||||||
xbmcgui.Dialog().notification(
|
xbmcgui.Dialog().notification(
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ else: # pragma: no cover
|
|||||||
|
|
||||||
SETTING_BASE_URL = "aniworld_base_url"
|
SETTING_BASE_URL = "aniworld_base_url"
|
||||||
DEFAULT_BASE_URL = "https://aniworld.to"
|
DEFAULT_BASE_URL = "https://aniworld.to"
|
||||||
DEFAULT_PREFERRED_HOSTERS = ["supervideo", "filemoon", "vidmoly", "doodstream", "voe"]
|
DEFAULT_PREFERRED_HOSTERS = ["voe"]
|
||||||
DEFAULT_TIMEOUT = 20
|
DEFAULT_TIMEOUT = 20
|
||||||
ADDON_ID = "plugin.video.viewit"
|
ADDON_ID = "plugin.video.viewit"
|
||||||
GLOBAL_SETTING_LOG_URLS = "debug_log_urls"
|
GLOBAL_SETTING_LOG_URLS = "debug_log_urls"
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ else: # pragma: no cover
|
|||||||
|
|
||||||
SETTING_BASE_URL = "serienstream_base_url"
|
SETTING_BASE_URL = "serienstream_base_url"
|
||||||
DEFAULT_BASE_URL = "https://s.to"
|
DEFAULT_BASE_URL = "https://s.to"
|
||||||
DEFAULT_PREFERRED_HOSTERS = ["supervideo", "filemoon", "vidmoly", "doodstream", "voe"]
|
DEFAULT_PREFERRED_HOSTERS = ["voe"]
|
||||||
DEFAULT_TIMEOUT = 20
|
DEFAULT_TIMEOUT = 20
|
||||||
SEARCH_TIMEOUT = 8
|
SEARCH_TIMEOUT = 8
|
||||||
ADDON_ID = "plugin.video.viewit"
|
ADDON_ID = "plugin.video.viewit"
|
||||||
|
|||||||
Reference in New Issue
Block a user