| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- logger = require "logger-sharelatex"
- Metrics = require "metrics-sharelatex"
- Project = require("../../models/Project").Project
- ProjectZipStreamManager = require "./ProjectZipStreamManager"
- DocumentUpdaterHandler = require "../DocumentUpdater/DocumentUpdaterHandler"
- module.exports = ProjectDownloadsController =
- downloadProject: (req, res, next) ->
- project_id = req.params.Project_id
- Metrics.inc "zip-downloads"
- logger.log project_id: project_id, "downloading project"
- DocumentUpdaterHandler.flushProjectToMongo project_id, (error)->
- return next(error) if error?
- Project.findById project_id, "name", (error, project) ->
- return next(error) if error?
- ProjectZipStreamManager.createZipStreamForProject project_id, (error, stream) ->
- return next(error) if error?
- res.header(
- "Content-Disposition",
- "attachment; filename=#{encodeURIComponent(project.name)}.zip"
- )
- res.contentType('application/zip')
- stream.pipe(res)
- downloadMultipleProjects: (req, res, next) ->
- project_ids = req.query.project_ids.split(",")
- Metrics.inc "zip-downloads-multiple"
- logger.log project_ids: project_ids, "downloading multiple projects"
- DocumentUpdaterHandler.flushMultipleProjectsToMongo project_ids, (error) ->
- return next(error) if error?
- ProjectZipStreamManager.createZipStreamForMultipleProjects project_ids, (error, stream) ->
- return next(error) if error?
- res.header(
- "Content-Disposition",
- "attachment; filename=ShareLaTeX Projects (#{project_ids.length} items).zip"
- )
- res.contentType('application/zip')
- stream.pipe(res)
|