diff --git a/jobs/jobsDeleteMedia.ts b/jobs/jobsDeleteMedia.ts index 96423d9..6d79969 100644 --- a/jobs/jobsDeleteMedia.ts +++ b/jobs/jobsDeleteMedia.ts @@ -1,9 +1,15 @@ 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 ListableChecker from "../util/listableChecker"; +import GenerateUrl from "../util/MediaUrlGen"; import { PathToRoFolder } from "../util/pathGenerators"; -import { JobRelativeFilePath } from "../util/serverInit"; +import { FolderPaths, JobRelativeFilePath } from "../util/serverInit"; +import ft from "file-type"; +import core from "file-type/core"; export async function JobsDeleteMedia(req: Request, res: Response) { const jobid: string = (req.body.jobid || "").trim(); diff --git a/jobs/jobsDownloadMedia.ts b/jobs/jobsDownloadMedia.ts index 0fc39a2..42973ad 100644 --- a/jobs/jobsDownloadMedia.ts +++ b/jobs/jobsDownloadMedia.ts @@ -1,10 +1,15 @@ import { Request, Response } from "express"; import fs from "fs-extra"; -import JSZip from "jszip"; +import multer from "multer"; import path from "path"; import { logger } from "../server"; -import ListableChecker from "../util/listableChecker"; +import GenerateThumbnail from "../util/generateThumbnail"; +import generateUniqueFilename from "../util/generateUniqueFilename"; +import { ConvertHeicFiles } from "../util/heicConverter"; import { PathToRoFolder } from "../util/pathGenerators"; +import { JobsListMedia } from "./jobsListMedia"; +import JSZip from "jszip"; +import ListableChecker from "../util/listableChecker"; import { JobRelativeFilePath } from "../util/serverInit"; //param: files: string[] | array of filenames. diff --git a/jobs/jobsListMedia.ts b/jobs/jobsListMedia.ts index ce8cae2..8240c20 100644 --- a/jobs/jobsListMedia.ts +++ b/jobs/jobsListMedia.ts @@ -2,9 +2,7 @@ import { Request, Response } from "express"; import fs from "fs-extra"; import path from "path"; import { logger } from "../server"; -import GenerateThumbnail, { - GenerateOptimized, -} from "../util/generateThumbnail"; +import GenerateThumbnail from "../util/generateThumbnail"; import MediaFile from "../util/interfaces/MediaFile"; import ListableChecker from "../util/listableChecker"; import GenerateUrl from "../util/MediaUrlGen"; @@ -31,9 +29,6 @@ export async function JobsListMedia(req: Request, res: Response) { const relativeThumbPath: string = await GenerateThumbnail( relativeFilePath ); - const relativeOptimizedPath: string = await GenerateOptimized( - relativeFilePath - ); const type: core.FileTypeResult | undefined = await ft.fromFile( relativeFilePath @@ -54,12 +49,6 @@ export async function JobsListMedia(req: Request, res: Response) { jobid, relativeThumbPath, ]), - optimized: GenerateUrl([ - FolderPaths.StaticPath, - FolderPaths.JobsFolder, - jobid, - relativeOptimizedPath, - ]), thumbnailHeight: 250, thumbnailWidth: 250, filename: file.filename, @@ -84,9 +73,6 @@ export async function JobsListMedia(req: Request, res: Response) { const relativeThumbPath: string = await GenerateThumbnail( relativeFilePath ); - const relativeOptimizedPath: string = await GenerateOptimized( - relativeFilePath - ); const type: core.FileTypeResult | undefined = await ft.fromFile( relativeFilePath ); @@ -106,12 +92,6 @@ export async function JobsListMedia(req: Request, res: Response) { jobid, relativeThumbPath, ]), - optimized: GenerateUrl([ - FolderPaths.StaticPath, - FolderPaths.JobsFolder, - jobid, - relativeOptimizedPath, - ]), thumbnailHeight: 250, thumbnailWidth: 250, filename: file.name, diff --git a/jobs/jobsMoveMedia.ts b/jobs/jobsMoveMedia.ts index 445e8cc..6f90851 100644 --- a/jobs/jobsMoveMedia.ts +++ b/jobs/jobsMoveMedia.ts @@ -1,10 +1,13 @@ import { Request, Response } from "express"; import fs from "fs-extra"; import path from "path"; -import { logger } from "../server"; -import { PathToRoFolder } from "../util/pathGenerators"; +import GenerateThumbnail from "../util/generateThumbnail"; +import GenerateUrl from "../util/MediaUrlGen"; 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(); diff --git a/jobs/jobsUploadMedia.ts b/jobs/jobsUploadMedia.ts index 23ecf7b..f196ed7 100644 --- a/jobs/jobsUploadMedia.ts +++ b/jobs/jobsUploadMedia.ts @@ -3,9 +3,7 @@ import fs from "fs-extra"; import multer from "multer"; import path from "path"; import { logger } from "../server"; -import GenerateThumbnail, { - GenerateOptimized, -} from "../util/generateThumbnail"; +import GenerateThumbnail from "../util/generateThumbnail"; import generateUniqueFilename from "../util/generateUniqueFilename"; import { ConvertHeicFiles } from "../util/heicConverter"; import { PathToRoFolder } from "../util/pathGenerators"; @@ -62,7 +60,6 @@ export async function jobsUploadMedia(req: Request, res: Response) { //for each file.path, generate the thumbnail. (req.files as Express.Multer.File[]).forEach((file) => { thumbnailGenerationQueue.push(GenerateThumbnail(file.path)); - thumbnailGenerationQueue.push(GenerateOptimized(file.path)); }); await Promise.all(thumbnailGenerationQueue); diff --git a/util/generateThumbnail.ts b/util/generateThumbnail.ts index b98f265..278f497 100644 --- a/util/generateThumbnail.ts +++ b/util/generateThumbnail.ts @@ -1,12 +1,13 @@ -import ft from "file-type"; -import core from "file-type/core"; import fs from "fs-extra"; import { access } from "fs/promises"; -import gm from "gm"; import imageThumbnail from "image-thumbnail"; import path from "path"; -import { logger } from "../server"; +import gm from "gm"; +import ft from "file-type"; +import core from "file-type/core"; +import GenerateUrl from "./MediaUrlGen"; import { AssetPaths, FolderPaths } from "./serverInit"; +import { logger } from "../server"; const simpleThumb = require("simple-thumbnail"); //const ffmpeg = require("ffmpeg-static"); @@ -66,67 +67,6 @@ export default async function GenerateThumbnail( } } -/** @returns {string} Returns the relative path from the file to the thumbnail on the server. This must be converted to a URL. */ -export async function GenerateOptimized( - file: string - //thumbPath: string -) { - const type: core.FileTypeResult | undefined = await ft.fromFile(file); - let thumbnailExtension: string = GetThumbnailExtension(type, true); - let thumbPath: string = path.join( - path.dirname(file), - FolderPaths.OptimizedSubDir, - path.parse(path.basename(file)).name + thumbnailExtension - ); - - try { - //Ensure the thumbs directory exists. - await fs.ensureDir(path.dirname(thumbPath)); - - try { - await access(thumbPath); - logger.debug("Optimized image already exists for : " + thumbPath); - - return path.relative(path.dirname(file), thumbPath); - } catch {} - - //Check to see if the file is an image, PDF, or video. - - if (type?.mime === "application/pdf") { - const fileOnDisk: Buffer = await fs.readFile(file); - await GeneratePdfThumbnail(file, thumbPath); - } else if (type?.mime.startsWith("video")) { - await simpleThumb(file, thumbPath, "250x?", { - // path: ffmpeg, - }); - } else { - logger.debug("Optimized image being created for : " + thumbPath); - await OptimizeImage(file, thumbPath); - } - return path.relative(path.dirname(file), thumbPath); - } catch (err) { - logger.error("Error when genenerating optimized image:", { - thumbPath, - err, - message: (err as Error).message, - }); - return path.relative(path.dirname(file), AssetPaths.File); - } -} - -async function OptimizeImage(file: string, optimizedPath: string) { - const fileOnDisk: Buffer = await fs.readFile(file); - return new Promise((resolve, reject) => { - const result = gm(fileOnDisk) - .resize(1500) - .quality(75) - .write(optimizedPath, (error) => { - if (error) reject(error.message); - resolve(optimizedPath); - }); - }); -} - async function GeneratePdfThumbnail(file: string, thumbPath: string) { const fileOnDisk: Buffer = await fs.readFile(file); return new Promise((resolve, reject) => { @@ -142,11 +82,7 @@ async function GeneratePdfThumbnail(file: string, thumbPath: string) { }); } -function GetThumbnailExtension( - file: core.FileTypeResult | undefined, - useJpeg?: boolean -) { - if (useJpeg) return ".jpg"; +function GetThumbnailExtension(file: core.FileTypeResult | undefined) { if (file === undefined) return ".png"; return ".png"; } diff --git a/util/heicConverter.ts b/util/heicConverter.ts index 0fecc5b..155207c 100644 --- a/util/heicConverter.ts +++ b/util/heicConverter.ts @@ -3,12 +3,12 @@ import fs from "fs-extra"; import dotenv from "dotenv"; import ft from "file-type"; import core from "file-type/core"; +import gm from "gm"; import path, { resolve } from "path"; import { logger } from "../server"; import { FolderPaths } from "./serverInit"; //const heicConverter = require("heic-convert"); -import gm from "gm"; var imageMagick = gm.subClass({ imageMagick: true }); //gm.subClass(); diff --git a/util/serverInit.ts b/util/serverInit.ts index 6a9eb2b..4fc0419 100644 --- a/util/serverInit.ts +++ b/util/serverInit.ts @@ -17,7 +17,6 @@ export const FolderPaths = { Jobs: path.join(RootDirectory, JobsFolder), Vendors: path.join(RootDirectory, VendorsFolder), ThumbsSubDir: "/thumbs", - OptimizedSubDir: "/optimized", BillsSubDir: "/bills", ConvertedOriginalSubDir: "/ConvertedOriginal", StaticPath: "/static",