2024-04-01 01:56:54 -05:00
|
|
|
import Jimp from "jimp";
|
|
|
|
import { prisma } from "./db";
|
|
|
|
import createFile from "./storage/createFile";
|
|
|
|
|
|
|
|
const generatePreview = async (
|
|
|
|
buffer: Buffer,
|
|
|
|
collectionId: number,
|
|
|
|
linkId: number
|
|
|
|
) => {
|
|
|
|
if (buffer && collectionId && linkId) {
|
2024-06-29 16:54:31 -05:00
|
|
|
try {
|
|
|
|
const image = await Jimp.read(buffer);
|
2024-04-01 01:56:54 -05:00
|
|
|
|
2024-06-29 16:54:31 -05:00
|
|
|
if (!image) {
|
|
|
|
console.log("Error generating preview: Image not found");
|
|
|
|
return;
|
|
|
|
}
|
2024-06-28 11:12:16 -05:00
|
|
|
|
2024-06-29 16:54:31 -05:00
|
|
|
image.resize(1280, Jimp.AUTO).quality(20);
|
|
|
|
const processedBuffer = await image.getBufferAsync(Jimp.MIME_JPEG);
|
2024-06-28 11:12:16 -05:00
|
|
|
|
2024-06-29 16:54:31 -05:00
|
|
|
if (
|
|
|
|
Buffer.byteLength(processedBuffer) >
|
|
|
|
1024 * 1024 * Number(process.env.PREVIEW_MAX_BUFFER || 0.1)
|
|
|
|
) {
|
|
|
|
console.log("Error generating preview: Buffer size exceeded");
|
|
|
|
return;
|
2024-04-01 01:56:54 -05:00
|
|
|
}
|
2024-06-29 16:54:31 -05:00
|
|
|
|
|
|
|
await createFile({
|
|
|
|
data: processedBuffer,
|
|
|
|
filePath: `archives/preview/${collectionId}/${linkId}.jpeg`,
|
|
|
|
});
|
|
|
|
|
|
|
|
await prisma.link.update({
|
|
|
|
where: { id: linkId },
|
|
|
|
data: {
|
|
|
|
preview: `archives/preview/${collectionId}/${linkId}.jpeg`,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
} catch (err) {
|
2024-04-01 01:56:54 -05:00
|
|
|
console.error("Error processing the image:", err);
|
2024-06-29 16:54:31 -05:00
|
|
|
}
|
2024-04-01 01:56:54 -05:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default generatePreview;
|