index.js 1.5 KB

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