fix
This commit is contained in:
		
							parent
							
								
									ed6cb69add
								
							
						
					
					
						commit
						4dc6a89cfe
					
				@ -17,7 +17,7 @@
 | 
				
			|||||||
    "navRecommendations": { "message": "Empfehlungen" },
 | 
					    "navRecommendations": { "message": "Empfehlungen" },
 | 
				
			||||||
    "navMusic": { "message": "Musik" },
 | 
					    "navMusic": { "message": "Musik" },
 | 
				
			||||||
    "navM3uGenerator": { "message": "M3U-Generator" },
 | 
					    "navM3uGenerator": { "message": "M3U-Generator" },
 | 
				
			||||||
    "heroWelcome": { "message": "Willkommen bei CinePlex" },
 | 
					    "heroWelcome": { "message": "" },
 | 
				
			||||||
    "heroSubtitle": { "message": "Entdecken Sie Tausende von Filmen und Serien." },
 | 
					    "heroSubtitle": { "message": "Entdecken Sie Tausende von Filmen und Serien." },
 | 
				
			||||||
    "addStream": { "message": "Stream hinzufügen" },
 | 
					    "addStream": { "message": "Stream hinzufügen" },
 | 
				
			||||||
    "moreInfo": { "message": "Mehr Info" },
 | 
					    "moreInfo": { "message": "Mehr Info" },
 | 
				
			||||||
@ -261,8 +261,13 @@
 | 
				
			|||||||
    "episodesCount": {"message": "$count$ Episoden", "placeholders": {"count": {"content": "$1"}}},
 | 
					    "episodesCount": {"message": "$count$ Episoden", "placeholders": {"count": {"content": "$1"}}},
 | 
				
			||||||
    "seasonsCount": {"message": "$count$ Staffeln", "placeholders": {"count": {"content": "$1"}}},
 | 
					    "seasonsCount": {"message": "$count$ Staffeln", "placeholders": {"count": {"content": "$1"}}},
 | 
				
			||||||
    "runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
 | 
					    "runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
 | 
				
			||||||
    "noTrailerFound": {"message": "Kein Trailer für diesen Titel gefunden."},n    "fatalInitError": {"message": "Fataler Initialisierungsfehler"},
 | 
					    "noTrailerFound": {"message": "Kein Trailer für diesen Titel gefunden."},
 | 
				
			||||||
    "fatalInitErrorSub": {"message": "Die Anwendung konnte nicht geladen werden."},n    "invalidStreamInfo": {"message": "Ungültige Informationen."},n    "dbUnavailableForStreams": {"message": "Lokale Datenbank nicht verfügbar."},n    "noPlexServersForStreams": {"message": "Keine Plex-Server."},n    "notFoundOnServers": {"message": "\"$query$\" auf Plex-Servern nicht gefunden.", "placeholders": {"query": {"content": "$1"}}},
 | 
					    "fatalInitError": {"message": "Fataler Initialisierungsfehler"},
 | 
				
			||||||
 | 
					    "fatalInitErrorSub": {"message": "Die Anwendung konnte nicht geladen werden."},
 | 
				
			||||||
 | 
					    "invalidStreamInfo": {"message": "Ungültige Informationen."},
 | 
				
			||||||
 | 
					    "dbUnavailableForStreams": {"message": "Lokale Datenbank nicht verfügbar."},
 | 
				
			||||||
 | 
					    "noPlexServersForStreams": {"message": "Keine Plex-Server."},
 | 
				
			||||||
 | 
					    "notFoundOnServers": {"message": "\"$query$\" auf Plex-Servern nicht gefunden.", "placeholders": {"query": {"content": "$1"}}},
 | 
				
			||||||
    "relativeTime_justNow": { "message": "Gerade eben" },
 | 
					    "relativeTime_justNow": { "message": "Gerade eben" },
 | 
				
			||||||
    "relativeTime_minutesAgo": { "message": "Vor $count$ Minuten", "placeholders": { "count": { "content": "$1" } } },
 | 
					    "relativeTime_minutesAgo": { "message": "Vor $count$ Minuten", "placeholders": { "count": { "content": "$1" } } },
 | 
				
			||||||
    "relativeTime_hoursAgo": { "message": "Vor $count$ Stunden", "placeholders": { "count": { "content": "$1" } } },
 | 
					    "relativeTime_hoursAgo": { "message": "Vor $count$ Stunden", "placeholders": { "count": { "content": "$1" } } },
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@
 | 
				
			|||||||
    "navRecommendations": { "message": "Recommendations" },
 | 
					    "navRecommendations": { "message": "Recommendations" },
 | 
				
			||||||
    "navMusic": { "message": "Music" },
 | 
					    "navMusic": { "message": "Music" },
 | 
				
			||||||
    "navM3uGenerator": { "message": "M3U Generator" },
 | 
					    "navM3uGenerator": { "message": "M3U Generator" },
 | 
				
			||||||
    "heroWelcome": { "message": "Welcome to CinePlex" },
 | 
					    "heroWelcome": { "message": "" },
 | 
				
			||||||
    "heroSubtitle": { "message": "Explore thousands of movies and series." },
 | 
					    "heroSubtitle": { "message": "Explore thousands of movies and series." },
 | 
				
			||||||
    "addStream": { "message": "Add Stream" },
 | 
					    "addStream": { "message": "Add Stream" },
 | 
				
			||||||
    "moreInfo": { "message": "More info" },
 | 
					    "moreInfo": { "message": "More info" },
 | 
				
			||||||
 | 
				
			|||||||
