fix(posters): revert null poster fallback for TMDB

now tries selected language and immedaitely falls back to default poster

re #144
This commit is contained in:
Tom Wheeler
2025-12-06 18:02:36 +13:00
parent 630e04a8a8
commit 366b2a2ade
3 changed files with 103 additions and 139 deletions
@@ -273,45 +273,43 @@ export async function cleanupReleasedPlaceholders(
language,
});
// Find poster in selected language, fallback to null language, then English
let poster = images.posters.find(
// Find poster in selected language, fallback to main poster from movie details
const poster = images.posters.find(
(p) => p.iso_639_1 === language
);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
posterUrl = poster
? `https://image.tmdb.org/t/p/original${poster.file_path}`
: undefined;
if (poster) {
posterUrl = `https://image.tmdb.org/t/p/original${poster.file_path}`;
} else {
// Fallback to main poster from movie details
const movie = await tmdbClient.getMovie({
movieId: placeholder.tmdbId,
});
posterUrl = movie.poster_path
? `https://image.tmdb.org/t/p/original${movie.poster_path}`
: undefined;
}
} else {
const images = await tmdbClient.getTvShowImages({
tvId: placeholder.tmdbId,
language,
});
let poster = images.posters.find(
const poster = images.posters.find(
(p) => p.iso_639_1 === language
);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
posterUrl = poster
? `https://image.tmdb.org/t/p/original${poster.file_path}`
: undefined;
if (poster) {
posterUrl = `https://image.tmdb.org/t/p/original${poster.file_path}`;
} else {
// Fallback to main poster from TV show details
const tvShow = await tmdbClient.getTvShow({
tvId: placeholder.tmdbId,
});
posterUrl = tvShow.poster_path
? `https://image.tmdb.org/t/p/original${tvShow.poster_path}`
: undefined;
}
}
if (posterUrl) {
@@ -581,45 +579,43 @@ export async function cleanupReleasedPlaceholders(
language,
});
// Find poster in selected language, fallback to null language, then English
let poster = images.posters.find(
// Find poster in selected language, fallback to main poster from movie details
const poster = images.posters.find(
(p) => p.iso_639_1 === language
);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
posterUrl = poster
? `https://image.tmdb.org/t/p/original${poster.file_path}`
: undefined;
if (poster) {
posterUrl = `https://image.tmdb.org/t/p/original${poster.file_path}`;
} else {
// Fallback to main poster from movie details
const movie = await tmdbClient.getMovie({
movieId: placeholder.tmdbId,
});
posterUrl = movie.poster_path
? `https://image.tmdb.org/t/p/original${movie.poster_path}`
: undefined;
}
} else {
const images = await tmdbClient.getTvShowImages({
tvId: placeholder.tmdbId,
language,
});
let poster = images.posters.find(
const poster = images.posters.find(
(p) => p.iso_639_1 === language
);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
posterUrl = poster
? `https://image.tmdb.org/t/p/original${poster.file_path}`
: undefined;
if (poster) {
posterUrl = `https://image.tmdb.org/t/p/original${poster.file_path}`;
} else {
// Fallback to main poster from TV show details
const tvShow = await tmdbClient.getTvShow({
tvId: placeholder.tmdbId,
});
posterUrl = tvShow.poster_path
? `https://image.tmdb.org/t/p/original${tvShow.poster_path}`
: undefined;
}
}
if (posterUrl) {
+39 -43
View File
@@ -203,27 +203,25 @@ async function fetchTMDbPosterUrls(
language,
});
// Find poster in selected language, fallback to null language (universal), then English
let poster = images.posters.find((p) => p.iso_639_1 === language);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0]; // Use first available poster
}
// Find poster in selected language, fallback to main poster from movie details
const poster = images.posters.find((p) => p.iso_639_1 === language);
if (poster) {
posterUrl = `https://image.tmdb.org/t/p/w300${poster.file_path}`;
logger.debug(
`Found movie poster for ${item.title} (language: ${
poster.iso_639_1 || 'null'
}): ${posterUrl}`
`Found movie poster for ${item.title} (language: ${poster.iso_639_1}): ${posterUrl}`
);
} else {
logger.debug(`No poster found for movie ${item.title}`);
// Fallback to main poster from movie details
const movie = await tmdb.getMovie({ movieId: item.tmdbId });
if (movie.poster_path) {
posterUrl = `https://image.tmdb.org/t/p/w300${movie.poster_path}`;
logger.debug(
`Using default movie poster for ${item.title}: ${posterUrl}`
);
} else {
logger.debug(`No poster found for movie ${item.title}`);
}
}
} else if (item.type === 'tv') {
// Check if this is an episode with season info and show TMDB ID
@@ -235,26 +233,26 @@ async function fetchTMDbPosterUrls(
language,
});
let poster = images.posters.find((p) => p.iso_639_1 === language);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
const poster = images.posters.find((p) => p.iso_639_1 === language);
if (poster) {
posterUrl = `https://image.tmdb.org/t/p/w300${poster.file_path}`;
logger.debug(
`Found show poster for episode ${item.title} (language: ${
poster.iso_639_1 || 'null'
}): ${posterUrl}`
`Found show poster for episode ${item.title} (language: ${poster.iso_639_1}): ${posterUrl}`
);
} else {
logger.debug(`No poster found for episode ${item.title}`);
// Fallback to main poster from TV show details
const tvShow = await tmdb.getTvShow({
tvId: item.metadata.showTmdbId,
});
if (tvShow.poster_path) {
posterUrl = `https://image.tmdb.org/t/p/w300${tvShow.poster_path}`;
logger.debug(
`Using default show poster for episode ${item.title}: ${posterUrl}`
);
} else {
logger.debug(`No poster found for episode ${item.title}`);
}
}
} else {
// This is a regular TV show (not an episode)
@@ -263,26 +261,24 @@ async function fetchTMDbPosterUrls(
language,
});
let poster = images.posters.find((p) => p.iso_639_1 === language);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
const poster = images.posters.find((p) => p.iso_639_1 === language);
if (poster) {
posterUrl = `https://image.tmdb.org/t/p/w300${poster.file_path}`;
logger.debug(
`Found TV poster for ${item.title} (language: ${
poster.iso_639_1 || 'null'
}): ${posterUrl}`
`Found TV poster for ${item.title} (language: ${poster.iso_639_1}): ${posterUrl}`
);
} else {
logger.debug(`No poster found for TV show ${item.title}`);
// Fallback to main poster from TV show details
const tvShow = await tmdb.getTvShow({ tvId: item.tmdbId });
if (tvShow.poster_path) {
posterUrl = `https://image.tmdb.org/t/p/w300${tvShow.poster_path}`;
logger.debug(
`Using default TV poster for ${item.title}: ${posterUrl}`
);
} else {
logger.debug(`No poster found for TV show ${item.title}`);
}
}
}
}
+14 -42
View File
@@ -700,21 +700,14 @@ async function processMultiSourcePreview(
language,
});
// Find poster in selected language with fallback
let poster = images.posters.find((p) => p.iso_639_1 === language);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
// Find poster in selected language, fallback to main poster from movie details
const poster = images.posters.find((p) => p.iso_639_1 === language);
return {
posterUrl: poster
? `https://image.tmdb.org/t/p/w300_and_h450_face${poster.file_path}`
: movie.poster_path
? `https://image.tmdb.org/t/p/w300_and_h450_face${movie.poster_path}`
: '',
backdropPath: movie.backdrop_path || undefined,
title: movie.title || fallbackTitle,
@@ -732,20 +725,13 @@ async function processMultiSourcePreview(
language,
});
let poster = images.posters.find((p) => p.iso_639_1 === language);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
const poster = images.posters.find((p) => p.iso_639_1 === language);
return {
posterUrl: poster
? `https://image.tmdb.org/t/p/w300_and_h450_face${poster.file_path}`
: show.poster_path
? `https://image.tmdb.org/t/p/w300_and_h450_face${show.poster_path}`
: '',
backdropPath: show.backdrop_path || undefined,
title: show.name || fallbackTitle,
@@ -1290,21 +1276,14 @@ async function processPreviewAsync(
language,
});
// Find poster in selected language with fallback
let poster = images.posters.find((p) => p.iso_639_1 === language);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
// Find poster in selected language, fallback to main poster from movie details
const poster = images.posters.find((p) => p.iso_639_1 === language);
return {
posterUrl: poster
? `https://image.tmdb.org/t/p/w300_and_h450_face${poster.file_path}`
: movie.poster_path
? `https://image.tmdb.org/t/p/w300_and_h450_face${movie.poster_path}`
: '',
backdropPath: movie.backdrop_path || undefined,
title: movie.title || fallbackTitle,
@@ -1322,20 +1301,13 @@ async function processPreviewAsync(
language,
});
let poster = images.posters.find((p) => p.iso_639_1 === language);
if (!poster) {
poster = images.posters.find((p) => p.iso_639_1 === null);
}
if (!poster && language !== 'en') {
poster = images.posters.find((p) => p.iso_639_1 === 'en');
}
if (!poster && images.posters.length > 0) {
poster = images.posters[0];
}
const poster = images.posters.find((p) => p.iso_639_1 === language);
return {
posterUrl: poster
? `https://image.tmdb.org/t/p/w300_and_h450_face${poster.file_path}`
: show.poster_path
? `https://image.tmdb.org/t/p/w300_and_h450_face${show.poster_path}`
: '',
backdropPath: show.backdrop_path || undefined,
title: show.name || fallbackTitle,