mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-01-11 20:10:25 +00:00
improved hero banner and logo fallback
This commit is contained in:
parent
b71314b8f6
commit
e437a23029
2 changed files with 28 additions and 7 deletions
|
|
@ -1088,14 +1088,23 @@ const HeroSection: React.FC<HeroSectionProps> = memo(({
|
|||
logoLoadOpacity.value = withTiming(1, { duration: 300 });
|
||||
}, []);
|
||||
|
||||
// Handle logo load error - only set error if logo hasn't loaded successfully before
|
||||
// Handle logo load error - implement three-level fallback: TMDB logo → addon logo → text
|
||||
const handleLogoError = useCallback(() => {
|
||||
if (!logoHasLoadedSuccessfully) {
|
||||
// Only remove logo if it never loaded successfully
|
||||
setStableLogoUri(null);
|
||||
// Try addon logo as fallback if TMDB logo fails
|
||||
const addonLogo = (metadata as any)?.addonLogo;
|
||||
if (addonLogo && stableLogoUri !== addonLogo) {
|
||||
// TMDB logo failed, try addon logo
|
||||
setStableLogoUri(addonLogo);
|
||||
setLogoHasLoadedSuccessfully(false); // Reset to allow addon logo to try
|
||||
logoLoadOpacity.value = 0; // Reset fade for new logo attempt
|
||||
} else {
|
||||
// No addon logo available, remove logo to show text
|
||||
setStableLogoUri(null);
|
||||
}
|
||||
}
|
||||
// If logo loaded successfully before, keep showing it even if it fails later
|
||||
}, [logoHasLoadedSuccessfully]);
|
||||
}, [logoHasLoadedSuccessfully, stableLogoUri, metadata, logoLoadOpacity]);
|
||||
|
||||
// Performance optimization: Lazy loading setup
|
||||
useEffect(() => {
|
||||
|
|
@ -1203,9 +1212,13 @@ const HeroSection: React.FC<HeroSectionProps> = memo(({
|
|||
setImageError(true);
|
||||
setImageLoaded(false);
|
||||
|
||||
// Fallback to poster if banner fails
|
||||
if (bannerImage !== metadata.banner) {
|
||||
setBannerImage(metadata.banner || metadata.poster);
|
||||
// Three-level fallback: TMDB → addon banner → poster
|
||||
if (bannerImage !== metadata.banner && metadata.banner) {
|
||||
// Try addon banner if not already on it and it exists
|
||||
setBannerImage(metadata.banner);
|
||||
} else if (bannerImage !== metadata.poster && metadata.poster) {
|
||||
// Only use poster if addon banner also failed/missing
|
||||
setBannerImage(metadata.poster);
|
||||
}
|
||||
}, [shouldLoadSecondaryData, bannerImage, metadata.banner, metadata.poster, setBannerImage]);
|
||||
|
||||
|
|
|
|||
|
|
@ -813,6 +813,9 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
|||
|
||||
// Start with addon metadata
|
||||
let finalMetadata = content.value as StreamingContent;
|
||||
|
||||
// Store addon logo before TMDB enrichment overwrites it
|
||||
const addonLogo = (finalMetadata as any).logo;
|
||||
|
||||
// If localization is enabled, merge TMDB localized text (name/overview) before first render
|
||||
try {
|
||||
|
|
@ -947,6 +950,11 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
|||
}
|
||||
|
||||
// Commit final metadata once and cache it
|
||||
// Store addon logo as fallback if TMDB enrichment is enabled
|
||||
if (settings.enrichMetadataWithTMDB && addonLogo) {
|
||||
(finalMetadata as any).addonLogo = addonLogo;
|
||||
}
|
||||
|
||||
// Clear banner field if TMDB enrichment is enabled to prevent flash
|
||||
if (settings.enrichMetadataWithTMDB) {
|
||||
finalMetadata = {
|
||||
|
|
|
|||
Loading…
Reference in a new issue