@ -440,7 +440,7 @@
 | 
				
			|||||||
    "tokenAddedSuccessfully": { "message": "Token añadido correctamente." },
 | 
					    "tokenAddedSuccessfully": { "message": "Token añadido correctamente." },
 | 
				
			||||||
    "noStreamsFoundForSelection": { "message": "No se encontraron streams para la selección." },
 | 
					    "noStreamsFoundForSelection": { "message": "No se encontraron streams para la selección." },
 | 
				
			||||||
    "autoplayBlocked": { "message": "Reproducción automática bloqueada." },
 | 
					    "autoplayBlocked": { "message": "Reproducción automática bloqueada." },
 | 
				
			||||||
    "welcomeToCinePlex": { "message": "Bienvenido a CinePlex" },
 | 
					    "welcomeToCinePlex": { "message": "" },
 | 
				
			||||||
    "page": { "message": "Página" },
 | 
					    "page": { "message": "Página" },
 | 
				
			||||||
    "all": { "message": "Todo" },
 | 
					    "all": { "message": "Todo" },
 | 
				
			||||||
    "userScore": { "message": "Puntuación" },
 | 
					    "userScore": { "message": "Puntuación" },
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@
 | 
				
			|||||||
    "navRecommendations": { "message": "Recommandations" },
 | 
					    "navRecommendations": { "message": "Recommandations" },
 | 
				
			||||||
    "navMusic": { "message": "Musique" },
 | 
					    "navMusic": { "message": "Musique" },
 | 
				
			||||||
    "navM3uGenerator": { "message": "Générateur M3U" },
 | 
					    "navM3uGenerator": { "message": "Générateur M3U" },
 | 
				
			||||||
    "heroWelcome": { "message": "Bienvenue sur CinePlex" },
 | 
					    "heroWelcome": { "message": "" },
 | 
				
			||||||
    "heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
 | 
					    "heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
 | 
				
			||||||
    "addStream": { "message": "Ajouter un flux" },
 | 
					    "addStream": { "message": "Ajouter un flux" },
 | 
				
			||||||
    "moreInfo": { "message": "Plus d'infos" },
 | 
					    "moreInfo": { "message": "Plus d'infos" },
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@
 | 
				
			|||||||
    "navRecommendations": { "message": "Raccomandazioni" },
 | 
					    "navRecommendations": { "message": "Raccomandazioni" },
 | 
				
			||||||
    "navMusic": { "message": "Musica" },
 | 
					    "navMusic": { "message": "Musica" },
 | 
				
			||||||
    "navM3uGenerator": { "message": "Generatore M3U" },
 | 
					    "navM3uGenerator": { "message": "Generatore M3U" },
 | 
				
			||||||
    "heroWelcome": { "message": "Benvenuto in CinePlex" },
 | 
					    "heroWelcome": { "message": "" },
 | 
				
			||||||
    "heroSubtitle": { "message": "Esplora migliaia di film e serie." },
 | 
					    "heroSubtitle": { "message": "Esplora migliaia di film e serie." },
 | 
				
			||||||
    "addStream": { "message": "Aggiungi streaming" },
 | 
					    "addStream": { "message": "Aggiungi streaming" },
 | 
				
			||||||
    "moreInfo": { "message": "Più informazioni" },
 | 
					    "moreInfo": { "message": "Più informazioni" },
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@
 | 
				
			|||||||
    "navRecommendations": { "message": "Recomendações" },
 | 
					    "navRecommendations": { "message": "Recomendações" },
 | 
				
			||||||
    "navMusic": { "message": "Música" },
 | 
					    "navMusic": { "message": "Música" },
 | 
				
			||||||
    "navM3uGenerator": { "message": "Gerador de M3U" },
 | 
					    "navM3uGenerator": { "message": "Gerador de M3U" },
 | 
				
			||||||
    "heroWelcome": { "message": "Bem-vindo ao CinePlex" },
 | 
					    "heroWelcome": { "message": "" },
 | 
				
			||||||
    "heroSubtitle": { "message": "Explore milhares de filmes e séries." },
 | 
					    "heroSubtitle": { "message": "Explore milhares de filmes e séries." },
 | 
				
			||||||
    "addStream": { "message": "Adicionar stream" },
 | 
					    "addStream": { "message": "Adicionar stream" },
 | 
				
			||||||
    "moreInfo": { "message": "Mais informações" },
 | 
					    "moreInfo": { "message": "Mais informações" },
 | 
				
			||||||
 | 
				
			|||||||
