| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- updateMerger = require('./UpdateMerger')
- logger = require('logger-sharelatex')
- projectLocator = require('../Project/ProjectLocator')
- projectCreationHandler = require('../Project/ProjectCreationHandler')
- projectDeleter = require('../Project/ProjectDeleter')
- ProjectRootDocManager = require "../Project/ProjectRootDocManager"
- FileTypeManager = require('../Uploads/FileTypeManager')
- CooldownManager = require('../Cooldown/CooldownManager')
- Errors = require('../Errors/Errors')
- commitMessage = "Before update from Dropbox"
- module.exports =
- newUpdate: (user_id, projectName, path, updateRequest, source, callback)->
- getOrCreateProject = (cb)=>
- projectLocator.findUsersProjectByName user_id, projectName, (err, project)=>
- logger.log user_id:user_id, filePath:path, projectName:projectName, "handling new update from tpds"
- if !project?
- projectCreationHandler.createBlankProject user_id, projectName, (err, project)=>
- # have a crack at setting the root doc after a while, on creation we won't have it yet, but should have
- # been sent it it within 30 seconds
- setTimeout (-> ProjectRootDocManager.setRootDocAutomatically project._id ), @_rootDocTimeoutLength
- cb err, project
- else
- cb err, project
- getOrCreateProject (err, project)->
- return callback(err) if err?
- CooldownManager.isProjectOnCooldown project._id, (err, projectIsOnCooldown) ->
- return callback(err) if err?
- if projectIsOnCooldown
- logger.log {projectId: project._id}, "project is on cooldown, denying request"
- return callback(new Errors.TooManyRequestsError('project on cooldown'))
- FileTypeManager.shouldIgnore path, (err, shouldIgnore)->
- if shouldIgnore
- return callback()
- updateMerger.mergeUpdate user_id, project._id, path, updateRequest, source, callback
- deleteUpdate: (user_id, projectName, path, source, callback)->
- logger.log user_id:user_id, filePath:path, "handling delete update from tpds"
- projectLocator.findUsersProjectByName user_id, projectName, (err, project)->
- if !project?
- logger.log user_id:user_id, filePath:path, projectName:projectName, "project not found from tpds update, ignoring folder or project"
- return callback()
- if path == "/"
- 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"
- return projectDeleter.markAsDeletedByExternalSource project._id, callback
- else
- updateMerger.deleteUpdate user_id, project._id, path, source, (err)->
- callback(err)
- _rootDocTimeoutLength : 30 * 1000
|