12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 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;
|