RangesManager.coffee 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. RangesTracker = require "./RangesTracker"
  2. logger = require "logger-sharelatex"
  3. module.exports = RangesManager =
  4. MAX_COMMENTS: 500
  5. MAX_CHANGES: 1200
  6. applyUpdate: (project_id, doc_id, entries = {}, updates = [], callback = (error, new_entries) ->) ->
  7. {changes, comments} = entries
  8. rangesTracker = new RangesTracker(changes, comments)
  9. for update in updates
  10. rangesTracker.track_changes = !!update.meta.tc
  11. if !!update.meta.tc
  12. rangesTracker.setIdSeed(update.meta.tc)
  13. for op in update.op
  14. rangesTracker.applyOp(op, { user_id: update.meta?.user_id })
  15. if rangesTracker.changes?.length > RangesManager.MAX_CHANGES or rangesTracker.comments?.length > RangesManager.MAX_COMMENTS
  16. return callback new Error("too many comments or tracked changes")
  17. response = RangesManager._getRanges rangesTracker
  18. logger.log {project_id, doc_id, changesCount: response.changes?.length, commentsCount: response.comments?.length}, "applied updates to ranges"
  19. callback null, response
  20. acceptChange: (change_id, ranges, callback = (error, ranges) ->) ->
  21. {changes, comments} = ranges
  22. logger.log {change_id}, "accepting change in ranges"
  23. rangesTracker = new RangesTracker(changes, comments)
  24. rangesTracker.removeChangeId(change_id)
  25. response = RangesManager._getRanges(rangesTracker)
  26. callback null, response
  27. deleteComment: (comment_id, ranges, callback = (error, ranges) ->) ->
  28. {changes, comments} = ranges
  29. logger.log {comment_id}, "deleting comment in ranges"
  30. rangesTracker = new RangesTracker(changes, comments)
  31. rangesTracker.removeCommentId(comment_id)
  32. response = RangesManager._getRanges(rangesTracker)
  33. callback null, response
  34. _getRanges: (rangesTracker) ->
  35. # Return the minimal data structure needed, since most documents won't have any
  36. # changes or comments
  37. response = {}
  38. if rangesTracker.changes?.length > 0
  39. response ?= {}
  40. response.changes = rangesTracker.changes
  41. if rangesTracker.comments?.length > 0
  42. response ?= {}
  43. response.comments = rangesTracker.comments
  44. return response