ReaderController.js 2.7 KB

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