fix(player): myvidplay/playmogo/doply graja natywnie, bez WebView
Some checks are pending
Backend tests / test (push) Waiting to run
Some checks are pending
Backend tests / test (push) Waiting to run
Szablon playera playmogo zawsze zawiera ukryty (d-none) blok "Not Found", a resolver bral te slowa za usuniety film i poddawal sie od razu, wiec cala rodzina DoodStream szla do WebView z klikanym Cloudflare. pass_md5 jest w HTML, a adres gra bez weryfikacji. Teraz usuniety = tytul "not found" albo widoczny blok. Sprawdzone na emulatorze: ExoPlayer, ttff 4,2 s, postep rosnie. Bledy cichego resolvera ida do telemetrii (error_kind 'resolver'), poza ocena zrodel. Wpis changelogu dla OTA d5906704. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
8753243e15
commit
617dda0bbe
4 changed files with 47 additions and 4 deletions
|
|
@ -215,6 +215,9 @@ def run_source_stats() -> dict:
|
|||
FILTER (WHERE status='success' AND ttff_ms IS NOT NULL) AS p50_ttff
|
||||
FROM playback_events
|
||||
WHERE created_at > :win
|
||||
-- cichy resolver w apce (np. DoodStream) pada, a WebView moze jeszcze
|
||||
-- zagrac, wiec to nie jest porazka zrodla
|
||||
AND error_kind IS DISTINCT FROM 'resolver'
|
||||
GROUP BY origin
|
||||
"""
|
||||
),
|
||||
|
|
|
|||
|
|
@ -35,6 +35,16 @@ export type ChangelogEntry = {
|
|||
};
|
||||
|
||||
export const CHANGELOG: ChangelogEntry[] = [
|
||||
{
|
||||
id: '2026-10-02a',
|
||||
date: 'October 2026',
|
||||
items: [
|
||||
'Favorites: performers and studios with something new are listed first, and the badge says how many new scenes and how many new movies there are, instead of one number for both.',
|
||||
'Edge: a clip its creator deleted no longer leaves you on a black screen. The app skips to the next one and the clip is taken out of the feed for everyone. On a creator page the grid loads smaller previews, so it fills in faster.',
|
||||
'Movies on myvidplay, playmogo and doply: the app took every one of them for a deleted video, because the host page always carries a hidden "not found" block. It now tries the direct stream first and only falls back to the web page when that fails.',
|
||||
'A certificate error from a host is no longer reported as a deleted video, and the app no longer gets stuck when the phone fails to save its device key.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: '2026-09-17b',
|
||||
date: 'September 2026',
|
||||
|
|
|
|||
|
|
@ -174,13 +174,23 @@ async function _continueAfterFetch(
|
|||
// pass_md5, a CDN oddaje jakiś plik, więc bez tej detekcji resolver uznaje usunięte
|
||||
// wideo za sukces i user dostaje placeholder albo "Source error" z ExoPlayera.
|
||||
// `no_video_` to obrazek-zaślepka (i.doodcdn.io/img/no_video_3.svg), najpewniejszy marker.
|
||||
//
|
||||
// 2026-10-02: szablon playera playmogo ma ten sam blok „Not Found" ZAWSZE, tylko ukryty
|
||||
// klasa `d-none` (<div class="... d-none"><img src=".../no_video_3.svg"><h1>Not Found</h1>).
|
||||
// Stare sprawdzanie samych slow uznawalo wiec KAZDY film za usuniety, resolver poddawal
|
||||
// sie od razu i cala rodzina (myvidplay, playmogo, doply) szla do WebView z klikanym
|
||||
// Cloudflare, choc pass_md5 jest w HTML, a adres gra bez zadnej weryfikacji (206
|
||||
// video/mp4, sprawdzone z IP domowego). Naprawde usuniety film ma tytul „Video not
|
||||
// found", blok bez `d-none` i nie ma pass_md5.
|
||||
const _low = html.toLowerCase();
|
||||
const notFoundHidden = /class="[^"]*\bd-none\b[^"]*"\s*>\s*<img[^>]*no_video_/i.test(html);
|
||||
const titleNotFound = /<title>[^<]*not found/i.test(html);
|
||||
if (
|
||||
_low.includes('video not found') ||
|
||||
_low.includes('is not found') ||
|
||||
_low.includes('no_video_') ||
|
||||
titleNotFound ||
|
||||
_low.includes('video has been deleted') ||
|
||||
_low.includes('file was deleted')
|
||||
_low.includes('file was deleted') ||
|
||||
(!notFoundHidden &&
|
||||
(_low.includes('video not found') || _low.includes('is not found') || _low.includes('no_video_')))
|
||||
) {
|
||||
return { error: 'video_deleted' };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1940,6 +1940,26 @@ function EmbedWebViewPlayer({ params }: { params: RouteParams }) {
|
|||
setResolveStatus('idle');
|
||||
setResolveError(result.error || 'unknown');
|
||||
setSkipResolve(true);
|
||||
// Bez tego nie bylo wiadomo, czemu cichy resolver pada: ekran od razu przechodzi
|
||||
// do WebView i blad znikal. myvidplay/playmogo przez miesiac szly do WebView, bo
|
||||
// resolver bral ukryty szablon „Not Found" za usuniety film (2026-10-02).
|
||||
// error_kind 'resolver' nie wchodzi do oceny zrodel (source_stats), bo WebView
|
||||
// moze ten film jeszcze odtworzyc.
|
||||
if (params.origin) {
|
||||
let host = '';
|
||||
try {
|
||||
host = new URL(url).hostname;
|
||||
} catch {
|
||||
host = '';
|
||||
}
|
||||
client.reportPlaybackEvent({
|
||||
origin: params.origin,
|
||||
status: 'error',
|
||||
scene_id: sceneId,
|
||||
error_kind: 'resolver',
|
||||
error_detail: `${host}: ${result.error || 'unknown'}`.slice(0, 512),
|
||||
});
|
||||
}
|
||||
}
|
||||
})();
|
||||
}, [url, refererHost, sceneId, durationSec, resolveAttempted, skipResolve, nav]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue