index.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. const fs = require('fs-extra');
  2. const FileDetector = require('../FileDetector');
  3. //порядок важен
  4. const convertClassFactory = [
  5. //require('./ConvertDocX'),
  6. require('./ConvertFb2'),
  7. require('./ConvertSamlib'),
  8. require('./ConvertHtml'),
  9. ];
  10. class BookConverter {
  11. constructor(config) {
  12. this.detector = new FileDetector();
  13. this.convertFactory = [];
  14. for (const convertClass of convertClassFactory) {
  15. this.convertFactory.push(new convertClass(config));
  16. }
  17. }
  18. async convertToFb2(inputFile, outputFile, url, callback) {
  19. const fileType = await this.detector.detectFile(inputFile);
  20. const data = await fs.readFile(inputFile);
  21. let result = false;
  22. for (const convert of this.convertFactory) {
  23. result = convert.run(data, {inputFile, url, callback, fileType});
  24. if (result) {
  25. await fs.writeFile(outputFile, result);
  26. break;
  27. }
  28. }
  29. if (!result) {
  30. if (fileType)
  31. throw new Error(`Этот формат файла не поддерживается: ${fileType.mime}`);
  32. else {
  33. throw new Error(`Не удалось определить формат файла: ${url}`);
  34. }
  35. }
  36. callback(100);
  37. }
  38. }
  39. module.exports = BookConverter;