diff --git a/config/default.js b/config/default.js index cc665ab8..d02ce0dc 100755 --- a/config/default.js +++ b/config/default.js @@ -188,6 +188,8 @@ module.exports = { 'wishescumtrue', // hentaied 'somegore', + // digital playground + 'digitalplayground', // no longer updates, produces a bunch of garbage for some reason ], networks: [ // dummy network for testing diff --git a/src/update-search.js b/src/update-search.js index 434b0590..6cd21481 100644 --- a/src/update-search.js +++ b/src/update-search.js @@ -16,14 +16,14 @@ async function updateManticoreStashedScenes(docs) { await chunk(docs, 1000).reduce(async (chain, docsChunk) => { await chain; - const sceneIds = docsChunk.map((doc) => doc.replace.id); + const sceneIds = docsChunk.filter((doc) => !!doc.replace).map((doc) => doc.replace.id); const stashes = await knex('stashes_scenes') .select('stashes_scenes.id as stashed_id', 'stashes_scenes.scene_id', 'stashes_scenes.created_at', 'stashes.id as stash_id', 'stashes.user_id as user_id') .leftJoin('stashes', 'stashes.id', 'stashes_scenes.stash_id') .whereIn('scene_id', sceneIds); - const stashDocs = docsChunk.flatMap((doc) => { + const stashDocs = docsChunk.filter((doc) => doc.replace).flatMap((doc) => { const sceneStashes = stashes.filter((stash) => stash.scene_id === doc.replace.id); if (sceneStashes.length === 0) { @@ -50,6 +50,25 @@ async function updateManticoreStashedScenes(docs) { if (stashDocs.length > 0) { await indexApi.bulk(stashDocs.map((doc) => JSON.stringify(doc)).join('\n')); } + + const deleteSceneIds = docs.filter((doc) => doc.delete).map((doc) => doc.delete.id); + + if (deleteSceneIds.length > 0) { + await indexApi.callDelete({ + index: 'scenes_stashed', + query: { + bool: { + must: [ + { + in: { + scene_id: deleteSceneIds, + }, + }, + ], + }, + }, + }); + } }, Promise.resolve()); } @@ -128,9 +147,20 @@ async function updateManticoreSceneSearch(releaseIds) { studios.showcased `, releaseIds && [releaseIds]); - // console.log(scenes.rows); + const scenesById = Object.fromEntries(scenes.rows.map((scene) => [scene.id, scene])); + + const docs = releaseIds.map((sceneId) => { + const scene = scenesById[sceneId]; + + if (!scene) { + return { + delete: { + index: 'scenes', + id: sceneId, + }, + }; + } - const docs = scenes.rows.map((scene) => { const flatActors = scene.actors.flatMap((actor) => actor.f2.split(' ')); const flatTags = scene.tags.filter((tag) => tag.f3 > 6).flatMap((tag) => [tag.f2].concat(tag.f4)).filter(Boolean); // only make top tags searchable to minimize cluttered results const filteredTitle = filterTitle(scene.title, [...flatActors, ...flatTags]); @@ -291,7 +321,20 @@ async function updateManticoreMovieSearch(movieIds) { movies_covers.* `, movieIds && [movieIds]); - const docs = movies.rows.map((movie) => { + const moviesById = Object.fromEntries(movies.rows.map((movie) => [movie.id, movie])); + + const docs = movieIds.map((movieId) => { + const movie = moviesById[movieId]; + + if (!movie) { + return { + delete: { + index: 'movies', + id: movieId, + }, + }; + } + const combinedTags = Object.values(Object.fromEntries(movie.tags.concat(movie.movie_tags).map((tag) => [tag.f1, { id: tag.f1, name: tag.f2,