mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-01-11 20:10:25 +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(() => {
|
||||
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
|
||||
const seasons = Object.keys(groupedEpisodes).map(Number).sort((a, b) => a - b);
|
||||
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
|
||||
const lang = settings.tmdbLanguagePreference || 'en';
|
||||
const seasons = Object.keys(groupedAddonEpisodes).map(Number);
|
||||
for (const seasonNum of seasons) {
|
||||
const seasonEps = groupedAddonEpisodes[seasonNum];
|
||||
// Parallel fetch a reasonable batch (limit concurrency implicitly by season)
|
||||
const localized = await Promise.all(
|
||||
seasonEps.map(async ep => {
|
||||
try {
|
||||
const data = await tmdbService.getEpisodeDetails(Number(tmdbIdToUse), seasonNum, ep.episode_number, lang);
|
||||
if (data) {
|
||||
|
||||
// Fetch all seasons in parallel (much faster than fetching each episode individually)
|
||||
const seasonPromises = seasons.map(async seasonNum => {
|
||||
try {
|
||||
// getSeasonDetails returns all episodes for a season in one call
|
||||
const seasonData = await tmdbService.getSeasonDetails(Number(tmdbIdToUse), seasonNum, undefined, lang);
|
||||
if (seasonData && seasonData.episodes) {
|
||||
// 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 {
|
||||
...ep,
|
||||
name: data.name || ep.name,
|
||||
overview: data.overview || ep.overview,
|
||||
name: localized.name || ep.name,
|
||||
overview: localized.overview || ep.overview,
|
||||
};
|
||||
}
|
||||
} catch { }
|
||||
return ep;
|
||||
})
|
||||
);
|
||||
groupedAddonEpisodes[seasonNum] = localized;
|
||||
}
|
||||
if (__DEV__) logger.log('[useMetadata] merged localized episode names/overviews from TMDB');
|
||||
return ep;
|
||||
});
|
||||
}
|
||||
} catch { }
|
||||
});
|
||||
|
||||
await Promise.all(seasonPromises);
|
||||
if (__DEV__) logger.log('[useMetadata] merged localized episode names/overviews from TMDB (batch)');
|
||||
}
|
||||
} catch (e) {
|
||||
if (__DEV__) console.log('[useMetadata] failed to merge localized episode text', e);
|
||||
|
|
|
|||
Loading…
Reference in a new issue