ReaderController.js 2.6 KB

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