This commit is contained in:
tapframe 2025-10-26 21:06:08 +05:30
parent 85cb950fa8
commit dd542091e1

View file

@ -96,9 +96,9 @@ export const EpisodeStreamsModal: React.FC<EpisodeStreamsModalProps> = ({
try { try {
const episodeId = episode.stremioId || `${metadata.id}:${episode.season_number}:${episode.episode_number}`; const episodeId = episode.stremioId || `${metadata.id}:${episode.season_number}:${episode.episode_number}`;
const allStreams: { [providerId: string]: { streams: Stream[]; addonName: string } } = {};
let completedProviders = 0; let completedProviders = 0;
const expectedProviders = new Set<string>(); const expectedProviders = new Set<string>();
const respondedProviders = new Set<string>();
const installedAddons = stremioService.getInstalledAddons(); const installedAddons = stremioService.getInstalledAddons();
const streamAddons = installedAddons.filter((addon: any) => const streamAddons = installedAddons.filter((addon: any) =>
@ -107,32 +107,41 @@ export const EpisodeStreamsModal: React.FC<EpisodeStreamsModalProps> = ({
streamAddons.forEach((addon: any) => expectedProviders.add(addon.id)); streamAddons.forEach((addon: any) => expectedProviders.add(addon.id));
logger.log(`[EpisodeStreamsModal] Fetching streams for ${episodeId}, expecting ${expectedProviders.size} providers`);
await stremioService.getStreams('series', episodeId, (streams: any, addonId: any, addonName: any, error: any) => { await stremioService.getStreams('series', episodeId, (streams: any, addonId: any, addonName: any, error: any) => {
completedProviders++; completedProviders++;
respondedProviders.add(addonId);
if (error) { if (error) {
logger.warn(`[EpisodeStreamsModal] Error from ${addonName}:`, error); logger.warn(`[EpisodeStreamsModal] Error from ${addonName || addonId}:`, error);
setHasErrors(prev => [...prev, `${addonName || addonId}: ${error.message || 'Unknown error'}`]); setHasErrors(prev => [...prev, `${addonName || addonId}: ${error.message || 'Unknown error'}`]);
return; } else if (streams && streams.length > 0) {
} // Update state incrementally for each provider
setAvailableStreams(prev => ({
if (streams && streams.length > 0) { ...prev,
allStreams[addonId] = { [addonId]: {
streams: streams, streams: streams,
addonName: addonName || addonId addonName: addonName || addonId
}; }
}));
logger.log(`[EpisodeStreamsModal] Added ${streams.length} streams from ${addonName || addonId}`);
} else {
logger.log(`[EpisodeStreamsModal] No streams from ${addonName || addonId}`);
} }
if (completedProviders >= expectedProviders.size) { if (completedProviders >= expectedProviders.size) {
setAvailableStreams(allStreams); logger.log(`[EpisodeStreamsModal] All providers completed. Total providers responded: ${respondedProviders.size}`);
setIsLoading(false); setIsLoading(false);
} }
}); });
// Fallback timeout // Fallback timeout
setTimeout(() => { setTimeout(() => {
if (Object.keys(allStreams).length === 0 && !isLoading) { if (respondedProviders.size === 0) {
logger.warn(`[EpisodeStreamsModal] Timeout: No providers responded`);
setHasErrors(prev => [...prev, 'Timeout: No providers responded']); setHasErrors(prev => [...prev, 'Timeout: No providers responded']);
setIsLoading(false);
} }
}, 8000); }, 8000);