UNPKG

wranglebot

Version:

open source media asset management

57 lines (45 loc) 1.98 kB
import LogBot from "logbotjs"; import { WrangleBot } from "../../../core/WrangleBot.js"; import { SocketServer } from "../../SocketServer.js"; import RouteResult from "../../RouteResult.js"; export default { method: "post", url: "/library/:id/metafiles/thumbnails/", handler: async (req, res, bot: WrangleBot, server: SocketServer) => { const { id } = req.params; const { files } = req.body; let thumbnailGenerationQueue = server.getFromCache("thumbnailGenerationQueue"); if (!thumbnailGenerationQueue) { thumbnailGenerationQueue = server.addToCache("thumbnailGenerationQueue", {}); } const progressCallback = (data) => { server.inform("thumbnails", data.metaFile.id, data); }; const jobFinishCallback = (metaFileId) => { server.inform("thumbnails", metaFileId, { status: "done" }); //remove job from queue thumbnailGenerationQueue[metaFileId] = false; }; const failedCallback = (metaFileId, error) => { server.inform("thumbnails", metaFileId, { error: error.message }); //remove job from queue thumbnailGenerationQueue[metaFileId] = false; }; //check if any of the files are already in the queue let fileIds = files.filter((file) => !thumbnailGenerationQueue[file]); let filesToGenerate = bot.query.library.one(id).metafiles.many({ $ids: fileIds }).fetch(); filesToGenerate = filesToGenerate.filter((f) => f.thumbnails.length === 0); //add metafile ids to the queue files.forEach((file) => { thumbnailGenerationQueue[file] = true; }); //dont wait for the job to finish bot.generateThumbnails(id, filesToGenerate, progressCallback, jobFinishCallback).catch((e) => { LogBot.log(500, e.message); filesToGenerate.forEach((f) => { failedCallback(f.id, e); }); }); return new RouteResult(200, { success: true, message: "generating thumbnails for " + filesToGenerate.length + " files." }); }, };