diff --git a/app/extractors/__init__.py b/app/extractors/__init__.py index 47a8e5f..f3e2d0a 100644 --- a/app/extractors/__init__.py +++ b/app/extractors/__init__.py @@ -219,11 +219,13 @@ _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = { # 0dayxx + pornditt + pornhat, USUNIĘTE CAŁKOWICIE 2026-06-22 (user request): orphan # factories (0-0.2% canonical match), zastępujemy lepszymi źródłami. Dane skasowane. # CF-protected tube, curl_cffi w fetch_tube_html bypassa JA3, embed-iframe pattern. - # perverzija, natywny HLS (2026-07-28). Player xtremestream ma w HTML tylko - # preroll/midroll (grały w pętli, bug 40ec88cc/92e9133e), a wideo dociąga runtime: - # xs1.php?data=&q=<480|720> zwraca GOTOWY manifest HLS z pełnymi URL-ami - # segmentów. Zamiast WebView oddajemy m3u8 wprost. - "perverzijacom": perverzija.extract, + # perverzija: BYŁ natywny HLS przez xtremestream/xs1.php (2026-07-28), ale strona + # przeszła na mixdrop (2026-08-18: 520 błędów "Input does not start with #EXTM3U", + # zero sukcesów, bo xs1.php oddaje już HTML zamiast manifestu). Teraz embed-iframe + # wyłuskuje mixdrop i oddaje type='hoster' → telefon resolwuje w WebView (mixdrop + # gejtuje reCAPTCHA v3 na IP datacenter, przechodzi dopiero z residential). Natywny + # ekstraktor `perverzija.py` zostaje w drzewie, gdyby xtremestream wrócił. + "perverzijacom": _embed_iframe.extract, # Special: WebView-only (Yii2 session-bound player). "paradisehillcc": paradisehill.extract, # PornDoe, dołączony 2026-05-21 (theporndude audit). Stream URL nie inline w diff --git a/mobile/src/changelog.ts b/mobile/src/changelog.ts index 43396e0..93c968e 100644 --- a/mobile/src/changelog.ts +++ b/mobile/src/changelog.ts @@ -16,6 +16,14 @@ export type ChangelogEntry = { }; export const CHANGELOG: ChangelogEntry[] = [ + { + id: '2026-08-18b', + date: 'August 2026', + items: [ + 'naughtymachinima: a video that hit a brief server hiccup no longer drops you straight onto the site page (which was often rate-limited and showed an error). The app now grabs a fresh link and keeps playing.', + 'perverzija: playback works again. The site switched video hosts, so every link was failing; the app now opens the new host.', + ], + }, { id: '2026-08-18', date: 'August 2026', diff --git a/mobile/src/screens/PlayerScreen.tsx b/mobile/src/screens/PlayerScreen.tsx index c68f012..9655905 100644 --- a/mobile/src/screens/PlayerScreen.tsx +++ b/mobile/src/screens/PlayerScreen.tsx @@ -319,7 +319,14 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) { // manifest w 0,4 s. Padał POJEDYNCZY nod CDN — kolejne wywołania resolve wracają // z RÓŻNYMI adresami (185.237.107.133, potem 203.188.166.163), więc ponowny resolve // po prostu ląduje na żywym węźle. Token ma ~2,8 h TTL, czyli wygasanie to nie to. - const BACKEND_RERESOLVE_ORIGINS = ['tube:watchporn', 'tube:galaxyporncom']; + // naughtymachinima dopisany 2026-08-18 (zgłoszenie ef728604 „od razu fallbackuje do + // strony, z błędami 502 i 429"). Direct mp4 videos.naughtymachinima.com bez tokenu, + // IP-bound do residential (403 z datacenter, telefon gra), telemetria 64 sukcesy / 19 + // błędów = 23% to przejściowy `Connection reset` z CDN na SPRAWNYM URL-u. Bez re-resolve + // pojedynczy reset od razu spychał na WebView, który ładował zdławioną stronę tube'a + // (stąd 502/429 w zgłoszeniu). Re-resolve otwiera świeże połączenie na tym samym URL-u, + // co ratuje transient reset, a gate wstrzymuje WebView-fallback póki nie skończy. + const BACKEND_RERESOLVE_ORIGINS = ['tube:watchporn', 'tube:galaxyporncom', 'tube:naughtymachinima']; const canBackendReresolve = !!sceneId && !!params.playbackId && BACKEND_RERESOLVE_ORIGINS.includes(playOrigin ?? ''); // Seek/decode recovery (bug f6c86847: doply/playmogo „invalid NAL length” przy