improved hero banner and logo fallback

This commit is contained in:
tapframe 2025-10-27 20:18:33 +05:30
parent b71314b8f6
commit e437a23029
2 changed files with 28 additions and 7 deletions

View file

@ -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]);

View file

@ -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 = {