CompileController.coffee 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. RequestParser = require "./RequestParser"
  2. CompileManager = require "./CompileManager"
  3. Settings = require "settings-sharelatex"
  4. Metrics = require "./Metrics"
  5. ProjectPersistenceManager = require "./ProjectPersistenceManager"
  6. logger = require "logger-sharelatex"
  7. module.exports = CompileController =
  8. compile: (req, res, next = (error) ->) ->
  9. timer = new Metrics.Timer("compile-request")
  10. RequestParser.parse req.body, (error, request) ->
  11. return next(error) if error?
  12. request.project_id = req.params.project_id
  13. ProjectPersistenceManager.markProjectAsJustAccessed request.project_id, (error) ->
  14. return next(error) if error?
  15. CompileManager.doCompile request, (error, outputFiles = []) ->
  16. if error?
  17. logger.error err: error, project_id: request.project_id, "error running compile"
  18. if error.timedout
  19. status = "timedout"
  20. else
  21. status = "error"
  22. code = 500
  23. else
  24. status = "failure"
  25. for file in outputFiles
  26. if file.path?.match(/output\.pdf$/)
  27. status = "success"
  28. timer.done()
  29. res.send (code or 200), {
  30. compile:
  31. status: status
  32. error: error?.message or error
  33. outputFiles: outputFiles.map (file) ->
  34. url: "#{Settings.apis.clsi.url}/project/#{request.project_id}/output/#{file.path}"
  35. type: file.type
  36. }
  37. clearCache: (req, res, next = (error) ->) ->
  38. ProjectPersistenceManager.clearProject req.params.project_id, (error) ->
  39. return next(error) if error?
  40. res.send 204 # No content
  41. syncFromCode: (req, res, next = (error) ->) ->
  42. file = req.query.file
  43. line = parseInt(req.query.line, 10)
  44. column = parseInt(req.query.column, 10)
  45. project_id = req.params.project_id
  46. CompileManager.syncFromCode project_id, file, line, column, (error, pdfPositions) ->
  47. return next(error) if error?
  48. res.send JSON.stringify {
  49. pdf: pdfPositions
  50. }
  51. syncFromPdf: (req, res, next = (error) ->) ->
  52. page = parseInt(req.query.page, 10)
  53. h = parseFloat(req.query.h)
  54. v = parseFloat(req.query.v)
  55. project_id = req.params.project_id
  56. CompileManager.syncFromPdf project_id, page, h, v, (error, codePositions) ->
  57. return next(error) if error?
  58. res.send JSON.stringify {
  59. code: codePositions
  60. }