mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-04-30 12:44:51 +00:00
removed streamscreen header filter
This commit is contained in:
parent
44f9aa5c35
commit
bfba45e74a
2 changed files with 127 additions and 4 deletions
|
|
@ -67,6 +67,7 @@ interface PlayerRouteParams {
|
||||||
year?: number;
|
year?: number;
|
||||||
streamProvider?: string;
|
streamProvider?: string;
|
||||||
streamName?: string;
|
streamName?: string;
|
||||||
|
videoType?: string;
|
||||||
id: string;
|
id: string;
|
||||||
type: string;
|
type: string;
|
||||||
episodeId?: string;
|
episodeId?: string;
|
||||||
|
|
@ -92,6 +93,42 @@ const KSPlayerCore: React.FC = () => {
|
||||||
initialPosition: routeInitialPosition
|
initialPosition: routeInitialPosition
|
||||||
} = params;
|
} = params;
|
||||||
|
|
||||||
|
const videoType = (params as any)?.videoType as string | undefined;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!__DEV__) return;
|
||||||
|
const headerKeys = Object.keys(headers || {});
|
||||||
|
logger.log('[KSPlayerCore] route params', {
|
||||||
|
uri: typeof uri === 'string' ? uri.slice(0, 240) : uri,
|
||||||
|
id,
|
||||||
|
type,
|
||||||
|
episodeId,
|
||||||
|
imdbId,
|
||||||
|
title,
|
||||||
|
episodeTitle,
|
||||||
|
season,
|
||||||
|
episode,
|
||||||
|
quality,
|
||||||
|
year,
|
||||||
|
streamProvider,
|
||||||
|
streamName,
|
||||||
|
videoType,
|
||||||
|
headersKeys: headerKeys,
|
||||||
|
headersCount: headerKeys.length,
|
||||||
|
});
|
||||||
|
}, [uri, episodeId]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!__DEV__) return;
|
||||||
|
const headerKeys = Object.keys(headers || {});
|
||||||
|
logger.log('[KSPlayerCore] source update', {
|
||||||
|
uri: typeof uri === 'string' ? uri.slice(0, 240) : uri,
|
||||||
|
videoType,
|
||||||
|
headersCount: headerKeys.length,
|
||||||
|
headersKeys: headerKeys,
|
||||||
|
});
|
||||||
|
}, [uri, headers, videoType]);
|
||||||
|
|
||||||
// --- Hooks ---
|
// --- Hooks ---
|
||||||
const playerState = usePlayerState();
|
const playerState = usePlayerState();
|
||||||
const {
|
const {
|
||||||
|
|
@ -399,6 +436,17 @@ const KSPlayerCore: React.FC = () => {
|
||||||
|
|
||||||
// Handlers
|
// Handlers
|
||||||
const onLoad = (data: any) => {
|
const onLoad = (data: any) => {
|
||||||
|
if (__DEV__) {
|
||||||
|
logger.log('[KSPlayerCore] onLoad', {
|
||||||
|
uri: typeof uri === 'string' ? uri.slice(0, 240) : uri,
|
||||||
|
duration: data?.duration,
|
||||||
|
audioTracksCount: Array.isArray(data?.audioTracks) ? data.audioTracks.length : 0,
|
||||||
|
textTracksCount: Array.isArray(data?.textTracks) ? data.textTracks.length : 0,
|
||||||
|
videoType,
|
||||||
|
headersKeys: Object.keys(headers || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
setDuration(data.duration);
|
setDuration(data.duration);
|
||||||
if (data.audioTracks) tracks.setKsAudioTracks(data.audioTracks);
|
if (data.audioTracks) tracks.setKsAudioTracks(data.audioTracks);
|
||||||
if (data.textTracks) tracks.setKsTextTracks(data.textTracks);
|
if (data.textTracks) tracks.setKsTextTracks(data.textTracks);
|
||||||
|
|
@ -482,6 +530,18 @@ const KSPlayerCore: React.FC = () => {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
msg = 'Error parsing error details';
|
msg = 'Error parsing error details';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (__DEV__) {
|
||||||
|
logger.error('[KSPlayerCore] onError', {
|
||||||
|
msg,
|
||||||
|
uri: typeof uri === 'string' ? uri.slice(0, 240) : uri,
|
||||||
|
videoType,
|
||||||
|
streamProvider,
|
||||||
|
streamName,
|
||||||
|
headersKeys: Object.keys(headers || {}),
|
||||||
|
rawError: error,
|
||||||
|
});
|
||||||
|
}
|
||||||
modals.setErrorDetails(msg);
|
modals.setErrorDetails(msg);
|
||||||
modals.setShowErrorModal(true);
|
modals.setShowErrorModal(true);
|
||||||
};
|
};
|
||||||
|
|
@ -525,6 +585,17 @@ const KSPlayerCore: React.FC = () => {
|
||||||
modals.setShowSourcesModal(false);
|
modals.setShowSourcesModal(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (__DEV__) {
|
||||||
|
logger.log('[KSPlayerCore] switching stream', {
|
||||||
|
fromUri: typeof uri === 'string' ? uri.slice(0, 240) : uri,
|
||||||
|
toUri: typeof newStream?.url === 'string' ? newStream.url.slice(0, 240) : newStream?.url,
|
||||||
|
newStreamHeadersKeys: Object.keys(newStream?.headers || {}),
|
||||||
|
newProvider: newStream?.addonName || newStream?.name || newStream?.addon || 'Unknown',
|
||||||
|
newName: newStream?.name || newStream?.title || 'Unknown',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
modals.setShowSourcesModal(false);
|
modals.setShowSourcesModal(false);
|
||||||
setPaused(true);
|
setPaused(true);
|
||||||
|
|
||||||
|
|
@ -559,6 +630,19 @@ const KSPlayerCore: React.FC = () => {
|
||||||
setPaused(true);
|
setPaused(true);
|
||||||
const ep = modals.selectedEpisodeForStreams;
|
const ep = modals.selectedEpisodeForStreams;
|
||||||
|
|
||||||
|
if (__DEV__) {
|
||||||
|
logger.log('[KSPlayerCore] switching episode stream', {
|
||||||
|
toUri: typeof stream?.url === 'string' ? stream.url.slice(0, 240) : stream?.url,
|
||||||
|
streamHeadersKeys: Object.keys(stream?.headers || {}),
|
||||||
|
ep: {
|
||||||
|
season: ep?.season_number,
|
||||||
|
episode: ep?.episode_number,
|
||||||
|
name: ep?.name,
|
||||||
|
stremioId: ep?.stremioId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const newQuality = stream.quality || (stream.title?.match(/(\d+)p/)?.[0]);
|
const newQuality = stream.quality || (stream.title?.match(/(\d+)p/)?.[0]);
|
||||||
const newProvider = stream.addonName || stream.name || stream.addon || 'Unknown';
|
const newProvider = stream.addonName || stream.name || stream.addon || 'Unknown';
|
||||||
const newStreamName = stream.name || stream.title || 'Unknown Stream';
|
const newStreamName = stream.name || stream.title || 'Unknown Stream';
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ import {
|
||||||
getQualityNumeric,
|
getQualityNumeric,
|
||||||
detectMkvViaHead,
|
detectMkvViaHead,
|
||||||
inferVideoTypeFromUrl,
|
inferVideoTypeFromUrl,
|
||||||
filterHeadersForVidrock,
|
|
||||||
sortStreamsByQuality,
|
sortStreamsByQuality,
|
||||||
} from './utils';
|
} from './utils';
|
||||||
import {
|
import {
|
||||||
|
|
@ -356,11 +355,17 @@ export const useStreamsScreen = () => {
|
||||||
// Navigate to player
|
// Navigate to player
|
||||||
const navigateToPlayer = useCallback(
|
const navigateToPlayer = useCallback(
|
||||||
async (stream: Stream, options?: { headers?: Record<string, string> }) => {
|
async (stream: Stream, options?: { headers?: Record<string, string> }) => {
|
||||||
const finalHeaders = filterHeadersForVidrock(options?.headers || (stream.headers as any));
|
const optionHeaders = options?.headers;
|
||||||
|
const streamHeaders = (stream.headers as any) as Record<string, string> | undefined;
|
||||||
|
const proxyHeaders = ((stream as any)?.behaviorHints?.proxyHeaders?.request || undefined) as
|
||||||
|
| Record<string, string>
|
||||||
|
| undefined;
|
||||||
|
const streamProvider = stream.addonId || (stream as any).addonName || stream.name;
|
||||||
|
const finalHeaders = optionHeaders || streamHeaders || proxyHeaders;
|
||||||
|
|
||||||
const streamsToPass = selectedEpisode ? episodeStreams : groupedStreams;
|
const streamsToPass = selectedEpisode ? episodeStreams : groupedStreams;
|
||||||
const streamName = stream.name || stream.title || 'Unnamed Stream';
|
const streamName = stream.name || stream.title || 'Unnamed Stream';
|
||||||
const streamProvider = stream.addonId || stream.addonName || stream.name;
|
const resolvedStreamProvider = streamProvider;
|
||||||
|
|
||||||
// Save stream to cache
|
// Save stream to cache
|
||||||
try {
|
try {
|
||||||
|
|
@ -393,6 +398,22 @@ export const useStreamsScreen = () => {
|
||||||
}
|
}
|
||||||
} catch { }
|
} catch { }
|
||||||
|
|
||||||
|
if (__DEV__) {
|
||||||
|
const finalHeaderKeys = Object.keys(finalHeaders || {});
|
||||||
|
|
||||||
|
logger.log('[StreamsScreen][navigateToPlayer] stream selection', {
|
||||||
|
url: typeof stream.url === 'string' ? stream.url.slice(0, 240) : stream.url,
|
||||||
|
addonId: stream.addonId,
|
||||||
|
addonName: (stream as any).addonName,
|
||||||
|
name: stream.name,
|
||||||
|
title: stream.title,
|
||||||
|
inferredVideoType: videoType,
|
||||||
|
optionHeadersKeys: Object.keys(optionHeaders || {}),
|
||||||
|
streamHeadersKeys: Object.keys(streamHeaders || {}),
|
||||||
|
finalHeadersKeys: finalHeaderKeys,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const playerRoute = Platform.OS === 'ios' ? 'PlayerIOS' : 'PlayerAndroid';
|
const playerRoute = Platform.OS === 'ios' ? 'PlayerIOS' : 'PlayerAndroid';
|
||||||
|
|
||||||
navigation.navigate(playerRoute as any, {
|
navigation.navigate(playerRoute as any, {
|
||||||
|
|
@ -403,7 +424,7 @@ export const useStreamsScreen = () => {
|
||||||
episode: (type === 'series' || type === 'other') ? currentEpisode?.episode_number : undefined,
|
episode: (type === 'series' || type === 'other') ? currentEpisode?.episode_number : undefined,
|
||||||
quality: (stream.title?.match(/(\d+)p/) || [])[1] || undefined,
|
quality: (stream.title?.match(/(\d+)p/) || [])[1] || undefined,
|
||||||
year: metadata?.year,
|
year: metadata?.year,
|
||||||
streamProvider,
|
streamProvider: resolvedStreamProvider,
|
||||||
streamName,
|
streamName,
|
||||||
headers: finalHeaders,
|
headers: finalHeaders,
|
||||||
id,
|
id,
|
||||||
|
|
@ -424,6 +445,24 @@ export const useStreamsScreen = () => {
|
||||||
try {
|
try {
|
||||||
if (!stream.url) return;
|
if (!stream.url) return;
|
||||||
|
|
||||||
|
if (__DEV__) {
|
||||||
|
const streamHeaders = (stream.headers as any) as Record<string, string> | undefined;
|
||||||
|
const proxyHeaders = ((stream as any)?.behaviorHints?.proxyHeaders?.request || undefined) as
|
||||||
|
| Record<string, string>
|
||||||
|
| undefined;
|
||||||
|
|
||||||
|
logger.log('[StreamsScreen][handleStreamPress] pressed stream', {
|
||||||
|
url: typeof stream.url === 'string' ? stream.url.slice(0, 240) : stream.url,
|
||||||
|
addonId: stream.addonId,
|
||||||
|
addonName: (stream as any).addonName,
|
||||||
|
name: stream.name,
|
||||||
|
title: stream.title,
|
||||||
|
streamHeadersKeys: Object.keys(streamHeaders || {}),
|
||||||
|
proxyHeadersKeys: Object.keys(proxyHeaders || {}),
|
||||||
|
inferredVideoType: inferVideoTypeFromUrl(stream.url),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Block magnet links
|
// Block magnet links
|
||||||
if (typeof stream.url === 'string' && stream.url.startsWith('magnet:')) {
|
if (typeof stream.url === 'string' && stream.url.startsWith('magnet:')) {
|
||||||
openAlert('Not supported', 'Torrent streaming is not supported yet.');
|
openAlert('Not supported', 'Torrent streaming is not supported yet.');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue