This commit is contained in:
Filipinos 2025-08-02 14:26:57 +02:00
parent ed6cb69add
commit 4dc6a89cfe
8 changed files with 47 additions and 20 deletions

View File

@ -17,7 +17,7 @@
"navRecommendations": { "message": "Empfehlungen" },
"navMusic": { "message": "Musik" },
"navM3uGenerator": { "message": "M3U-Generator" },
"heroWelcome": { "message": "Willkommen bei CinePlex" },
"heroWelcome": { "message": "" },
"heroSubtitle": { "message": "Entdecken Sie Tausende von Filmen und Serien." },
"addStream": { "message": "Stream hinzufügen" },
"moreInfo": { "message": "Mehr Info" },
@ -261,8 +261,13 @@
"episodesCount": {"message": "$count$ Episoden", "placeholders": {"count": {"content": "$1"}}},
"seasonsCount": {"message": "$count$ Staffeln", "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"},
"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"}}},
"noTrailerFound": {"message": "Kein Trailer für diesen Titel gefunden."},
"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_minutesAgo": { "message": "Vor $count$ Minuten", "placeholders": { "count": { "content": "$1" } } },
"relativeTime_hoursAgo": { "message": "Vor $count$ Stunden", "placeholders": { "count": { "content": "$1" } } },

View File

@ -17,7 +17,7 @@
"navRecommendations": { "message": "Recommendations" },
"navMusic": { "message": "Music" },
"navM3uGenerator": { "message": "M3U Generator" },
"heroWelcome": { "message": "Welcome to CinePlex" },
"heroWelcome": { "message": "" },
"heroSubtitle": { "message": "Explore thousands of movies and series." },
"addStream": { "message": "Add Stream" },
"moreInfo": { "message": "More info" },

View File

@ -440,7 +440,7 @@
"tokenAddedSuccessfully": { "message": "Token añadido correctamente." },
"noStreamsFoundForSelection": { "message": "No se encontraron streams para la selección." },
"autoplayBlocked": { "message": "Reproducción automática bloqueada." },
"welcomeToCinePlex": { "message": "Bienvenido a CinePlex" },
"welcomeToCinePlex": { "message": "" },
"page": { "message": "Página" },
"all": { "message": "Todo" },
"userScore": { "message": "Puntuación" },

View File

@ -17,7 +17,7 @@
"navRecommendations": { "message": "Recommandations" },
"navMusic": { "message": "Musique" },
"navM3uGenerator": { "message": "Générateur M3U" },
"heroWelcome": { "message": "Bienvenue sur CinePlex" },
"heroWelcome": { "message": "" },
"heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
"addStream": { "message": "Ajouter un flux" },
"moreInfo": { "message": "Plus d'infos" },

View File

@ -17,7 +17,7 @@
"navRecommendations": { "message": "Raccomandazioni" },
"navMusic": { "message": "Musica" },
"navM3uGenerator": { "message": "Generatore M3U" },
"heroWelcome": { "message": "Benvenuto in CinePlex" },
"heroWelcome": { "message": "" },
"heroSubtitle": { "message": "Esplora migliaia di film e serie." },
"addStream": { "message": "Aggiungi streaming" },
"moreInfo": { "message": "Più informazioni" },

View File

@ -17,7 +17,7 @@
"navRecommendations": { "message": "Recomendações" },
"navMusic": { "message": "Música" },
"navM3uGenerator": { "message": "Gerador de M3U" },
"heroWelcome": { "message": "Bem-vindo ao CinePlex" },
"heroWelcome": { "message": "" },
"heroSubtitle": { "message": "Explore milhares de filmes e séries." },
"addStream": { "message": "Adicionar stream" },
"moreInfo": { "message": "Mais informações" },

View File

@ -1453,7 +1453,7 @@ body.sidebar-collapsed #main-container {
color: var(--text-secondary);
}
.similar-items-grid {
.similar-items-grid, .filmography-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 1.5rem;
@ -1715,7 +1715,7 @@ body.sidebar-collapsed #main-container {
gap: 1.5rem;
}
.similar-items-grid {
.similar-items-grid, .filmography-grid {
grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
gap: 1rem;
}
@ -1778,7 +1778,7 @@ body.sidebar-collapsed #main-container {
height: 80px;
}
.similar-items-grid {
.similar-items-grid, .filmography-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
}

View File

@ -43,7 +43,7 @@ export function initializeUserData() {
const savedPrefs = localStorage.getItem('cineplex_userPreferences');
state.userPreferences = savedPrefs ? JSON.parse(savedPrefs) : { genres: {}, keywords: {}, ratings: [], cast: {}, crew: {} };
} 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;
const heroButtons = content.querySelector('.hero-buttons');
content.querySelector('.hero-title').textContent = _('heroWelcome');
content.querySelector('.hero-subtitle').textContent = _('heroSubtitle');
content.querySelector('.hero-title').textContent = _('welcomeToCinePlex');
content.querySelector('.hero-subtitle').textContent = _('welcomeSubtitle');
content.querySelector('#hero-rating').innerHTML = '';
content.querySelector('#hero-year').innerHTML = '';
content.querySelector('#hero-extra').innerHTML = '';
@ -2219,8 +2219,31 @@ async function renderActorDetails(actor) {
const biography = actor.biography || _('noBiography');
const imdbId = actor.external_ids?.imdb_id;
const actorNameLower = actor.name.toLowerCase();
const MIN_MAIN_ROLE_ORDER = 10;
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))
.slice(0, 16);
@ -2244,12 +2267,11 @@ async function renderActorDetails(actor) {
</div>
<div class="item-details-section">
<h3 class="section-subtitle">${_('filmography')}</h3>
<div class="similar-items-grid">
<h3 class="section-subtitle">${_('moviesByActor')}</h3>
<div class="filmography-grid">
${filmography.map(item => {
const isMovie = item.media_type === 'movie';
const title = isMovie ? item.title : item.name;
const year = (isMovie ? item.release_date : item.first_air_date)?.slice(0, 4) || 'N/A';
const title = item.title;
const year = (item.release_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';
return `
<div class="similar-item-card" data-id="${item.id}" data-type="${item.media_type}">