|
|
|
|
@@ -1,5 +1,6 @@
|
|
|
|
|
import ExternalAPI from '@server/api/externalapi';
|
|
|
|
|
import cacheManager from '@server/lib/cache';
|
|
|
|
|
import { getSettings } from '@server/lib/settings';
|
|
|
|
|
import { sortBy } from 'lodash';
|
|
|
|
|
import type {
|
|
|
|
|
TmdbCollection,
|
|
|
|
|
@@ -99,6 +100,7 @@ interface DiscoverTvOptions {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TheMovieDb extends ExternalAPI {
|
|
|
|
|
private locale: string;
|
|
|
|
|
private discoverRegion?: string;
|
|
|
|
|
private originalLanguage?: string;
|
|
|
|
|
constructor({
|
|
|
|
|
@@ -118,6 +120,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
this.locale = getSettings().main?.locale || 'en';
|
|
|
|
|
this.discoverRegion = discoverRegion;
|
|
|
|
|
this.originalLanguage = originalLanguage;
|
|
|
|
|
}
|
|
|
|
|
@@ -126,7 +129,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
query,
|
|
|
|
|
page = 1,
|
|
|
|
|
includeAdult = false,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: SearchOptions): Promise<TmdbSearchMultiResponse> => {
|
|
|
|
|
try {
|
|
|
|
|
const data = await this.get<TmdbSearchMultiResponse>('/search/multi', {
|
|
|
|
|
@@ -151,7 +154,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
query,
|
|
|
|
|
page = 1,
|
|
|
|
|
includeAdult = false,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
year,
|
|
|
|
|
}: SingleSearchOptions): Promise<TmdbSearchMovieResponse> => {
|
|
|
|
|
try {
|
|
|
|
|
@@ -178,7 +181,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
query,
|
|
|
|
|
page = 1,
|
|
|
|
|
includeAdult = false,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
year,
|
|
|
|
|
}: SingleSearchOptions): Promise<TmdbSearchTvResponse> => {
|
|
|
|
|
try {
|
|
|
|
|
@@ -203,7 +206,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public getPerson = async ({
|
|
|
|
|
personId,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
personId: number;
|
|
|
|
|
language?: string;
|
|
|
|
|
@@ -221,7 +224,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public getPersonCombinedCredits = async ({
|
|
|
|
|
personId,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
personId: number;
|
|
|
|
|
language?: string;
|
|
|
|
|
@@ -244,7 +247,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public getMovie = async ({
|
|
|
|
|
movieId,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
movieId: number;
|
|
|
|
|
language?: string;
|
|
|
|
|
@@ -269,7 +272,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public getTvShow = async ({
|
|
|
|
|
tvId,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
tvId: number;
|
|
|
|
|
language?: string;
|
|
|
|
|
@@ -319,7 +322,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public async getMovieRecommendations({
|
|
|
|
|
movieId,
|
|
|
|
|
page = 1,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
movieId: number;
|
|
|
|
|
page?: number;
|
|
|
|
|
@@ -343,7 +346,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public async getMovieSimilar({
|
|
|
|
|
movieId,
|
|
|
|
|
page = 1,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
movieId: number;
|
|
|
|
|
page?: number;
|
|
|
|
|
@@ -367,7 +370,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public async getMoviesByKeyword({
|
|
|
|
|
keywordId,
|
|
|
|
|
page = 1,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
keywordId: number;
|
|
|
|
|
page?: number;
|
|
|
|
|
@@ -391,7 +394,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public async getTvRecommendations({
|
|
|
|
|
tvId,
|
|
|
|
|
page = 1,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
tvId: number;
|
|
|
|
|
page?: number;
|
|
|
|
|
@@ -417,7 +420,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public async getTvSimilar({
|
|
|
|
|
tvId,
|
|
|
|
|
page = 1,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
tvId: number;
|
|
|
|
|
page?: number;
|
|
|
|
|
@@ -439,7 +442,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
sortBy = 'popularity.desc',
|
|
|
|
|
page = 1,
|
|
|
|
|
includeAdult = false,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
primaryReleaseDateGte,
|
|
|
|
|
primaryReleaseDateLte,
|
|
|
|
|
originalLanguage,
|
|
|
|
|
@@ -510,7 +513,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public getDiscoverTv = async ({
|
|
|
|
|
sortBy = 'popularity.desc',
|
|
|
|
|
page = 1,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
firstAirDateGte,
|
|
|
|
|
firstAirDateLte,
|
|
|
|
|
includeEmptyReleaseDate = false,
|
|
|
|
|
@@ -585,7 +588,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public getUpcomingMovies = async ({
|
|
|
|
|
page = 1,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
page: number;
|
|
|
|
|
language: string;
|
|
|
|
|
@@ -610,7 +613,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public getAllTrending = async ({
|
|
|
|
|
page = 1,
|
|
|
|
|
timeWindow = 'day',
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
page?: number;
|
|
|
|
|
timeWindow?: 'day' | 'week';
|
|
|
|
|
@@ -677,7 +680,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
public async getByExternalId({
|
|
|
|
|
externalId,
|
|
|
|
|
type,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}:
|
|
|
|
|
| {
|
|
|
|
|
externalId: string;
|
|
|
|
|
@@ -706,7 +709,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public async getMediaByImdbId({
|
|
|
|
|
imdbId,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
imdbId: string;
|
|
|
|
|
language?: string;
|
|
|
|
|
@@ -745,7 +748,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public async getShowByTvdbId({
|
|
|
|
|
tvdbId,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
tvdbId: number;
|
|
|
|
|
language?: string;
|
|
|
|
|
@@ -775,7 +778,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
|
|
|
|
|
public async getCollection({
|
|
|
|
|
collectionId,
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
collectionId: number;
|
|
|
|
|
language?: string;
|
|
|
|
|
@@ -849,7 +852,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async getMovieGenres({
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
language?: string;
|
|
|
|
|
} = {}): Promise<TmdbGenre[]> {
|
|
|
|
|
@@ -896,7 +899,7 @@ class TheMovieDb extends ExternalAPI {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async getTvGenres({
|
|
|
|
|
language = 'en',
|
|
|
|
|
language = this.locale,
|
|
|
|
|
}: {
|
|
|
|
|
language?: string;
|
|
|
|
|
} = {}): Promise<TmdbGenre[]> {
|
|
|
|
|
|