mono/packages/bot/lib/media/video/resize.js
2025-08-11 12:25:45 +02:00

160 lines
13 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.resize = exports._resize = exports.resizeFile = exports.meta = void 0;
const path = require("path");
const bluebird = require("bluebird");
const bluebird_1 = require("bluebird");
const sharp = require("sharp");
const __1 = require("../../..");
const exists_1 = require("@polymech/fs/exists");
const move_1 = require("@polymech/fs/move");
const dir_1 = require("@polymech/fs/dir");
const inspect_1 = require("@polymech/fs/inspect");
const lib_1 = require("@polymech/cache/lib");
const constants_1 = require("../../../constants");
const commons_1 = require("@polymech/commons");
const __2 = require("../../");
const meta = (file, image) => {
return new Promise((resolve, reject) => {
image.metadata().then((meta) => {
resolve(meta);
}).catch((e) => {
__1.logger.error(`Error creating meta data ${file}`);
resolve(null);
});
});
};
exports.meta = meta;
const resizeFile = async (file, target, onNode = () => { }, options) => {
const osr_cache = (0, commons_1.OSR_CACHE)();
const ca_options = JSON.parse(JSON.stringify({ ...options, target, skip: null }));
const cached = await (0, lib_1.get_cached)(file, ca_options, constants_1.MODULE_NAME);
const targetOri = '' + target;
let inPlace = false;
if (path.resolve(file) === path.resolve(target)) {
const parts = path.parse(target);
target = path.join(parts.dir, parts.name + '_tmp' + parts.ext);
inPlace = true;
}
let image;
try {
image = sharp(file);
}
catch (e) {
__1.logger.error(`Error reading file, ${file}`, e);
return null;
}
onNode(image);
let metaData = await (0, exports.meta)(file, image) || {};
const percent = options.percent;
const srcParts = path.parse(file);
const dstParts = path.parse(target);
const node = (0, inspect_1.createItem)(file, {
size: true,
mime: true
});
if (!(0, exists_1.sync)(dstParts.dir)) {
(0, dir_1.sync)(dstParts.dir);
}
if (options.width <= options.minWidth) {
__1.logger.error(`Error resizing : options.width <= options.minWidth`);
return;
}
if (metaData.width && options.width && options.minWidth) {
if (metaData.width < options.minWidth) {
return image;
}
}
if (metaData.height && options.height && options.minHeight) {
if (metaData.height < options.minHeight) {
return image;
}
}
if (options.minSize && options.minSize > node.size) {
return image;
}
if (percent && metaData.width) {
image = image.resize({
width: Math.round(metaData.width * (percent / 100)),
fastShrinkOnLoad: options.fastShrinkOnLoad,
withoutEnlargement: options.withoutEnlargement,
withoutReduction: options.withoutReduction,
fit: options.fit,
position: options.position
});
}
else if (options.width || options.height) {
image = image.resize({
width: options.width,
height: options.height,
fastShrinkOnLoad: options.fastShrinkOnLoad,
withoutEnlargement: options.withoutEnlargement,
withoutReduction: options.withoutReduction,
fit: options.fit,
position: options.position
});
}
else {
__1.logger.error(`Error resizing, invalid options for ${file} - no width, height or percent`);
return image;
}
if (metaData.width) {
await image.withMetadata().toFile(target);
}
else {
try {
await image.toFile(target);
}
catch (e) {
__1.logger.error(`Error writing file out, ${file}`, e);
return null;
}
}
if (inPlace) {
const timeout = async (retry) => new Promise((resolve) => {
setTimeout(resolve, 500 * retry);
});
const moveRetry = async (src, dst, retry = 0) => {
if (retry > 6) {
__1.logger.error(`Error moving file failed, max retries reached ${src}`);
return;
}
try {
await (0, move_1.async)(target, targetOri);
}
catch (e) {
if (e.code === 'EPERM') {
__1.logger.warn(`Error moving file out, retry ${file}`, e);
await timeout(retry);
moveRetry(src, dst, retry + 1);
}
}
};
await moveRetry(file, targetOri);
}
options.debug && __1.logger.debug(`Resized Image ${file} to ${targetOri}`);
return image;
};
exports.resizeFile = resizeFile;
const _resize = async (file, targets, onNode = () => { }, options) => {
return bluebird_1.Promise.resolve(targets).map((target) => {
options.verbose && __1.logger.debug(`Resizing ${file} to ${target}`);
if (options.dry) {
return bluebird.resolve();
}
return (0, exports.resizeFile)(file, target, onNode, options);
}, { concurrency: 1 });
};
exports._resize = _resize;
const resize = async (options) => {
let reports = [];
const onNode = (data) => { reports.push(data); };
options.verbose && __1.logger.info(`Convert ${options.srcInfo.FILES.length} files `);
await bluebird_1.Promise.resolve(options.srcInfo.FILES).map((f) => {
const outputs = (0, __2.targets)(f, options);
options.verbose && __1.logger.info(`Convert ${f} to `, outputs);
return (0, exports._resize)(f, outputs, onNode, options);
}, { concurrency: 1 });
};
exports.resize = resize;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS92aWRlby9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTRCO0FBQzVCLHFDQUFvQztBQUNwQyx1Q0FBOEM7QUFDOUMsK0JBQThCO0FBRTlCLGdDQUFpQztBQUVqQyxnREFBb0Q7QUFDcEQsNENBQWlEO0FBQ2pELDBDQUE4QztBQUM5QyxrREFBMkQ7QUFFM0QsNkNBRTRCO0FBRTVCLGtEQUUyQjtBQUUzQiwrQ0FBNkM7QUFFN0MsOEJBRWU7QUFFUixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFrQixFQUEyQixFQUFFO0lBQ3RFLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbkMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNYLFVBQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLElBQUksRUFBRSxDQUFDLENBQUE7WUFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFUWSxRQUFBLElBQUksUUFTaEI7QUFFTSxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUE4QixHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBdUIsRUFBd0IsRUFBRTtJQUVySSxNQUFNLFNBQVMsR0FBRyxJQUFBLG1CQUFTLEdBQUUsQ0FBQTtJQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFT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