Updated movieInfo controller to also handle requesting release_dates as query parameter
This commit is contained in:
@@ -2,13 +2,35 @@ import { Movie } from './types'
|
||||
|
||||
const tmdbSwitcher = (tmdbMovie, property) => tmdbMovie[property]
|
||||
|
||||
function convertTmdbToMovie(tmdbMovie, credits=undefined) {
|
||||
const releaseTypeEnum = {
|
||||
1: 'Premier',
|
||||
2: 'Limited theatrical',
|
||||
3: 'Theatrical',
|
||||
4: 'Digital',
|
||||
5: 'Physical',
|
||||
6: 'TV'
|
||||
}
|
||||
|
||||
function convertTmdbToMovie(tmdbMovie, credits=undefined, releaseDates=undefined) {
|
||||
const movie = new Movie(tmdbMovie.id, tmdbMovie.title)
|
||||
movie.overview = tmdbMovie.overview;
|
||||
movie.rank = tmdbMovie.vote_average;
|
||||
|
||||
if (credits) {
|
||||
movie.credits = credits;
|
||||
movie.credits = { cast: credits.cast, crew: credits.crew };
|
||||
}
|
||||
|
||||
if (releaseDates) {
|
||||
movie.release_dates = releaseDates.results.map((releasePlace) => {
|
||||
const newestRelease = releasePlace.release_dates.sort((a,b) => a.type < b.type ? 1 : -1)[0]
|
||||
const type = releaseTypeEnum[newestRelease.type]
|
||||
|
||||
return {
|
||||
country: releasePlace.iso_3166_1,
|
||||
type: type,
|
||||
date: newestRelease.release_date
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (tmdbMovie.release_date !== undefined && tmdbMovie.release_date) {
|
||||
|
||||
@@ -74,7 +74,7 @@ class TMDB {
|
||||
* @param {String} type filter results by type (default movie).
|
||||
* @returns {Promise} succeeds if movie was found
|
||||
*/
|
||||
movieInfo(identifier, credits=false) {
|
||||
movieInfo(identifier, credits=false, releaseDates=false) {
|
||||
const query = { id: identifier };
|
||||
const cacheKey = `${this.cacheTags.movieInfo}:${identifier}:${credits}`;
|
||||
|
||||
@@ -82,6 +82,13 @@ class TMDB {
|
||||
|
||||
if (credits) {
|
||||
requests.push(this.tmdb('movieCredits', query))
|
||||
} else {
|
||||
// This is because we expect ordered parameters below
|
||||
requests.push(Promise.resolve([]))
|
||||
}
|
||||
|
||||
if (releaseDates) {
|
||||
requests.push(this.tmdb('movieReleaseDates', query))
|
||||
}
|
||||
|
||||
return Promise.resolve()
|
||||
@@ -96,8 +103,8 @@ class TMDB {
|
||||
|
||||
throw new Error('Unexpected error has occured:', error.message)
|
||||
})
|
||||
.then(([movies, credits]) => this.cache.set(cacheKey, [movies, credits]))
|
||||
.then(([movies, credits]) => convertTmdbToMovie(movies, credits))
|
||||
.then(([movies, credits, releaseDates]) => this.cache.set(cacheKey, [movies, credits, releaseDates]))
|
||||
.then(([movies, credits, releaseDates]) => convertTmdbToMovie(movies, credits, releaseDates))
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,8 +14,17 @@ const plex = new Plex(configuration.get('plex', 'ip'));
|
||||
*/
|
||||
async function movieInfoController(req, res) {
|
||||
const movieId = req.params.id;
|
||||
const { credits } = req.query;
|
||||
const movie = await tmdb.movieInfo(movieId, credits);
|
||||
const queryCredits = req.query.credits;
|
||||
const queryReleaseDates = req.query.release_dates;
|
||||
let credits = undefined
|
||||
let releaseDates = undefined
|
||||
|
||||
if (queryCredits && queryCredits.toLowerCase() === 'true')
|
||||
credits = true
|
||||
if (queryReleaseDates && queryReleaseDates.toLowerCase() === 'true')
|
||||
releaseDates = true
|
||||
|
||||
const movie = await tmdb.movieInfo(movieId, credits, releaseDates);
|
||||
|
||||
plex.existsInPlex(movie)
|
||||
.catch((error) => { console.log('Error when searching plex'); })
|
||||
|
||||
Reference in New Issue
Block a user