diff --git a/deno.lock b/deno.lock index 54700ae..5ea0e20 100644 --- a/deno.lock +++ b/deno.lock @@ -3,6 +3,7 @@ "specifiers": { "jsr:@std/dotenv@*": "0.225.2", "npm:@prisma/client@5.0.0": "5.0.0_prisma@5.21.1", + "npm:@types/node@*": "22.5.4", "npm:axios@^1.4.0": "1.7.7", "npm:city-timezones@^1.2.1": "1.3.0", "npm:discord.js@14.11.0": "14.11.0", diff --git a/src/interfaces/tvdb.generated.ts b/src/interfaces/tvdb.generated.ts index 59bf517..07e9ee5 100644 --- a/src/interfaces/tvdb.generated.ts +++ b/src/interfaces/tvdb.generated.ts @@ -845,6 +845,9 @@ export interface Translation { tagline?: string; } +export type NameTranslation = Omit +export type OverviewTranslation = Omit + /** translation simple record */ export interface TranslationSimple { language?: string; @@ -852,8 +855,8 @@ export interface TranslationSimple { /** translation extended record */ export interface TranslationExtended { - nameTranslations?: Translation[]; - overviewTranslations?: Translation[]; + nameTranslations?: NameTranslation[]; + overviewTranslations?: OverviewTranslation[]; alias?: string[]; } diff --git a/src/lib/tvdb.ts b/src/lib/tvdb.ts index 37b9a1a..a05e0c3 100644 --- a/src/lib/tvdb.ts +++ b/src/lib/tvdb.ts @@ -62,13 +62,54 @@ export async function getSeriesByImdbId( imdbId: string, ): Promise { const data = await searchSeriesByImdbId(imdbId) + if (data == null) { return undefined - } else if (data?.series?.id != null) { - return await getSeries(data?.series.id) + } + + let series: SeriesExtendedRecord | undefined + if (data?.series?.id != null) { + series = await getSeries(data?.series.id) } else if (data?.season?.seriesId != null) { - return await getSeries(data?.season?.seriesId) + series = await getSeries(data?.season?.seriesId) + } + + if ( + series?.originalLanguage == null || series.originalLanguage === "eng" + ) return series + + return translateSeries(series) +} + +function translateSeries(series: SeriesExtendedRecord): SeriesExtendedRecord { + if (series.translations == null) { + console.warn( + `Series ${series.id} has a non-english original language but no translations`, + ) + return series } + + const { nameTranslations, overviewTranslations } = series.translations + const englishName = nameTranslations?.find((t) => t.language === "eng")?.name + if (englishName != null) { + series.name = englishName + } else { + console.warn( + `Series ${series.id} has a non-english original language but no english name translation`, + ) + } + const englishOverview = overviewTranslations?.find((t) => + t.language === "eng" + )?.overview + if (englishOverview != null) { + series.overview = englishOverview + } else { + console.warn( + `Series ${series.id} has a non-english original language but no english overview translation`, + ) + } + + return series } export async function getSeries( @@ -83,7 +124,7 @@ export async function getSeries( headers: options.headers, params: { short: true, - meta: "episodes", + meta: "episodes,translations", }, })