fix(movie,tv): respect display language for trailers (#2674)
This commit is contained in:
@@ -289,12 +289,50 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider {
|
|||||||
language,
|
language,
|
||||||
append_to_response:
|
append_to_response:
|
||||||
'credits,external_ids,videos,keywords,release_dates,watch/providers',
|
'credits,external_ids,videos,keywords,release_dates,watch/providers',
|
||||||
include_video_language: language + ', en',
|
include_video_language: language,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
43200
|
43200
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
(!language || !language.startsWith('en')) &&
|
||||||
|
!data.videos?.results?.some((video) => video.type === 'Trailer')
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
const fallback = await this.get<TmdbMovieDetails>(
|
||||||
|
`/movie/${movieId}`,
|
||||||
|
{
|
||||||
|
params: {
|
||||||
|
language,
|
||||||
|
append_to_response: 'videos',
|
||||||
|
include_video_language: 'en',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
43200
|
||||||
|
);
|
||||||
|
|
||||||
|
const localizedVideos = data.videos?.results ?? [];
|
||||||
|
const localizedVideoKeys = new Set(
|
||||||
|
localizedVideos.map((video) => video.key)
|
||||||
|
);
|
||||||
|
const englishFallbackTrailers =
|
||||||
|
fallback.videos?.results?.filter(
|
||||||
|
(video) =>
|
||||||
|
video.type === 'Trailer' && !localizedVideoKeys.has(video.key)
|
||||||
|
) ?? [];
|
||||||
|
|
||||||
|
if (englishFallbackTrailers.length > 0) {
|
||||||
|
data.videos = {
|
||||||
|
...(data.videos ?? { results: [] }),
|
||||||
|
results: [...localizedVideos, ...englishFallbackTrailers],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Ignore trailer fallback failures; return the original data.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(`[TMDB] Failed to fetch movie details: ${e.message}`, {
|
throw new Error(`[TMDB] Failed to fetch movie details: ${e.message}`, {
|
||||||
@@ -318,12 +356,50 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider {
|
|||||||
language,
|
language,
|
||||||
append_to_response:
|
append_to_response:
|
||||||
'aggregate_credits,credits,external_ids,keywords,videos,content_ratings,watch/providers',
|
'aggregate_credits,credits,external_ids,keywords,videos,content_ratings,watch/providers',
|
||||||
include_video_language: language + ', en',
|
include_video_language: language,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
43200
|
43200
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
(!language || !language.startsWith('en')) &&
|
||||||
|
!data.videos?.results?.some((video) => video.type === 'Trailer')
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
const fallback = await this.get<TmdbTvDetails>(
|
||||||
|
`/tv/${tvId}`,
|
||||||
|
{
|
||||||
|
params: {
|
||||||
|
language,
|
||||||
|
append_to_response: 'videos',
|
||||||
|
include_video_language: 'en',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
43200
|
||||||
|
);
|
||||||
|
|
||||||
|
const localizedVideos = data.videos?.results ?? [];
|
||||||
|
const localizedVideoKeys = new Set(
|
||||||
|
localizedVideos.map((video) => video.key)
|
||||||
|
);
|
||||||
|
const englishFallbackTrailers =
|
||||||
|
fallback.videos?.results?.filter(
|
||||||
|
(video) =>
|
||||||
|
video.type === 'Trailer' && !localizedVideoKeys.has(video.key)
|
||||||
|
) ?? [];
|
||||||
|
|
||||||
|
if (englishFallbackTrailers.length > 0) {
|
||||||
|
data.videos = {
|
||||||
|
...(data.videos ?? { results: [] }),
|
||||||
|
results: [...localizedVideos, ...englishFallbackTrailers],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Ignore trailer fallback failures; return the original data.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`, {
|
throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`, {
|
||||||
|
|||||||
Reference in New Issue
Block a user