mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-05-11 12:30:46 +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 });
|
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(() => {
|
const handleLogoError = useCallback(() => {
|
||||||
if (!logoHasLoadedSuccessfully) {
|
if (!logoHasLoadedSuccessfully) {
|
||||||
// Only remove logo if it never loaded successfully
|
// Try addon logo as fallback if TMDB logo fails
|
||||||
setStableLogoUri(null);
|
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
|
// If logo loaded successfully before, keep showing it even if it fails later
|
||||||
}, [logoHasLoadedSuccessfully]);
|
}, [logoHasLoadedSuccessfully, stableLogoUri, metadata, logoLoadOpacity]);
|
||||||
|
|
||||||
// Performance optimization: Lazy loading setup
|
// Performance optimization: Lazy loading setup
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -1203,9 +1212,13 @@ const HeroSection: React.FC<HeroSectionProps> = memo(({
|
||||||
setImageError(true);
|
setImageError(true);
|
||||||
setImageLoaded(false);
|
setImageLoaded(false);
|
||||||
|
|
||||||
// Fallback to poster if banner fails
|
// Three-level fallback: TMDB → addon banner → poster
|
||||||
if (bannerImage !== metadata.banner) {
|
if (bannerImage !== metadata.banner && metadata.banner) {
|
||||||
setBannerImage(metadata.banner || metadata.poster);
|
// 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]);
|
}, [shouldLoadSecondaryData, bannerImage, metadata.banner, metadata.poster, setBannerImage]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -814,6 +814,9 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
||||||
// Start with addon metadata
|
// Start with addon metadata
|
||||||
let finalMetadata = content.value as StreamingContent;
|
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
|
// If localization is enabled, merge TMDB localized text (name/overview) before first render
|
||||||
try {
|
try {
|
||||||
if (settings.enrichMetadataWithTMDB && settings.useTmdbLocalizedMetadata) {
|
if (settings.enrichMetadataWithTMDB && settings.useTmdbLocalizedMetadata) {
|
||||||
|
|
@ -947,6 +950,11 @@ export const useMetadata = ({ id, type, addonId }: UseMetadataProps): UseMetadat
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit final metadata once and cache it
|
// 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
|
// Clear banner field if TMDB enrichment is enabled to prevent flash
|
||||||
if (settings.enrichMetadataWithTMDB) {
|
if (settings.enrichMetadataWithTMDB) {
|
||||||
finalMetadata = {
|
finalMetadata = {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue