BookParser.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import EasySAXParser from './easysax';
  2. import {sleep} from '../../../share/utils';
  3. export default class BookParser {
  4. constructor() {
  5. this.parser = new EasySAXParser();
  6. }
  7. async parse(data, callback) {
  8. if (!callback)
  9. callback = () => {};
  10. callback(0);
  11. this.data = data;
  12. if (data.indexOf('<FictionBook') < 0) {
  13. throw new Error('Неверный формат файла');
  14. }
  15. let nextPerc = 0;
  16. /*
  17. firstName = book.get('//FictionBook:first-name', nameSpace).text();
  18. lastName = book.get('//FictionBook:last-name', nameSpace).text();
  19. genre = book.get('//FictionBook:genre', nameSpace).text();
  20. date = book.get('//FictionBook:date', nameSpace).text();
  21. bookTitle = book.get('//FictionBook:book-title', nameSpace).text();
  22. annotation = book.get('//FictionBook:annotation', nameSpace).text();
  23. id = book.get('//FictionBook:id', nameSpace).text();
  24. */
  25. const parser = this.parser;
  26. let result = {};
  27. parser.on('error', (msgError) => {// eslint-disable-line no-unused-vars
  28. });
  29. parser.on('startNode', (elemName, getAttr, isTagEnd, getStrNode) => {// eslint-disable-line no-unused-vars
  30. //console.log(elemName, ' start');
  31. });
  32. parser.on('endNode', (elemName, isTagStart, getStrNode) => {// eslint-disable-line no-unused-vars
  33. //console.log(elemName, ' end');
  34. });
  35. parser.on('textNode', (text) => {// eslint-disable-line no-unused-vars
  36. //console.log(text);
  37. });
  38. parser.on('cdata', (data) => {// eslint-disable-line no-unused-vars
  39. });
  40. parser.on('comment', (text) => {// eslint-disable-line no-unused-vars
  41. });
  42. parser.on('progress', async(progress) => {
  43. if (progress > nextPerc) {
  44. await sleep(1);
  45. callback(progress);
  46. nextPerc += 10;
  47. }
  48. });
  49. await parser.parse(data);
  50. if (callback)
  51. callback(100);
  52. return result;
  53. }
  54. }