mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-05-08 11:10:55 +00:00
added parallel season fetching
This commit is contained in:
parent
4aa22cc1c3
commit
3e63efc178
2 changed files with 37 additions and 18 deletions
|
|
@ -489,9 +489,18 @@ const SeriesContentComponent: React.FC<SeriesContentProps> = ({
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Add effect to scroll to selected season
|
// Track previous season to only scroll when it actually changes
|
||||||
|
const previousSeasonRef = React.useRef<number | null>(null);
|
||||||
|
|
||||||
|
// Add effect to scroll to selected season (only when season changes, not on every groupedEpisodes update)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (selectedSeason && seasonScrollViewRef.current && Object.keys(groupedEpisodes).length > 0) {
|
if (selectedSeason && seasonScrollViewRef.current && Object.keys(groupedEpisodes).length > 0) {
|
||||||
|
// Only scroll if the season actually changed (not just groupedEpisodes update)
|
||||||
|
if (previousSeasonRef.current === selectedSeason) {
|
||||||
|
return; // Season didn't change, don't scroll
|
||||||
|
}
|
||||||
|
previousSeasonRef.current = selectedSeason;
|
||||||
|
|
||||||
// Find the index of the selected season
|
// Find the index of the selected season
|
||||||
const seasons = Object.keys(groupedEpisodes).map(Number).sort((a, b) => a - b);
|
const seasons = Object.keys(groupedEpisodes).map(Number).sort((a, b) => a - b);
|
||||||
const selectedIndex = seasons.findIndex(season => season === selectedSeason);
|
const selectedIndex = seasons.findIndex(season => season === selectedSeason);
|
||||||
|
|
|
||||||
|
|
@ -1157,27 +1157,37 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
||||||
// Use just the language code (e.g., 'ar', not 'ar-US') for TMDB API
|
// Use just the language code (e.g., 'ar', not 'ar-US') for TMDB API
|
||||||
const lang = settings.tmdbLanguagePreference || 'en';
|
const lang = settings.tmdbLanguagePreference || 'en';
|
||||||
const seasons = Object.keys(groupedAddonEpisodes).map(Number);
|
const seasons = Object.keys(groupedAddonEpisodes).map(Number);
|
||||||
for (const seasonNum of seasons) {
|
|
||||||
const seasonEps = groupedAddonEpisodes[seasonNum];
|
// Fetch all seasons in parallel (much faster than fetching each episode individually)
|
||||||
// Parallel fetch a reasonable batch (limit concurrency implicitly by season)
|
const seasonPromises = seasons.map(async seasonNum => {
|
||||||
const localized = await Promise.all(
|
try {
|
||||||
seasonEps.map(async ep => {
|
// getSeasonDetails returns all episodes for a season in one call
|
||||||
try {
|
const seasonData = await tmdbService.getSeasonDetails(Number(tmdbIdToUse), seasonNum, undefined, lang);
|
||||||
const data = await tmdbService.getEpisodeDetails(Number(tmdbIdToUse), seasonNum, ep.episode_number, lang);
|
if (seasonData && seasonData.episodes) {
|
||||||
if (data) {
|
// Create a map of episode number -> localized data for fast lookup
|
||||||
|
const localizedMap = new Map<number, { name: string; overview: string }>();
|
||||||
|
for (const ep of seasonData.episodes) {
|
||||||
|
localizedMap.set(ep.episode_number, { name: ep.name, overview: ep.overview });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Merge localized data into addon episodes
|
||||||
|
groupedAddonEpisodes[seasonNum] = groupedAddonEpisodes[seasonNum].map(ep => {
|
||||||
|
const localized = localizedMap.get(ep.episode_number);
|
||||||
|
if (localized) {
|
||||||
return {
|
return {
|
||||||
...ep,
|
...ep,
|
||||||
name: data.name || ep.name,
|
name: localized.name || ep.name,
|
||||||
overview: data.overview || ep.overview,
|
overview: localized.overview || ep.overview,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
} catch { }
|
return ep;
|
||||||
return ep;
|
});
|
||||||
})
|
}
|
||||||
);
|
} catch { }
|
||||||
groupedAddonEpisodes[seasonNum] = localized;
|
});
|
||||||
}
|
|
||||||
if (__DEV__) logger.log('[useMetadata] merged localized episode names/overviews from TMDB');
|
await Promise.all(seasonPromises);
|
||||||
|
if (__DEV__) logger.log('[useMetadata] merged localized episode names/overviews from TMDB (batch)');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (__DEV__) console.log('[useMetadata] failed to merge localized episode text', e);
|
if (__DEV__) console.log('[useMetadata] failed to merge localized episode text', e);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue