mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-04-21 00:32:04 +00:00
Merge pull request #331 from chrisk325/main
fixed tmdb enrichment logic , fixed trakt not syncing watch progress for old seasons
This commit is contained in:
commit
2b802079a0
5 changed files with 42 additions and 14 deletions
|
|
@ -114,6 +114,10 @@ export function useFeaturedContent() {
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (base.logo && !isTmdbUrl(base.logo)) {
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
if (!settings.enrichMetadataWithTMDB) {
|
if (!settings.enrichMetadataWithTMDB) {
|
||||||
return { ...base, logo: base.logo || undefined };
|
return { ...base, logo: base.logo || undefined };
|
||||||
}
|
}
|
||||||
|
|
@ -150,6 +154,7 @@ export function useFeaturedContent() {
|
||||||
id: item.id,
|
id: item.id,
|
||||||
type: item.type,
|
type: item.type,
|
||||||
name: item.name,
|
name: item.name,
|
||||||
|
addonId: item.addonId,
|
||||||
poster: item.poster,
|
poster: item.poster,
|
||||||
banner: (item as any).banner,
|
banner: (item as any).banner,
|
||||||
logo: (item as any).logo || undefined,
|
logo: (item as any).logo || undefined,
|
||||||
|
|
|
||||||
|
|
@ -857,8 +857,8 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
||||||
|
|
||||||
finalMetadata = {
|
finalMetadata = {
|
||||||
...finalMetadata,
|
...finalMetadata,
|
||||||
name: localized.title || finalMetadata.name,
|
name: finalMetadata.name || localized.title,
|
||||||
description: localized.overview || finalMetadata.description,
|
description: finalMetadata.description || localized.overview,
|
||||||
movieDetails: movieDetailsObj,
|
movieDetails: movieDetailsObj,
|
||||||
...(productionInfo.length > 0 && { networks: productionInfo }),
|
...(productionInfo.length > 0 && { networks: productionInfo }),
|
||||||
};
|
};
|
||||||
|
|
@ -894,8 +894,8 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
||||||
|
|
||||||
finalMetadata = {
|
finalMetadata = {
|
||||||
...finalMetadata,
|
...finalMetadata,
|
||||||
name: localized.name || finalMetadata.name,
|
name: finalMetadata.name || localized.name,
|
||||||
description: localized.overview || finalMetadata.description,
|
description: finalMetadata.description || localized.overview,
|
||||||
tvDetails,
|
tvDetails,
|
||||||
...(productionInfo.length > 0 && { networks: productionInfo }),
|
...(productionInfo.length > 0 && { networks: productionInfo }),
|
||||||
};
|
};
|
||||||
|
|
@ -970,7 +970,7 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear banner field if TMDB banner enrichment is enabled to prevent flash
|
// Clear banner field if TMDB banner enrichment is enabled to prevent flash
|
||||||
if (settings.enrichMetadataWithTMDB && settings.tmdbEnrichBanners) {
|
if (settings.enrichMetadataWithTMDB && settings.tmdbEnrichBanners && !finalMetadata.banner) {
|
||||||
finalMetadata = {
|
finalMetadata = {
|
||||||
...finalMetadata,
|
...finalMetadata,
|
||||||
banner: undefined, // Let useMetadataAssets handle banner via TMDB
|
banner: undefined, // Let useMetadataAssets handle banner via TMDB
|
||||||
|
|
|
||||||
|
|
@ -177,17 +177,17 @@ export const useMetadataAssets = (
|
||||||
// Only update if request wasn't aborted and component is still mounted
|
// Only update if request wasn't aborted and component is still mounted
|
||||||
if (!isMountedRef.current) return;
|
if (!isMountedRef.current) return;
|
||||||
|
|
||||||
if (details?.backdrop_path) {
|
if (metadata?.banner) {
|
||||||
|
finalBanner = metadata.banner;
|
||||||
|
bannerSourceType = 'default';
|
||||||
|
} else if (details?.backdrop_path) {
|
||||||
finalBanner = tmdbService.getImageUrl(details.backdrop_path);
|
finalBanner = tmdbService.getImageUrl(details.backdrop_path);
|
||||||
bannerSourceType = 'tmdb';
|
bannerSourceType = 'tmdb';
|
||||||
|
|
||||||
// Preload the image
|
|
||||||
if (finalBanner) {
|
if (finalBanner) {
|
||||||
FastImage.preload([{ uri: finalBanner }]);
|
FastImage.preload([{ uri: finalBanner }]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// TMDB has no backdrop, gracefully fall back
|
finalBanner = bannerImage || null;
|
||||||
finalBanner = metadata?.banner || bannerImage || null;
|
|
||||||
bannerSourceType = 'default';
|
bannerSourceType = 'default';
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -269,4 +269,4 @@ export const useMetadataAssets = (
|
||||||
logoLoadError: false,
|
logoLoadError: false,
|
||||||
setLogoLoadError: () => { },
|
setLogoLoadError: () => { },
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -521,9 +521,10 @@ export function useTraktIntegration() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Fetch both playback progress and recently watched movies
|
// Fetch both playback progress and recently watched movies
|
||||||
const [traktProgress, watchedMovies] = await Promise.all([
|
const [traktProgress, watchedMovies, watchedShows] = await Promise.all([
|
||||||
getTraktPlaybackProgress(),
|
getTraktPlaybackProgress(),
|
||||||
traktService.getWatchedMovies()
|
traktService.getWatchedMovies()
|
||||||
|
traktService.getWatchedShows()
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Progress retrieval logging removed
|
// Progress retrieval logging removed
|
||||||
|
|
@ -593,6 +594,28 @@ export function useTraktIntegration() {
|
||||||
logger.error('[useTraktIntegration] Error preparing watched movie update:', error);
|
logger.error('[useTraktIntegration] Error preparing watched movie update:', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (const show of watchedShows) {
|
||||||
|
try {
|
||||||
|
if (show.show?.ids?.imdb && show.seasons) {
|
||||||
|
const showImdbId = show.show.ids.imdb;
|
||||||
|
|
||||||
|
for (const season of show.seasons) {
|
||||||
|
for (const episode of season.episodes) {
|
||||||
|
const episodeId = `${showImdbId}:${season.number}:${episode.number}`;
|
||||||
|
updatePromises.push(
|
||||||
|
storageService.mergeWithTraktProgress(
|
||||||
|
showImdbId,
|
||||||
|
'series',
|
||||||
|
100,
|
||||||
|
episode.last_watched_at,
|
||||||
|
episodeId
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
logger.error('[useTraktIntegration] Error preparing watched show update:', error);
|
||||||
|
|
||||||
// Execute all updates in parallel
|
// Execute all updates in parallel
|
||||||
await Promise.all(updatePromises);
|
await Promise.all(updatePromises);
|
||||||
|
|
@ -698,4 +721,4 @@ export function useTraktIntegration() {
|
||||||
isInWatchlist,
|
isInWatchlist,
|
||||||
isInCollection
|
isInCollection
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,7 @@ export const useStreamsScreen = () => {
|
||||||
episodeId: (type === 'series' || type === 'other') && selectedEpisode ? selectedEpisode : undefined,
|
episodeId: (type === 'series' || type === 'other') && selectedEpisode ? selectedEpisode : undefined,
|
||||||
imdbId: imdbId || undefined,
|
imdbId: imdbId || undefined,
|
||||||
availableStreams: streamsToPass,
|
availableStreams: streamsToPass,
|
||||||
backdrop: bannerImage || metadata?.banner,
|
backdrop: metadata?.banner || bannerImage,
|
||||||
videoType,
|
videoType,
|
||||||
} as any);
|
} as any);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue