| 1234567891011121314151617181920212223242526272829303132333435 |
- HistoryManager = require "./HistoryManager"
- DocumentUpdaterManager = require "./DocumentUpdaterManager"
- MongoManager = require "./MongoManager"
- DiffGenerator = require "./DiffGenerator"
- module.exports = DiffManager =
- getLatestDocAndUpdates: (project_id, doc_id, fromDate, toDate, callback = (error, lines, version, updates) ->) ->
- HistoryManager.processUncompressedUpdatesWithLock doc_id, (error) ->
- return callback(error) if error?
- DocumentUpdaterManager.getDocument project_id, doc_id, (error, lines, version) ->
- return callback(error) if error?
- MongoManager.getUpdatesBetweenDates doc_id, fromDate, toDate, (error, updates) ->
- return callback(error) if error?
- callback(null, lines, version, updates)
-
- getDiff: (project_id, doc_id, fromDate, toDate, callback = (error, diff) ->) ->
- DiffManager.getLatestDocAndUpdates project_id, doc_id, fromDate, null, (error, lines, version, updates) ->
- return callback(error) if error?
- lastUpdate = updates[updates.length - 1]
- if lastUpdate? and lastUpdate.v != version
- return callback new Error("latest update version, #{lastUpdate.v}, does not match doc version, #{version}")
-
- updatesToApply = []
- for update in updates
- if update.meta.end_ts <= toDate
- updatesToApply.push update
- try
- startingContent = DiffGenerator.rewindUpdates lines.join("\n"), updates
- diff = DiffGenerator.buildDiff startingContent, updatesToApply
- catch e
- return callback(e)
-
- callback(null, diff)
|