ReaderController.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. const BaseController = require('./BaseController');
  2. const ReaderWorker = require('../core/Reader/ReaderWorker');//singleton
  3. const JembaReaderStorage = require('../core/Reader/JembaReaderStorage');//singleton
  4. const WorkerState = require('../core/WorkerState');//singleton
  5. class ReaderController extends BaseController {
  6. constructor(config) {
  7. super(config);
  8. this.readerStorage = new JembaReaderStorage();
  9. this.readerWorker = new ReaderWorker(config);
  10. this.workerState = new WorkerState();
  11. }
  12. async loadBook(req, res) {
  13. const request = req.body;
  14. let error = '';
  15. try {
  16. if (!request.url)
  17. throw new Error(`key 'url' is empty`);
  18. const workerId = this.readerWorker.loadBookUrl({
  19. url: request.url,
  20. enableSitesFilter: (request.hasOwnProperty('enableSitesFilter') ? request.enableSitesFilter : true),
  21. skipHtmlCheck: (request.hasOwnProperty('skipHtmlCheck') ? request.skipHtmlCheck : false),
  22. isText: (request.hasOwnProperty('isText') ? request.isText : false),
  23. uploadFileName: (request.hasOwnProperty('uploadFileName') ? request.uploadFileName : false),
  24. djvuQuality: (request.hasOwnProperty('djvuQuality') ? request.djvuQuality : false),
  25. pdfAsText: (request.hasOwnProperty('pdfAsText') ? request.pdfAsText : false),
  26. pdfQuality: (request.hasOwnProperty('pdfQuality') ? request.pdfQuality : false),
  27. });
  28. const state = this.workerState.getState(workerId);
  29. return (state ? state : {});
  30. } catch (e) {
  31. error = e.message;
  32. }
  33. //bad request
  34. res.status(400).send({error});
  35. return false;
  36. }
  37. async storage(req, res) {
  38. const request = req.body;
  39. let error = '';
  40. try {
  41. if (!request.action)
  42. throw new Error(`key 'action' is empty`);
  43. if (!request.items || Array.isArray(request.data))
  44. throw new Error(`key 'items' is empty`);
  45. return await this.readerStorage.doAction(request);
  46. } catch (e) {
  47. error = e.message;
  48. }
  49. //error
  50. res.status(500).send({error});
  51. return false;
  52. }
  53. async uploadFile(req, res) {
  54. const file = req.file;
  55. let error = '';
  56. try {
  57. const url = await this.readerWorker.saveFile(file);
  58. return {url};
  59. } catch (e) {
  60. error = e.message;
  61. }
  62. //bad request
  63. res.status(400).send({error});
  64. return false;
  65. }
  66. }
  67. module.exports = ReaderController;