From 16e2852994d9057936987b425f65f68bff2a2be6 Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Tue, 10 May 2022 14:53:58 -0700 Subject: [PATCH] Added debug statements. --- jobs/jobsListMedia.ts | 122 +++++++++++++++++++++------------------- jobs/jobsMoveMedia.ts | 76 +++++++++++++------------ jobs/jobsUploadMedia.ts | 9 ++- 3 files changed, 111 insertions(+), 96 deletions(-) diff --git a/jobs/jobsListMedia.ts b/jobs/jobsListMedia.ts index 52e7987..8e99d6c 100644 --- a/jobs/jobsListMedia.ts +++ b/jobs/jobsListMedia.ts @@ -1,6 +1,7 @@ import { Request, Response } from "express"; import fs from "fs-extra"; import path from "path"; +import { logger } from "../server"; import GenerateThumbnail from "../util/generateThumbnail"; import MediaFile from "../util/interfaces/MediaFile"; import GenerateUrl from "../util/MediaUrlGen"; @@ -10,65 +11,70 @@ import { FolderPaths } from "../util/serverInit"; export async function JobsListMedia(req: Request, res: Response) { const jobid: string = (req.body.jobid || "").trim(); await fs.ensureDir(PathToRoFolder(jobid)); + logger.debug("Listing media for job.", PathToRoFolder(jobid)); let ret: MediaFile[]; - if (req.files) { - //We just uploaded files, we're going to send only those back. - ret = await Promise.all( - (req.files as Express.Multer.File[]).map(async (file) => { - const relativeThumbPath: string = await GenerateThumbnail( - path.join(FolderPaths.Jobs, jobid, file.filename) - ); - return { - src: GenerateUrl([ - FolderPaths.StaticPath, - FolderPaths.JobsFolder, - jobid, - file.filename, - ]), - thumbnail: GenerateUrl([ - FolderPaths.StaticPath, - FolderPaths.JobsFolder, - jobid, - relativeThumbPath, - ]), - thumbnailHeight: 250, - thumbnailWidth: 250, - filename: file.filename, - }; - }) - ); - } else { - const filesList: fs.Dirent[] = ( - await fs.readdir(PathToRoFolder(jobid), { - withFileTypes: true, - }) - ).filter((f) => f.isFile() && !/(^|\/)\.[^\/\.]/g.test(f.name)); + try { + if (req.files) { + //We just uploaded files, we're going to send only those back. + ret = await Promise.all( + (req.files as Express.Multer.File[]).map(async (file) => { + const relativeThumbPath: string = await GenerateThumbnail( + path.join(FolderPaths.Jobs, jobid, file.filename) + ); + return { + src: GenerateUrl([ + FolderPaths.StaticPath, + FolderPaths.JobsFolder, + jobid, + file.filename, + ]), + thumbnail: GenerateUrl([ + FolderPaths.StaticPath, + FolderPaths.JobsFolder, + jobid, + relativeThumbPath, + ]), + thumbnailHeight: 250, + thumbnailWidth: 250, + filename: file.filename, + }; + }) + ); + } else { + const filesList: fs.Dirent[] = ( + await fs.readdir(PathToRoFolder(jobid), { + withFileTypes: true, + }) + ).filter((f) => f.isFile() && !/(^|\/)\.[^\/\.]/g.test(f.name)); - ret = await Promise.all( - filesList.map(async (file) => { - const relativeThumbPath: string = await GenerateThumbnail( - path.join(FolderPaths.Jobs, jobid, file.name) - ); - return { - src: GenerateUrl([ - FolderPaths.StaticPath, - FolderPaths.JobsFolder, - jobid, - file.name, - ]), - thumbnail: GenerateUrl([ - FolderPaths.StaticPath, - FolderPaths.JobsFolder, - jobid, - relativeThumbPath, - ]), - thumbnailHeight: 250, - thumbnailWidth: 250, - filename: file.name, - }; - }) - ); + ret = await Promise.all( + filesList.map(async (file) => { + const relativeThumbPath: string = await GenerateThumbnail( + path.join(FolderPaths.Jobs, jobid, file.name) + ); + return { + src: GenerateUrl([ + FolderPaths.StaticPath, + FolderPaths.JobsFolder, + jobid, + file.name, + ]), + thumbnail: GenerateUrl([ + FolderPaths.StaticPath, + FolderPaths.JobsFolder, + jobid, + relativeThumbPath, + ]), + thumbnailHeight: 250, + thumbnailWidth: 250, + filename: file.name, + }; + }) + ); + } + + res.json(ret); + } catch (error) { + res.status(500).json(error); } - - res.json(ret); } diff --git a/jobs/jobsMoveMedia.ts b/jobs/jobsMoveMedia.ts index 297e4b7..4db222a 100644 --- a/jobs/jobsMoveMedia.ts +++ b/jobs/jobsMoveMedia.ts @@ -7,48 +7,54 @@ import { FolderPaths } from "../util/serverInit"; import multer from "multer"; import { JobsListMedia } from "./jobsListMedia"; import { PathToRoFolder } from "../util/pathGenerators"; +import { logger } from "../server"; export async function JobsMoveMedia(req: Request, res: Response) { const jobid: string = (req.body.jobid || "").trim(); const from_jobid: string = (req.body.from_jobid || "").trim(); const files: string[] = req.body.files; //Just file names. - //Validate the request is valid and contains everything that it needs. - - if (from_jobid === "") { - res.status(400).json({ error: "from_jobid must be specified. " }); - return; - } - if (files.length === 0) { - res.status(400).json({ error: "files must be specified. " }); - return; - } - //Make sure the destination RO directory exists. - await fs.ensureDir(PathToRoFolder(jobid)); - - const movingQueue: Promise[] = []; - - files.forEach((file) => { - movingQueue.push( - fs.move( - path.join(FolderPaths.Jobs, from_jobid, file), - path.join(FolderPaths.Jobs, jobid, file) - ) - ); - - movingQueue.push( - fs.move( - path.join(FolderPaths.Jobs, from_jobid, FolderPaths.ThumbsSubDir, file), - path.join(FolderPaths.Jobs, jobid, FolderPaths.ThumbsSubDir, file) - ) - ); - }); - - //Use AllSettled as it allows for individual moves to fail. - //e.g. if the thumbnail does not exist. - await Promise.allSettled(movingQueue); - try { + //Validate the request is valid and contains everything that it needs. + + if (from_jobid === "") { + res.status(400).json({ error: "from_jobid must be specified. " }); + return; + } + if (files.length === 0) { + res.status(400).json({ error: "files must be specified. " }); + return; + } + //Make sure the destination RO directory exists. + await fs.ensureDir(PathToRoFolder(jobid)); + logger.debug("Moving job based media.", { jobid, from_jobid, files }); + const movingQueue: Promise[] = []; + + files.forEach((file) => { + movingQueue.push( + fs.move( + path.join(FolderPaths.Jobs, from_jobid, file), + path.join(FolderPaths.Jobs, jobid, file) + ) + ); + + movingQueue.push( + fs.move( + path.join( + FolderPaths.Jobs, + from_jobid, + FolderPaths.ThumbsSubDir, + file + ), + path.join(FolderPaths.Jobs, jobid, FolderPaths.ThumbsSubDir, file) + ) + ); + }); + + //Use AllSettled as it allows for individual moves to fail. + //e.g. if the thumbnail does not exist. + await Promise.allSettled(movingQueue); + JobsListMedia(req, res); } catch (err) { res.status(500).send(err); diff --git a/jobs/jobsUploadMedia.ts b/jobs/jobsUploadMedia.ts index a112358..cbea8b8 100644 --- a/jobs/jobsUploadMedia.ts +++ b/jobs/jobsUploadMedia.ts @@ -17,7 +17,7 @@ export const JobMediaUploadMulter = multer({ cb(null, DestinationFolder); }, filename: function (req, file, cb) { - logger.info("Uploading file: ", path.basename(file.originalname)); + logger.debug("Uploading file: ", path.basename(file.originalname)); cb(null, generateUniqueFilename(file)); }, }), @@ -33,6 +33,10 @@ export async function jobsUploadMedia(req: Request, res: Response) { message: "No file uploaded", }); } else { + logger.log( + "Creating thumbnails for newly uploaded media", + (req.files as Express.Multer.File[]).map((f) => f.filename) + ); const thumbnailGenerationQueue: Promise[] = []; //for each file.path, generate the thumbnail. @@ -40,9 +44,8 @@ export async function jobsUploadMedia(req: Request, res: Response) { thumbnailGenerationQueue.push(GenerateThumbnail(file.path)); }); - logger.debug("Pre await", thumbnailGenerationQueue.toString()); await Promise.all(thumbnailGenerationQueue); - logger.debug("Post Await", thumbnailGenerationQueue.toString()); + JobsListMedia(req, res); } } catch (err) {