Updated dependencies. Added periodic memory logger.
This commit is contained in:
@@ -17,7 +17,7 @@ const { notify } = require('./alerts');
|
||||
|
||||
async function curateReleaseEntry(release, batchId, existingRelease, type = 'scene') {
|
||||
const slugBase = release.title
|
||||
|| (release.actors?.length && `${release.entity.slug} ${release.actors.map(actor => actor.name).join(' ')}`)
|
||||
|| (release.actors?.length && `${release.entity.slug} ${release.actors.map((actor) => actor.name).join(' ')}`)
|
||||
|| (release.date && `${release.entity.slug} ${formatDate(release.date, 'YYYY MM DD')}`)
|
||||
|| null;
|
||||
|
||||
@@ -74,11 +74,11 @@ async function curateReleaseEntry(release, batchId, existingRelease, type = 'sce
|
||||
}
|
||||
|
||||
async function attachChannelEntities(releases) {
|
||||
const releasesWithoutEntity = releases.filter(release => release.channel && (!release.entity || release.entity.type === 'network'));
|
||||
const releasesWithoutEntity = releases.filter((release) => release.channel && (!release.entity || release.entity.type === 'network'));
|
||||
|
||||
const channelEntities = await knex('entities')
|
||||
.select(knex.raw('entities.*, row_to_json(parents) as parent'))
|
||||
.whereIn('entities.slug', releasesWithoutEntity.map(release => release.channel))
|
||||
.whereIn('entities.slug', releasesWithoutEntity.map((release) => release.channel))
|
||||
.where('entities.type', 'channel')
|
||||
.leftJoin('entities AS parents', 'parents.id', 'entities.parent_id');
|
||||
|
||||
@@ -108,7 +108,7 @@ async function attachChannelEntities(releases) {
|
||||
}
|
||||
|
||||
async function attachStudios(releases) {
|
||||
const studioSlugs = releases.map(release => release.studio).filter(Boolean);
|
||||
const studioSlugs = releases.map((release) => release.studio).filter(Boolean);
|
||||
|
||||
const studios = await knex('entities')
|
||||
.whereIn('slug', studioSlugs)
|
||||
@@ -186,7 +186,7 @@ function filterInternalDuplicateReleases(releases) {
|
||||
}, {});
|
||||
|
||||
return Object.values(releasesByEntityIdAndEntryId)
|
||||
.map(entityReleases => Object.values(entityReleases))
|
||||
.map((entityReleases) => Object.values(entityReleases))
|
||||
.flat();
|
||||
}
|
||||
|
||||
@@ -194,11 +194,11 @@ async function filterDuplicateReleases(releases) {
|
||||
const internalUniqueReleases = filterInternalDuplicateReleases(releases);
|
||||
|
||||
const duplicateReleaseEntries = await knex('releases')
|
||||
.whereIn(['entry_id', 'entity_id'], internalUniqueReleases.map(release => [release.entryId, release.entity.id]))
|
||||
.whereIn(['entry_id', 'entity_id'], internalUniqueReleases.map((release) => [release.entryId, release.entity.id]))
|
||||
.orWhereIn(['entry_id', 'entity_id'], internalUniqueReleases
|
||||
// scene IDs shared across network, mark as duplicate so scene can be updated with channel if only available on release day (i.e. Perv City)
|
||||
.filter(release => release.entity.parent?.parameters?.networkEntryIds)
|
||||
.map(release => [release.entryId, release.entity.parent.id]));
|
||||
.filter((release) => release.entity.parent?.parameters?.networkEntryIds)
|
||||
.map((release) => [release.entryId, release.entity.parent.id]));
|
||||
|
||||
const duplicateReleasesByEntityIdAndEntryId = duplicateReleaseEntries.reduce((acc, release) => {
|
||||
if (!acc[release.entity_id]) acc[release.entity_id] = {};
|
||||
@@ -207,10 +207,10 @@ async function filterDuplicateReleases(releases) {
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
const duplicateReleases = internalUniqueReleases.filter(release => duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]
|
||||
const duplicateReleases = internalUniqueReleases.filter((release) => duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]
|
||||
|| duplicateReleasesByEntityIdAndEntryId[release.entity.parent?.id]?.[release.entryId]);
|
||||
|
||||
const uniqueReleases = internalUniqueReleases.filter(release => !duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]
|
||||
const uniqueReleases = internalUniqueReleases.filter((release) => !duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]
|
||||
&& !duplicateReleasesByEntityIdAndEntryId[release.entity.parent?.id]?.[release.entryId]);
|
||||
|
||||
return {
|
||||
@@ -263,7 +263,7 @@ async function updateSceneSearch(releaseIds) {
|
||||
|
||||
async function storeChapters(releases) {
|
||||
const chapters = releases
|
||||
.map(release => release.chapters?.map((chapter, index) => ({
|
||||
.map((release) => release.chapters?.map((chapter, index) => ({
|
||||
releaseId: release.id,
|
||||
index: index + 1,
|
||||
time: chapter.time,
|
||||
@@ -278,7 +278,7 @@ async function storeChapters(releases) {
|
||||
.filter(Boolean)
|
||||
.sort((chapterA, chapterB) => chapterA.time - chapterB.time);
|
||||
|
||||
const curatedChapterEntries = chapters.map(chapter => ({
|
||||
const curatedChapterEntries = chapters.map((chapter) => ({
|
||||
index: chapter.index,
|
||||
time: chapter.time,
|
||||
duration: chapter.duration,
|
||||
@@ -297,7 +297,7 @@ async function storeChapters(releases) {
|
||||
},
|
||||
}), {});
|
||||
|
||||
const chaptersWithId = chapters.map(chapter => ({
|
||||
const chaptersWithId = chapters.map((chapter) => ({
|
||||
...chapter,
|
||||
id: chapterIdsByReleaseIdAndChapter[chapter.releaseId][chapter.index],
|
||||
}));
|
||||
@@ -316,13 +316,13 @@ async function storeScenes(releases) {
|
||||
const [batchId] = await knex('batches').insert({ comment: null }).returning('id');
|
||||
|
||||
const releasesWithChannels = await attachChannelEntities(releases);
|
||||
const releasesWithBaseActors = releasesWithChannels.map(release => ({ ...release, actors: toBaseActors(release.actors) }));
|
||||
const releasesWithBaseActors = releasesWithChannels.map((release) => ({ ...release, actors: toBaseActors(release.actors) }));
|
||||
const releasesWithStudios = await attachStudios(releasesWithBaseActors);
|
||||
|
||||
// uniqueness is entity ID + entry ID, filter uniques after adding entities
|
||||
const { uniqueReleases, duplicateReleases, duplicateReleaseEntries } = await filterDuplicateReleases(releasesWithStudios);
|
||||
|
||||
const curatedNewReleaseEntries = await Promise.all(uniqueReleases.map(release => curateReleaseEntry(release, batchId)));
|
||||
const curatedNewReleaseEntries = await Promise.all(uniqueReleases.map((release) => curateReleaseEntry(release, batchId)));
|
||||
const storedReleases = await bulkInsert('releases', curatedNewReleaseEntries);
|
||||
|
||||
const storedReleaseEntries = Array.isArray(storedReleases) ? storedReleases : [];
|
||||
@@ -355,13 +355,13 @@ async function storeScenes(releases) {
|
||||
]);
|
||||
|
||||
await associateDirectors(releasesWithId, batchId); // some directors may also be actors, don't associate at the same time
|
||||
await updateSceneSearch(releasesWithId.map(release => release.id));
|
||||
await updateSceneSearch(releasesWithId.map((release) => release.id));
|
||||
|
||||
// media is more error-prone, associate separately
|
||||
await associateReleaseMedia(releasesWithId);
|
||||
|
||||
if (argv.sceneActors && actors) {
|
||||
await scrapeActors(actors.map(actor => actor.name));
|
||||
await scrapeActors(actors.map((actor) => actor.name));
|
||||
}
|
||||
|
||||
logger.info(`Stored ${storedReleaseEntries.length}, updated ${updated.rowCount} releases`);
|
||||
@@ -446,12 +446,12 @@ async function storeMovies(movies) {
|
||||
const { uniqueReleases } = await filterDuplicateReleases(movies);
|
||||
const [batchId] = await knex('batches').insert({ comment: null }).returning('id');
|
||||
|
||||
const curatedMovieEntries = await Promise.all(uniqueReleases.map(release => curateReleaseEntry(release, batchId, null, 'movie')));
|
||||
const curatedMovieEntries = await Promise.all(uniqueReleases.map((release) => curateReleaseEntry(release, batchId, null, 'movie')));
|
||||
|
||||
const storedMovies = await bulkInsert('movies', curatedMovieEntries, ['entity_id', 'entry_id'], true);
|
||||
const moviesWithId = attachReleaseIds(movies, storedMovies);
|
||||
|
||||
await updateMovieSearch(moviesWithId.map(movie => movie.id));
|
||||
await updateMovieSearch(moviesWithId.map((movie) => movie.id));
|
||||
await associateReleaseMedia(moviesWithId, 'movie');
|
||||
|
||||
return moviesWithId;
|
||||
|
||||
Reference in New Issue
Block a user