Showing actors, tags and date on movie tiles.

This commit is contained in:
DebaucheryLibrarian
2020-08-10 21:39:55 +02:00
parent dd1ea597d4
commit 40aed1086f
23 changed files with 273 additions and 17 deletions

View File

@@ -49,12 +49,14 @@ async function init() {
}
if (argv.save) {
if (deepScenes.length + deepMovieScenes.length > 0) {
await storeScenes(deepScenes.concat(deepMovieScenes));
if (deepScenes.length > 0 || deepMovieScenes.length > 0) {
await storeScenes(deepScenes || []);
}
if (deepMovies.length > 0) {
await storeMovies(deepMovies);
const storedMovieScenes = await storeScenes(deepMovieScenes);
await storeMovies(deepMovies, storedMovieScenes);
}
}

View File

@@ -165,7 +165,9 @@ async function fetchScenes(baseReleasesOrUrls) {
}
async function fetchMovies(baseReleasesOrUrls) {
return fetchReleases(baseReleasesOrUrls, 'movie');
const movies = await fetchReleases(baseReleasesOrUrls, 'movie');
return movies;
}
module.exports = {

View File

@@ -255,7 +255,38 @@ async function storeScenes(releases) {
return releasesWithId;
}
async function storeMovies(movies) {
async function associateMovieScenes(movies, movieScenes) {
const movieScenesByEntityIdAndEntryId = movieScenes.reduce((acc, scene) => ({
...acc,
[scene.entity.id]: {
...acc[scene.entity.id],
[scene.entryId]: scene,
},
}), {});
const associations = movies.map((movie) => {
if (!movie.scenes) {
return null;
}
return movie.scenes.map((scene) => {
const movieScene = movieScenesByEntityIdAndEntryId[movie.entity.id]?.[scene.entryId];
if (movieScene) {
return {
movie_id: movie.id,
scene_id: movieScene.id,
};
}
return null;
});
}).flat().filter(Boolean);
await knex.batchInsert('movies_scenes', associations);
}
async function storeMovies(movies, movieScenes) {
const { uniqueReleases } = await filterDuplicateReleases(movies);
const [batchId] = await knex('batches').insert({ comment: null }).returning('id');
@@ -264,6 +295,7 @@ async function storeMovies(movies) {
const moviesWithId = attachReleaseIds(movies, storedMovies);
await associateMovieScenes(moviesWithId, movieScenes);
await associateReleaseMedia(moviesWithId, 'movies');
return storedMovies;

View File

@@ -177,7 +177,7 @@ async function scrapeMovies(scraper, entity) {
}
async function scrapeChannelReleases(scraper, channelEntity, preData) {
const [latestReleases, upcomingReleases] = await Promise.all([
const [latestReleases, upcomingReleases, movies] = await Promise.all([
argv.latest
? scrapeLatestReleases(scraper, channelEntity, preData)
: [],
@@ -189,6 +189,8 @@ async function scrapeChannelReleases(scraper, channelEntity, preData) {
: [],
]);
console.log(movies);
logger.info(`Fetching ${latestReleases.length} latest and ${upcomingReleases.length} upcoming updates for '${channelEntity.name}' (${channelEntity.parent?.name})`);
return [...latestReleases, ...upcomingReleases];