123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- const fs = require('fs-extra');
- const FileDetector = require('../FileDetector');
- //порядок важен
- const convertClassFactory = [
- require('./ConvertEpub'),
- require('./ConvertPdf'),
- require('./ConvertRtf'),
- require('./ConvertDocX'),
- require('./ConvertDoc'),
- require('./ConvertMobi'),
- 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 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 (!result && inputFiles.nesting) {
- result = await this.convertToFb2(inputFiles.nesting, outputFile, url, callback);
- }
- if (!result) {
- if (selectedFileType)
- throw new Error(`Этот формат файла не поддерживается: ${selectedFileType.mime}`);
- else {
- throw new Error(`Не удалось определить формат файла: ${url}`);
- }
- }
- callback(100);
- return result;
- }
- }
- module.exports = BookConverter;
|