TpdsUpdateHandler.coffee 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. versioningApiHandler = require('../Versioning/VersioningApiHandler')
  2. updateMerger = require('./UpdateMerger')
  3. logger = require('logger-sharelatex')
  4. projectLocator = require('../Project/ProjectLocator')
  5. projectCreationHandler = require('../Project/ProjectCreationHandler')
  6. projectDeleter = require('../Project/ProjectDeleter')
  7. ProjectRootDocManager = require "../Project/ProjectRootDocManager"
  8. commitMessage = "Before update from Dropbox"
  9. module.exports =
  10. newUpdate: (user_id, projectName, path, updateRequest, sl_req_id, callback)->
  11. getOrCreateProject = (cb)=>
  12. projectLocator.findUsersProjectByName user_id, projectName, (err, project)=>
  13. logger.log user_id:user_id, filePath:path, projectName:projectName, "handling new update from tpds"
  14. if !project?
  15. projectCreationHandler.createBlankProject user_id, projectName, (err, project)=>
  16. # have a crack at setting the root doc after a while, on creation we won't have it yet, but should have
  17. # been sent it it within 30 seconds
  18. setTimeout (-> ProjectRootDocManager.setRootDocAutomatically project._id, sl_req_id ), @_rootDocTimeoutLength
  19. cb err, project
  20. else
  21. cb err, project
  22. getOrCreateProject (err, project)->
  23. versioningApiHandler.takeSnapshot project._id, commitMessage, sl_req_id, ->
  24. updateMerger.mergeUpdate project._id, path, updateRequest, sl_req_id, (err)->
  25. callback(err)
  26. deleteUpdate: (user_id, projectName, path, sl_req_id, callback)->
  27. logger.log user_id:user_id, filePath:path, "handling delete update from tpds"
  28. projectLocator.findUsersProjectByName user_id, projectName, (err, project)->
  29. if !project?
  30. logger.log user_id:user_id, filePath:path, projectName:projectName, "project not found from tpds update, ignoring folder or project"
  31. return callback()
  32. if path == "/"
  33. logger.log user_id:user_id, filePath:path, projectName:projectName, project_id:project._id, "project found for delete update, path is root so marking project as deleted"
  34. return projectDeleter.markAsDeletedByExternalSource project._id, callback
  35. else
  36. versioningApiHandler.takeSnapshot project._id, commitMessage, sl_req_id, ->
  37. updateMerger.deleteUpdate project._id, path, sl_req_id, (err)->
  38. callback(err)
  39. _rootDocTimeoutLength : 30 * 1000