UpdateMerger.coffee 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. _ = require('underscore')
  2. fs = require('fs')
  3. logger = require('logger-sharelatex')
  4. EditorController = require('../Editor/EditorController')
  5. FileTypeManager = require('../Uploads/FileTypeManager')
  6. FileWriter = require('../../infrastructure/FileWriter')
  7. module.exports = UpdateMerger =
  8. mergeUpdate: (user_id, project_id, path, updateRequest, source, callback = (error) ->)->
  9. logger.log project_id:project_id, path:path, "merging update from tpds"
  10. FileWriter.writeStreamToDisk project_id, updateRequest, (err, fsPath)->
  11. return callback(err) if err?
  12. UpdateMerger._mergeUpdate user_id, project_id, path, fsPath, source, (mergeErr) ->
  13. fs.unlink fsPath, (deleteErr) ->
  14. if deleteErr?
  15. logger.err project_id:project_id, fsPath:fsPath, "error deleting file"
  16. callback mergeErr
  17. _mergeUpdate: (user_id, project_id, path, fsPath, source, callback = (error) ->)->
  18. FileTypeManager.isBinary path, fsPath, (err, isFile)->
  19. return callback(err) if err?
  20. if isFile
  21. UpdateMerger.p.processFile project_id, fsPath, path, source, user_id, callback
  22. else
  23. UpdateMerger.p.processDoc project_id, user_id, fsPath, path, source, callback
  24. deleteUpdate: (user_id, project_id, path, source, callback = () ->)->
  25. EditorController.deleteEntityWithPath project_id, path, source, user_id, () ->
  26. logger.log project_id:project_id, path:path, "finished processing update to delete entity from tpds"
  27. callback()
  28. p:
  29. processDoc: (project_id, user_id, fsPath, path, source, callback)->
  30. UpdateMerger.p.readFileIntoTextArray fsPath, (err, docLines)->
  31. if err?
  32. logger.err project_id:project_id, "error reading file into text array for process doc update"
  33. return callback(err)
  34. logger.log docLines:docLines, "processing doc update from tpds"
  35. EditorController.upsertDocWithPath project_id, path, docLines, source, user_id, (err) ->
  36. logger.log project_id:project_id, "completed processing file update from tpds"
  37. callback(err)
  38. processFile: (project_id, fsPath, path, source, user_id, callback)->
  39. logger.log project_id:project_id, "processing file update from tpds"
  40. EditorController.upsertFileWithPath project_id, path, fsPath, null, source, user_id, (err) ->
  41. logger.log project_id:project_id, "completed processing file update from tpds"
  42. callback(err)
  43. readFileIntoTextArray: (path, callback)->
  44. fs.readFile path, "utf8", (error, content = "") ->
  45. if error?
  46. logger.err path:path, "error reading file into text array"
  47. return callback(error)
  48. lines = content.split(/\r\n|\n|\r/)
  49. callback error, lines