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]
|
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) {
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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'); })
|
||||||
|
|||||||
Reference in New Issue
Block a user