DocUpdaterClient.coffee 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. Settings = require('settings-sharelatex')
  2. rclient = require("redis-sharelatex").createClient(Settings.redis.web)
  3. request = require("request").defaults(jar: false)
  4. async = require "async"
  5. rclient_sub = require("redis-sharelatex").createClient(Settings.redis.web)
  6. rclient_sub.subscribe "applied-ops"
  7. rclient_sub.setMaxListeners(0)
  8. module.exports = DocUpdaterClient =
  9. randomId: () ->
  10. chars = for i in [1..24]
  11. Math.random().toString(16)[2]
  12. return chars.join("")
  13. subscribeToAppliedOps: (callback = (message) ->) ->
  14. rclient_sub.on "message", callback
  15. sendUpdate: (project_id, doc_id, update, callback = (error) ->) ->
  16. rclient.rpush "PendingUpdates:#{doc_id}", JSON.stringify(update), (error)->
  17. return callback(error) if error?
  18. doc_key = "#{project_id}:#{doc_id}"
  19. rclient.sadd "DocsWithPendingUpdates", doc_key, (error) ->
  20. return callback(error) if error?
  21. rclient.rpush "pending-updates-list", doc_key, callback
  22. sendUpdates: (project_id, doc_id, updates, callback = (error) ->) ->
  23. DocUpdaterClient.preloadDoc project_id, doc_id, (error) ->
  24. return callback(error) if error?
  25. jobs = []
  26. for update in updates
  27. do (update) ->
  28. jobs.push (callback) ->
  29. DocUpdaterClient.sendUpdate project_id, doc_id, update, callback
  30. async.series jobs, callback
  31. getDoc: (project_id, doc_id, callback = (error, res, body) ->) ->
  32. request.get "http://localhost:3003/project/#{project_id}/doc/#{doc_id}", (error, res, body) ->
  33. if body? and res.statusCode >= 200 and res.statusCode < 300
  34. body = JSON.parse(body)
  35. callback error, res, body
  36. getDocAndRecentOps: (project_id, doc_id, fromVersion, callback = (error, res, body) ->) ->
  37. request.get "http://localhost:3003/project/#{project_id}/doc/#{doc_id}?fromVersion=#{fromVersion}", (error, res, body) ->
  38. if body? and res.statusCode >= 200 and res.statusCode < 300
  39. body = JSON.parse(body)
  40. callback error, res, body
  41. preloadDoc: (project_id, doc_id, callback = (error) ->) ->
  42. DocUpdaterClient.getDoc project_id, doc_id, callback
  43. flushDoc: (project_id, doc_id, callback = (error) ->) ->
  44. request.post "http://localhost:3003/project/#{project_id}/doc/#{doc_id}/flush", (error, res, body) ->
  45. callback error, res, body
  46. setDocLines: (project_id, doc_id, lines, source, user_id, callback = (error) ->) ->
  47. request.post {
  48. url: "http://localhost:3003/project/#{project_id}/doc/#{doc_id}"
  49. json:
  50. lines: lines
  51. source: source
  52. user_id: user_id
  53. }, (error, res, body) ->
  54. callback error, res, body
  55. deleteDoc: (project_id, doc_id, callback = (error) ->) ->
  56. request.del "http://localhost:3003/project/#{project_id}/doc/#{doc_id}", (error, res, body) ->
  57. callback error, res, body
  58. flushProject: (project_id, callback = () ->) ->
  59. request.post "http://localhost:3003/project/#{project_id}/flush", callback
  60. deleteProject: (project_id, callback = () ->) ->
  61. request.del "http://localhost:3003/project/#{project_id}", callback
  62. setTrackChangesOn: (project_id, callback = () ->) ->
  63. request.post {
  64. url: "http://localhost:3003/project/#{project_id}/track_changes"
  65. json:
  66. on: true
  67. }, callback
  68. setTrackChangesOff: (project_id, callback = () ->) ->
  69. request.post {
  70. url: "http://localhost:3003/project/#{project_id}/track_changes"
  71. json:
  72. on: false
  73. }, callback