From e2cb8df6704912cb01655bcb83813b72fccd823a Mon Sep 17 00:00:00 2001 From: goon-foss Date: Mon, 20 Jul 2026 21:45:26 +0200 Subject: [PATCH] fix(telemetry): thread origin/title through WebView auto-extract re-nav MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Źródła które grają przez WebView (embed) → INJECTED_JS wyłuskuje direct mp4 → nav.replace('Player', {mode:'video'}) gubiły origin i title. Player bez origin → success-effect (!playOrigin) SKIP → udane odtworzenia NIE raportowały się. freshporno (KVS ale VPS resolve spada na embed → phone WebView-extract) miało przez to 0 success / same błędy → health=0 → fałszywe offline. 3 nav.replace w EmbedWebViewPlayer (hoster-resolve, extractedUrl effect, banner) teraz przekazują origin/title/playbackId/entityKind z params. Zweryfikowane na realnym telefonie: origin=tube:freshpornoorg, success-effect FIRE, backend zapisał 2× success. --- mobile/src/changelog.ts | 7 +++++++ mobile/src/screens/PlayerScreen.tsx | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/mobile/src/changelog.ts b/mobile/src/changelog.ts index de100f9..e28d230 100644 --- a/mobile/src/changelog.ts +++ b/mobile/src/changelog.ts @@ -16,6 +16,13 @@ export type ChangelogEntry = { }; export const CHANGELOG: ChangelogEntry[] = [ + { + id: '2026-07-20', + date: 'July 2026', + items: [ + 'Fixed site ratings for sources that play through a quick web-view step (like freshporno): their successful plays now count, so they no longer get wrongly marked offline and demoted. Freshporno is back in rotation.', + ], + }, { id: '2026-07-16', date: 'July 2026', diff --git a/mobile/src/screens/PlayerScreen.tsx b/mobile/src/screens/PlayerScreen.tsx index 908d0d1..d336c92 100644 --- a/mobile/src/screens/PlayerScreen.tsx +++ b/mobile/src/screens/PlayerScreen.tsx @@ -1467,6 +1467,8 @@ function EmbedWebViewPlayer({ params }: { params: RouteParams }) { nav.replace('Player', { url: result.url, sceneId, + origin: params.origin, + title: params.title, playbackId: params.playbackId, entityKind, durationSec, @@ -1534,11 +1536,15 @@ function EmbedWebViewPlayer({ params }: { params: RouteParams }) { nav.replace('Player', { url: extractedUrl, sceneId, + origin: params.origin, + title: params.title, + playbackId: params.playbackId, + entityKind, durationSec, refererHost: refererHost || (initialHostRef.current || undefined), mode: 'video', }); - }, [extractedUrl, nav, sceneId, durationSec, refererHost]); + }, [extractedUrl, nav, sceneId, durationSec, refererHost, params.origin, params.title, params.playbackId, entityKind]); React.useEffect(() => { upsertWatchProgress({ position_sec: 0, duration_sec: durationSec ?? undefined }).catch( @@ -1685,6 +1691,10 @@ function EmbedWebViewPlayer({ params }: { params: RouteParams }) { nav.replace('Player', { url: extractedUrl, sceneId, + origin: params.origin, + title: params.title, + playbackId: params.playbackId, + entityKind, durationSec, refererHost, mode: 'video',