index.js 1.3 KB

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