const fs = require('fs-extra'); const path = require('path'); //const utils = require('../../utils'); const ConvertBase = require('./ConvertBase'); class ConvertJpegPng extends ConvertBase { check(data, opts) { const {inputFiles} = opts; return this.config.useExternalBookConverter && inputFiles.sourceFileType && (inputFiles.sourceFileType.ext == 'jpg' || inputFiles.sourceFileType.ext == 'png' ); } async run(data, opts) { const {inputFiles, uploadFileName, imageFiles} = opts; if (!imageFiles) { if (!this.check(data, opts)) return false; } let files = []; if (imageFiles) { files = imageFiles; } else { const imageFile = `${inputFiles.filesDir}/${path.basename(inputFiles.sourceFile)}.${inputFiles.sourceFileType.ext}`; await fs.copy(inputFiles.sourceFile, imageFile); files.push(imageFile); } //читаем изображения const limitSize = 2*this.config.maxUploadFileSize; let imagesSize = 0; const loadImage = async(image) => { const src = path.parse(image.src); let type = 'unknown'; switch (src.ext) { case '.jpg': type = 'image/jpeg'; break; case '.png': type = 'image/png'; break; } if (type != 'unknown') { image.data = (await fs.readFile(image.src)).toString('base64'); image.type = type; image.name = src.base; imagesSize += image.data.length; if (imagesSize > limitSize) { throw new Error(`Файл для конвертирования слишком большой|FORLOG| imagesSize: ${imagesSize} > ${limitSize}`); } } } let images = []; let loading = []; files.forEach(f => { const image = {src: f}; images.push(image); loading.push(loadImage(image)); }); await Promise.all(loading); //формируем fb2 let titleInfo = {}; let desc = {_n: 'description', 'title-info': titleInfo}; let pars = []; let body = {_n: 'body', section: {_a: [pars]}}; let binary = []; let fb2 = [desc, body, binary]; let title = ''; if (uploadFileName) title = uploadFileName; titleInfo['book-title'] = title; for (const image of images) { if (image.type) { const img = {_n: 'binary', _attrs: {id: image.name, 'content-type': image.type}, _t: image.data}; binary.push(img); pars.push({_n: 'p', _t: ''}); pars.push({_n: 'image', _attrs: {'l:href': `#${image.name}`}}); } } pars.push({_n: 'p', _t: ''}); return this.formatFb2(fb2); } } module.exports = ConvertJpegPng;