46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
const fs = require('fs-extra');
|
||
const FileDetector = require('../FileDetector');
|
||
|
||
//порядок важен
|
||
const convertClassFactory = [
|
||
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(inputFile, outputFile, url, callback) {
|
||
const fileType = await this.detector.detectFile(inputFile);
|
||
|
||
const data = await fs.readFile(inputFile);
|
||
let result = false;
|
||
for (const convert of this.convertFactory) {
|
||
result = convert.run(data, {inputFile, url, callback, fileType});
|
||
if (result) {
|
||
await fs.writeFile(outputFile, result);
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!result) {
|
||
if (fileType)
|
||
throw new Error(`Этот формат файла не поддерживается: ${fileType.mime}`);
|
||
else {
|
||
throw new Error(`Не удалось определить формат файла: ${url}`);
|
||
}
|
||
}
|
||
|
||
callback(100);
|
||
}
|
||
}
|
||
|
||
module.exports = BookConverter; |