@ -1453,7 +1453,7 @@ body.sidebar-collapsed #main-container {
 | 
				
			|||||||
    color: var(--text-secondary);
 | 
					    color: var(--text-secondary);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.similar-items-grid {
 | 
					.similar-items-grid, .filmography-grid {
 | 
				
			||||||
    display: grid;
 | 
					    display: grid;
 | 
				
			||||||
    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
 | 
					    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
 | 
				
			||||||
    gap: 1.5rem;
 | 
					    gap: 1.5rem;
 | 
				
			||||||
@ -1715,7 +1715,7 @@ body.sidebar-collapsed #main-container {
 | 
				
			|||||||
        gap: 1.5rem;
 | 
					        gap: 1.5rem;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .similar-items-grid {
 | 
					    .similar-items-grid, .filmography-grid {
 | 
				
			||||||
        grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
 | 
					        grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
 | 
				
			||||||
        gap: 1rem;
 | 
					        gap: 1rem;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -1778,7 +1778,7 @@ body.sidebar-collapsed #main-container {
 | 
				
			|||||||
        height: 80px;
 | 
					        height: 80px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .similar-items-grid {
 | 
					    .similar-items-grid, .filmography-grid {
 | 
				
			||||||
        grid-template-columns: repeat(2, 1fr);
 | 
					        grid-template-columns: repeat(2, 1fr);
 | 
				
			||||||
        gap: 1rem;
 | 
					        gap: 1rem;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										40
									
								
								js/ui.js
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								js/ui.js
									
									
									
									
									
								
							@ -43,7 +43,7 @@ export function initializeUserData() {
 | 
				
			|||||||
        const savedPrefs = localStorage.getItem('cineplex_userPreferences');
 | 
					        const savedPrefs = localStorage.getItem('cineplex_userPreferences');
 | 
				
			||||||
        state.userPreferences = savedPrefs ? JSON.parse(savedPrefs) : { genres: {}, keywords: {}, ratings: [], cast: {}, crew: {} };
 | 
					        state.userPreferences = savedPrefs ? JSON.parse(savedPrefs) : { genres: {}, keywords: {}, ratings: [], cast: {}, crew: {} };
 | 
				
			||||||
    } catch {
 | 
					    } catch {
 | 
				
			||||||
        state.userPreferences = { genres: {}, keywords: {}, ratings: [], cast: {}, crew: {} };
 | 
					        state.userPreferences = { genres: {}, keywords: {}, ratings: {}, cast: {}, crew: {} };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1393,8 +1393,8 @@ export async function initializeHeroSection() {
 | 
				
			|||||||
    if (!bg1 || !bg2 || !content) return;
 | 
					    if (!bg1 || !bg2 || !content) return;
 | 
				
			||||||
    const heroButtons = content.querySelector('.hero-buttons');
 | 
					    const heroButtons = content.querySelector('.hero-buttons');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    content.querySelector('.hero-title').textContent = _('heroWelcome');
 | 
					    content.querySelector('.hero-title').textContent = _('welcomeToCinePlex');
 | 
				
			||||||
    content.querySelector('.hero-subtitle').textContent = _('heroSubtitle');
 | 
					    content.querySelector('.hero-subtitle').textContent = _('welcomeSubtitle');
 | 
				
			||||||
    content.querySelector('#hero-rating').innerHTML = '';
 | 
					    content.querySelector('#hero-rating').innerHTML = '';
 | 
				
			||||||
    content.querySelector('#hero-year').innerHTML = '';
 | 
					    content.querySelector('#hero-year').innerHTML = '';
 | 
				
			||||||
    content.querySelector('#hero-extra').innerHTML = '';
 | 
					    content.querySelector('#hero-extra').innerHTML = '';
 | 
				
			||||||
@ -2219,8 +2219,31 @@ async function renderActorDetails(actor) {
 | 
				
			|||||||
    const biography = actor.biography || _('noBiography');
 | 
					    const biography = actor.biography || _('noBiography');
 | 
				
			||||||
    const imdbId = actor.external_ids?.imdb_id;
 | 
					    const imdbId = actor.external_ids?.imdb_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const actorNameLower = actor.name.toLowerCase();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const MIN_MAIN_ROLE_ORDER = 10;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const filmography = actor.combined_credits.cast
 | 
					    const filmography = actor.combined_credits.cast
 | 
				
			||||||
        .filter(item => (item.media_type === 'movie' || item.media_type === 'tv') && item.poster_path)
 | 
					        .filter(item => {
 | 
				
			||||||
 | 
					            if (item.media_type !== 'movie' || !item.poster_path) {
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const characterNameLower = (item.character || '').toLowerCase();
 | 
				
			||||||
 | 
					            if (characterNameLower.includes('himself') ||
 | 
				
			||||||
 | 
					                characterNameLower.includes('herself') ||
 | 
				
			||||||
 | 
					                characterNameLower === 'self' ||
 | 
				
			||||||
 | 
					                characterNameLower.includes(actorNameLower)
 | 
				
			||||||
 | 
					            ) {
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (item.order !== undefined && item.order > MIN_MAIN_ROLE_ORDER) {
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
        .sort((a, b) => (b.popularity || 0) - (a.popularity || 0))
 | 
					        .sort((a, b) => (b.popularity || 0) - (a.popularity || 0))
 | 
				
			||||||
        .slice(0, 16);
 | 
					        .slice(0, 16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2244,12 +2267,11 @@ async function renderActorDetails(actor) {
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="item-details-section">
 | 
					            <div class="item-details-section">
 | 
				
			||||||
                <h3 class="section-subtitle">${_('filmography')}</h3>
 | 
					                <h3 class="section-subtitle">${_('moviesByActor')}</h3>
 | 
				
			||||||
                <div class="similar-items-grid">
 | 
					                <div class="filmography-grid">
 | 
				
			||||||
                    ${filmography.map(item => {
 | 
					                    ${filmography.map(item => {
 | 
				
			||||||
                        const isMovie = item.media_type === 'movie';
 | 
					                        const title = item.title;
 | 
				
			||||||
                        const title = isMovie ? item.title : item.name;
 | 
					                        const year = (item.release_date || '').slice(0, 4) || 'N/A';
 | 
				
			||||||
                        const year = (isMovie ? item.release_date : item.first_air_date)?.slice(0, 4) || 'N/A';
 | 
					 | 
				
			||||||
                        const poster = item.poster_path ? `https://image.tmdb.org/t/p/w300${item.poster_path}` : 'img/no-poster.png';
 | 
					                        const poster = item.poster_path ? `https://image.tmdb.org/t/p/w300${item.poster_path}` : 'img/no-poster.png';
 | 
				
			||||||
                        return `
 | 
					                        return `
 | 
				
			||||||
                            <div class="similar-item-card" data-id="${item.id}" data-type="${item.media_type}">
 | 
					                            <div class="similar-item-card" data-id="${item.id}" data-type="${item.media_type}">
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user