Files
liberama/server/core/BookConverter/index.js

64 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const fs = require('fs-extra');
const FileDetector = require('../FileDetector');
//порядок важен
const convertClassFactory = [
require('./ConvertRtf'),
require('./ConvertDocX'),
require('./ConvertDoc'),
require('./ConvertFb2'),
require('./ConvertSamlib'),
require('./ConvertHtml'),
];
class BookConverter {
constructor(config) {
this.detector = new FileDetector();
this.convertFactory = [];
for (const convertClass of convertClassFactory) {
this.convertFactory.push(new convertClass(config));
}
}
async convertToFb2(inputFiles, outputFile, url, callback) {
const selectedFileType = await this.detector.detectFile(inputFiles.selectedFile);
const data = await fs.readFile(inputFiles.selectedFile);
let selectedFileType2 = null;
let data2 = null;
if (inputFiles.nesting) {
selectedFileType2 = await this.detector.detectFile(inputFiles.nesting.selectedFile);
data2 = await fs.readFile(inputFiles.nesting.selectedFile);
}
let result = false;
for (const convert of this.convertFactory) {
result = await convert.run(data, {inputFiles, url, callback, dataType: selectedFileType});
if (result) {
await fs.writeFile(outputFile, result);
break;
}
if (inputFiles.nesting) {
result = await convert.run(data2, {inputFiles: inputFiles.nesting, url, callback, dataType: selectedFileType2});
if (result) {
await fs.writeFile(outputFile, result);
break;
}
}
}
if (!result) {
if (selectedFileType)
throw new Error(`Этот формат файла не поддерживается: ${selectedFileType.mime}`);
else {
throw new Error(`Не удалось определить формат файла: ${url}`);
}
}
callback(100);
}
}
module.exports = BookConverter;