ReaderController.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const BaseController = require('./BaseController');
  2. const ReaderWorker = require('../core/Reader/ReaderWorker');//singleton
  3. const ReaderStorage = require('../core/Reader/ReaderStorage');//singleton
  4. const WorkerState = require('../core/WorkerState');//singleton
  5. class ReaderController extends BaseController {
  6. constructor(config) {
  7. super(config);
  8. this.readerStorage = new ReaderStorage();
  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. skipCheck: (request.hasOwnProperty('skipCheck') ? request.skipCheck : false),
  22. isText: (request.hasOwnProperty('isText') ? request.isText : false),
  23. uploadFileName: (request.hasOwnProperty('uploadFileName') ? request.uploadFileName : false),
  24. });
  25. const state = this.workerState.getState(workerId);
  26. return (state ? state : {});
  27. } catch (e) {
  28. error = e.message;
  29. }
  30. //bad request
  31. res.status(400).send({error});
  32. return false;
  33. }
  34. async storage(req, res) {
  35. const request = req.body;
  36. let error = '';
  37. try {
  38. if (!request.action)
  39. throw new Error(`key 'action' is empty`);
  40. if (!request.items || Array.isArray(request.data))
  41. throw new Error(`key 'items' is empty`);
  42. return await this.readerStorage.doAction(request);
  43. } catch (e) {
  44. error = e.message;
  45. }
  46. //error
  47. res.status(500).send({error});
  48. return false;
  49. }
  50. async uploadFile(req, res) {
  51. const file = req.file;
  52. let error = '';
  53. try {
  54. const url = await this.readerWorker.saveFile(file);
  55. return {url};
  56. } catch (e) {
  57. error = e.message;
  58. }
  59. //bad request
  60. res.status(400).send({error});
  61. return false;
  62. }
  63. async restoreCachedFile(req, res) {
  64. const request = req.body;
  65. let error = '';
  66. try {
  67. if (!request.path)
  68. throw new Error(`key 'path' is empty`);
  69. const workerId = this.readerWorker.restoreCachedFile(request.path);
  70. const state = this.workerState.getState(workerId);
  71. return (state ? state : {});
  72. } catch (e) {
  73. error = e.message;
  74. }
  75. //bad request
  76. res.status(400).send({error});
  77. return false;
  78. }
  79. }
  80. module.exports = ReaderController;