aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2023-12-02 14:46:35 -0500
committerbobzel <zzzman@gmail.com>2023-12-02 14:46:35 -0500
commit6abda9e76cce35272ff73c3911af5aa8c18ce30b (patch)
treeccb3a2f4590d634c29244bfb594f98865ce9481e
parent24e06152089f650c4a3b1f9625a9c20b5e09199a (diff)
jimp cleanup
-rw-r--r--src/client/views/PreviewCursor.tsx2
-rw-r--r--src/server/ApiManagers/UploadManager.ts58
-rw-r--r--src/server/DashUploadUtils.ts29
3 files changed, 36 insertions, 53 deletions
diff --git a/src/client/views/PreviewCursor.tsx b/src/client/views/PreviewCursor.tsx
index e3a43d45f..d1bd0500b 100644
--- a/src/client/views/PreviewCursor.tsx
+++ b/src/client/views/PreviewCursor.tsx
@@ -50,7 +50,7 @@ export class PreviewCursor extends React.Component<{}> {
PreviewCursor._slowLoadDocuments?.(plain.split('v=')[1].split('&')[0], options, generatedDocuments, '', undefined, PreviewCursor._addDocument).then(batch.end);
} else if (re.test(plain)) {
const url = plain;
- if (url.startsWith(window.location.href)) {
+ if (!url.startsWith(window.location.href)) {
undoBatch(() =>
PreviewCursor._addDocument(
Docs.Create.WebDocument(url, {
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 478f7da3d..83644e564 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -1,6 +1,6 @@
import * as formidable from 'formidable';
import { createReadStream, createWriteStream, unlink, writeFile } from 'fs';
-import { basename, dirname, extname, normalize } from 'path';
+import * as path from 'path';
import Jimp from 'jimp';
import { filesDirectory, publicDirectory } from '..';
import { retrocycle } from '../../decycler/decycler';
@@ -13,7 +13,6 @@ import ApiManager, { Registration } from './ApiManager';
import { SolrManager } from './SearchManager';
import v4 = require('uuid/v4');
import { DashVersion } from '../../fields/DocSymbols';
-import { JPEGStream } from 'canvas';
const AdmZip = require('adm-zip');
const imageDataUri = require('image-data-uri');
const fs = require('fs');
@@ -30,11 +29,11 @@ export enum Directory {
}
export function serverPathToFile(directory: Directory, filename: string) {
- return normalize(`${filesDirectory}/${directory}/${filename}`);
+ return path.normalize(`${filesDirectory}/${directory}/${filename}`);
}
export function pathToDirectory(directory: Directory) {
- return normalize(`${filesDirectory}/${directory}`);
+ return path.normalize(`${filesDirectory}/${directory}`);
}
export function clientPathToFile(directory: Directory, filename: string) {
@@ -256,26 +255,20 @@ export default class UploadManager extends ApiManager {
if (!entryName.startsWith('files/')) {
return;
}
- const extension = extname(entryName);
+ const extension = path.extname(entryName);
const pathname = publicDirectory + '/' + entry.entryName;
const targetname = publicDirectory + '/' + entryName;
try {
zip.extractEntryTo(entry.entryName, publicDirectory, true, false);
createReadStream(pathname).pipe(createWriteStream(targetname));
- if (AcceptableMedia.imageFormats.includes(extension)) {
- [
- { size: 100, suffix: SizeSuffix.Small },
- { size: 400, suffix: SizeSuffix.Medium },
- { size: 900, suffix: SizeSuffix.Large },
- ].forEach(resizer =>
- Jimp.read(pathname).then(img =>
- img
- .resize(resizer.size, Jimp.AUTO) //
- .write(targetname.replace('_o' + extension, resizer.suffix + extension))
- )
- );
- }
- unlink(pathname, () => {});
+ Jimp.read(pathname).then(img => {
+ DashUploadUtils.imageResampleSizes(extension).forEach(({ width, suffix }) => {
+ const outputPath = InjectSize(targetname, suffix);
+ if (!width) createReadStream(pathname).pipe(createWriteStream(outputPath));
+ else img = img.resize(width, Jimp.AUTO).write(outputPath);
+ });
+ unlink(pathname, () => {});
+ });
} catch (e) {
console.log(e);
}
@@ -347,23 +340,16 @@ export default class UploadManager extends ApiManager {
.map((f: any) => fs.unlinkSync(path + f));
}
return imageDataUri.outputFile(uri, serverPathToFile(Directory.images, InjectSize(filename, origSuffix))).then((savedName: string) => {
- const ext = extname(savedName).toLowerCase();
- const { pngs, jpgs } = AcceptableMedia;
- if (!pngs.includes(ext) && !jpgs.includes(ext)) {
- (!origSuffix
- ? [{ size: 400, suffix: SizeSuffix.Medium }]
- : [
- { size: 100, suffix: SizeSuffix.Small },
- { size: 400, suffix: SizeSuffix.Medium },
- { size: 900, suffix: SizeSuffix.Large },
- ]
- ).forEach(resizer => {
- Jimp.read(savedName).then(img =>
- img
- .resize(resizer.size, Jimp.AUTO) //
- .write(serverPathToFile(Directory.images, InjectSize(filename, resizer.suffix) + ext))
- );
- });
+ const ext = path.extname(savedName).toLowerCase();
+ if (AcceptableMedia.imageFormats.includes(ext)) {
+ Jimp.read(savedName).then(img =>
+ (!origSuffix ? [{ width: 400, suffix: SizeSuffix.Medium }] : Object.values(DashUploadUtils.Sizes)) //
+ .forEach(({ width, suffix }) => {
+ const outputPath = InjectSize(filename, suffix);
+ if (!width) createReadStream(savedName).pipe(createWriteStream(outputPath));
+ else img = img.resize(width, Jimp.AUTO).write(outputPath);
+ })
+ );
}
res.send(clientPathToFile(Directory.images, filename + ext));
});
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index b2616af1f..6cad49033 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -54,7 +54,7 @@ export namespace DashUploadUtils {
}
export const Sizes: { [size: string]: Size } = {
- LARGE: { width: 900, suffix: SizeSuffix.Large },
+ LARGE: { width: 800, suffix: SizeSuffix.Large },
MEDIUM: { width: 400, suffix: SizeSuffix.Medium },
SMALL: { width: 100, suffix: SizeSuffix.Small },
};
@@ -594,20 +594,17 @@ export namespace DashUploadUtils {
* @param outputDirectory the directory to output to, usually Directory.Images
* @returns a map with suffixes as keys and resized filenames as values.
*/
- export async function outputResizedImages(sourcePath: string, outputFileName: string, outputDirectory: string) {
- return await new Promise<{ [suffix: string]: string }>(async resolve => {
- Jimp.read(sourcePath).then(async img => {
- const writtenFiles: { [suffix: string]: string } = {};
- for (const { width, suffix } of resizers(path.extname(outputFileName))) {
+ export function outputResizedImages(sourcePath: string, outputFileName: string, outputDirectory: string) {
+ const writtenFiles: { [suffix: string]: string } = {};
+ return Jimp.read(sourcePath).then(async img => {
+ await Promise.all(
+ imageResampleSizes(path.extname(outputFileName)).map(({ width, suffix }) => {
const outputPath = path.resolve(outputDirectory, (writtenFiles[suffix] = InjectSize(outputFileName, suffix)));
- await new Promise<void>(async res => {
- if (!width) createReadStream(sourcePath).pipe(createWriteStream(outputPath)).on('close', res);
- else img = img.resize(width, Jimp.AUTO).write(outputPath);
- res();
- });
- }
- resolve(writtenFiles);
- });
+ if (!width) return new Promise<void>(res => createReadStream(sourcePath).pipe(createWriteStream(outputPath)).on('close', res));
+ else img = img.resize(width, Jimp.AUTO).write(outputPath);
+ }) // prettier-ignore
+ );
+ return writtenFiles;
});
}
@@ -616,10 +613,10 @@ export namespace DashUploadUtils {
* @param ext the extension
* @returns an array of resize descriptions
*/
- function resizers(ext: string): DashUploadUtils.ImageResizer[] {
+ export function imageResampleSizes(ext: string): DashUploadUtils.ImageResizer[] {
return [
{ suffix: SizeSuffix.Original },
- ...[...(AcceptableMedia.imageFormats.includes(ext) ? Object.values(DashUploadUtils.Sizes) : [])].map(({ suffix, width }) => ({
+ ...[...(AcceptableMedia.imageFormats.includes(ext.toLowerCase()) ? Object.values(DashUploadUtils.Sizes) : [])].map(({ suffix, width }) => ({
width,
suffix,
})),