diff --git a/seasoned_api/src/tmdb/convertTmdbToMovie.js b/seasoned_api/src/tmdb/convertTmdbToMovie.js index 071d02c..3604f8c 100644 --- a/seasoned_api/src/tmdb/convertTmdbToMovie.js +++ b/seasoned_api/src/tmdb/convertTmdbToMovie.js @@ -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) { diff --git a/seasoned_api/src/tmdb/tmdb.js b/seasoned_api/src/tmdb/tmdb.js index 3675dd8..979dda1 100644 --- a/seasoned_api/src/tmdb/tmdb.js +++ b/seasoned_api/src/tmdb/tmdb.js @@ -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)) } /** diff --git a/seasoned_api/src/webserver/controllers/info/movieInfo.js b/seasoned_api/src/webserver/controllers/info/movieInfo.js index 8b2f565..2c18b5e 100644 --- a/seasoned_api/src/webserver/controllers/info/movieInfo.js +++ b/seasoned_api/src/webserver/controllers/info/movieInfo.js @@ -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'); })