"""fpo.xxx: kontrola usunietego filmu przed oddaniem strony do WebView. Odtwarzanie idzie na telefonie (`fpoxxxResolver.ts`, KVS license_code z IP telefonu). Gdy telefon nic nie znajdzie, backend oddawal sama strone jako hoster. Na stronie skasowanego filmu (`
`, "Deleted by the owner request", bez license_code) jedynym wideo jest reklama tsyndicate, ktora WebView wylapywal i puszczal jako scene (zgloszenie 1ee12943, 2026-10-12: "fpoxxx daje reklamy zamiast scen"; ok. 10% zrodel fpoxxx to takie strony). Tu taka strona to HosterDead, wiec zrodlo znika zamiast grac reklame. """ from __future__ import annotations import logging from app.extractors._fetch import fetch_tube_html from app.extractors._models import HosterDead, StreamSource, TubePageError from app.extractors.tubes import _vps_blocked_fallback log = logging.getLogger(__name__) def extract(page_url: str, *, timeout: float = 60.0) -> list[StreamSource]: try: html = fetch_tube_html(page_url, timeout=min(timeout, 20.0)) except TubePageError: raise except Exception as e: log.info("fpoxxx: strona %s niepobrana (%s), oddaje do WebView", page_url, e) return _vps_blocked_fallback.extract(page_url, timeout=timeout) if 'class="no-player"' in html and "license_code" not in html: raise HosterDead(f"fpoxxx {page_url}: film usuniety (no-player)") return _vps_blocked_fallback.extract(page_url, timeout=timeout)