Updated movieInfo controller to also handle requesting release_dates as query parameter

This commit is contained in:
2019-10-04 22:36:39 +02:00
parent 90aa4d2485
commit 6c2c81a1a1
3 changed files with 45 additions and 7 deletions

View File

@@ -2,13 +2,35 @@ import { Movie } from './types'
const tmdbSwitcher = (tmdbMovie, property) => tmdbMovie[property] 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) const movie = new Movie(tmdbMovie.id, tmdbMovie.title)
movie.overview = tmdbMovie.overview; movie.overview = tmdbMovie.overview;
movie.rank = tmdbMovie.vote_average; movie.rank = tmdbMovie.vote_average;
if (credits) { 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) { if (tmdbMovie.release_date !== undefined && tmdbMovie.release_date) {

View File

@@ -74,7 +74,7 @@ class TMDB {
* @param {String} type filter results by type (default movie). * @param {String} type filter results by type (default movie).
* @returns {Promise} succeeds if movie was found * @returns {Promise} succeeds if movie was found
*/ */
movieInfo(identifier, credits=false) { movieInfo(identifier, credits=false, releaseDates=false) {
const query = { id: identifier }; const query = { id: identifier };
const cacheKey = `${this.cacheTags.movieInfo}:${identifier}:${credits}`; const cacheKey = `${this.cacheTags.movieInfo}:${identifier}:${credits}`;
@@ -82,6 +82,13 @@ class TMDB {
if (credits) { if (credits) {
requests.push(this.tmdb('movieCredits', query)) 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() return Promise.resolve()
@@ -96,8 +103,8 @@ class TMDB {
throw new Error('Unexpected error has occured:', error.message) throw new Error('Unexpected error has occured:', error.message)
}) })
.then(([movies, credits]) => this.cache.set(cacheKey, [movies, credits])) .then(([movies, credits, releaseDates]) => this.cache.set(cacheKey, [movies, credits, releaseDates]))
.then(([movies, credits]) => convertTmdbToMovie(movies, credits)) .then(([movies, credits, releaseDates]) => convertTmdbToMovie(movies, credits, releaseDates))
} }
/** /**

View File

@@ -14,8 +14,17 @@ const plex = new Plex(configuration.get('plex', 'ip'));
*/ */
async function movieInfoController(req, res) { async function movieInfoController(req, res) {
const movieId = req.params.id; const movieId = req.params.id;
const { credits } = req.query; const queryCredits = req.query.credits;
const movie = await tmdb.movieInfo(movieId, 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) plex.existsInPlex(movie)
.catch((error) => { console.log('Error when searching plex'); }) .catch((error) => { console.log('Error when searching plex'); })