diff --git a/mobile/src/screens/PlayerScreen.tsx b/mobile/src/screens/PlayerScreen.tsx
index f323269..efd2408 100644
--- a/mobile/src/screens/PlayerScreen.tsx
+++ b/mobile/src/screens/PlayerScreen.tsx
@@ -698,6 +698,18 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) {
? panSeekTarget
: position;
+ // Czy jest jeszcze JAKAKOLWIEK ścieżka ratunku w toku? Gdy tak — NIE pokazuj
+ // terminalnego błędu z „Mark broken", bo za chwilę zagra (report dafa8cdb: eporner/
+ // sxyprn/fpoxxx native pada na starcie, re-resolve podmienia URL ~1-3s później i gra;
+ // przez tę chwilę migało „Playback failed / Mark broken"). Lustro logiki telemetrii:
+ // re-resolve IP-bound, in-place seek-recovery, proxy albo WebView jeszcze nie próbowane.
+ const recoveryPending =
+ status === 'error' &&
+ ((!!resolvePageUrl && !reResolveDone && !loadedOnceRef.current) ||
+ (loadedOnceRef.current && seekRecoveryRef.current < 2 && !isGoneError(playerError?.message)) ||
+ (!!fallbackProxyUrl && !didFallbackProxyRef.current && url !== fallbackProxyUrl) ||
+ (!!fallbackEmbedUrl && !didFallbackWebViewRef.current));
+
return (
{/* Hidden status bar — full-bleed video w landscape bez 24px paska systemu. */}
@@ -817,7 +829,7 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) {
{title ?? 'Loading…'}
)}
- {status === 'error' && !fallbackEmbedUrl && (
+ {status === 'error' && !recoveryPending && (
{isGoneError(playerError?.message) ? 'Source no longer available' : 'Playback failed'}
@@ -839,10 +851,14 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) {
)}
- {status === 'error' && fallbackEmbedUrl && (
+ {recoveryPending && (
- Native player failed — switching to embed…
+
+ {fallbackEmbedUrl && !didFallbackWebViewRef.current
+ ? 'Native player failed — switching to embed…'
+ : 'Reconnecting…'}
+
)}