ReaderController.js 3.0 KB

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