ConvertEpub.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const fs = require('fs-extra');
  2. const path = require('path');
  3. const ConvertBase = require('./ConvertBase');
  4. class ConvertEpub extends ConvertBase {
  5. async check(data, opts) {
  6. const {inputFiles} = opts;
  7. if (this.config.useExternalBookConverter &&
  8. inputFiles.sourceFileType && inputFiles.sourceFileType.ext == 'zip') {
  9. //ищем файл 'mimetype'
  10. for (const file of inputFiles.files) {
  11. if (file.path == 'mimetype') {
  12. const mt = await fs.readFile(`${inputFiles.filesDir}/${file.path}`);
  13. if (mt.toString().trim() == 'application/epub+zip')
  14. return true;
  15. break;
  16. }
  17. }
  18. }
  19. return false;
  20. }
  21. async run(data, opts) {
  22. if (!await this.check(data, opts))
  23. return false;
  24. await this.checkExternalConverterPresent();
  25. const {inputFiles, callback, abort} = opts;
  26. const outFile = `${inputFiles.filesDir}/${path.basename(inputFiles.sourceFile)}`;
  27. const epubFile = `${outFile}.epub`;
  28. const fb2File = `${outFile}.fb2`;
  29. await fs.copy(inputFiles.sourceFile, epubFile);
  30. let perc = 0;
  31. await this.execConverter(this.calibrePath, [epubFile, fb2File, '-vv'], () => {
  32. perc = (perc < 100 ? perc + 1 : 50);
  33. callback(perc);
  34. }, abort);
  35. return await fs.readFile(fb2File);
  36. }
  37. }
  38. module.exports = ConvertEpub;