Merge pull request #244 from sharelatex/add-fast-path-to-pdf

Add fast path to pdf
This commit is contained in:
Brian Gough 2016-05-13 13:25:49 +01:00
commit 40464fe5b5
3 changed files with 44 additions and 13 deletions

View file

@ -93,7 +93,12 @@ module.exports = CompileController =
getFileFromClsi: (req, res, next = (error) ->) -> getFileFromClsi: (req, res, next = (error) ->) ->
project_id = req.params.Project_id project_id = req.params.Project_id
CompileController.proxyToClsi(project_id, "/project/#{project_id}/output/#{req.params.file}", req, res, next) build = req.params.build
if build?
url = "/project/#{project_id}/build/#{build}/output/#{req.params.file}"
else
url = "/project/#{project_id}/output/#{req.params.file}"
CompileController.proxyToClsi(project_id, url, req, res, next)
proxySync: (req, res, next = (error) ->) -> proxySync: (req, res, next = (error) ->) ->
CompileController.proxyToClsi(req.params.Project_id, req.url, req, res, next) CompileController.proxyToClsi(req.params.Project_id, req.url, req, res, next)

View file

@ -113,6 +113,17 @@ module.exports = class Router
req.params = params req.params = params
next() next()
), AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.getFileFromClsi ), AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.getFileFromClsi
# direct url access to output files for a specific build (query string not required)
webRouter.get /^\/project\/([^\/]*)\/build\/([0-9a-f-]+)\/output\/(.*)$/,
((req, res, next) ->
params =
"Project_id": req.params[0]
"build": req.params[1]
"file": req.params[2]
req.params = params
next()
), AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.getFileFromClsi
webRouter.delete "/project/:Project_id/output", AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.deleteAuxFiles webRouter.delete "/project/:Project_id/output", AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.deleteAuxFiles
webRouter.get "/project/:Project_id/sync/code", AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.proxySync webRouter.get "/project/:Project_id/sync/code", AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.proxySync
webRouter.get "/project/:Project_id/sync/pdf", AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.proxySync webRouter.get "/project/:Project_id/sync/pdf", AuthorizationMiddlewear.ensureUserCanReadProject, CompileController.proxySync

View file

@ -69,20 +69,28 @@ define [
else if response.status == "success" else if response.status == "success"
$scope.pdf.view = 'pdf' $scope.pdf.view = 'pdf'
$scope.shouldShowLogs = false $scope.shouldShowLogs = false
# define the base url
$scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf?cache_bust=#{Date.now()}"
# add a query string parameter for the compile group
if response.compileGroup?
$scope.pdf.compileGroup = response.compileGroup
$scope.pdf.url = $scope.pdf.url + "&compileGroup=#{$scope.pdf.compileGroup}"
# make a cache to look up files by name # make a cache to look up files by name
fileByPath = {} fileByPath = {}
for file in response.outputFiles for file in response.outputFiles
fileByPath[file.path] = file fileByPath[file.path] = file
# if the pdf file has a build number, pass it to the clsi # prepare query string
qs = {}
# define the base url. if the pdf file has a build number, pass it to the clsi in the url
if fileByPath['output.pdf']?.build? if fileByPath['output.pdf']?.build?
build = fileByPath['output.pdf'].build build = fileByPath['output.pdf'].build
$scope.pdf.url = $scope.pdf.url + "&build=#{build}" $scope.pdf.url = "/project/#{$scope.project_id}/build/#{build}/output/output.pdf"
# no need to bust cache, build id is unique
else
$scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf"
qs = { cache_bust : "#{Date.now()}" }
# add a query string parameter for the compile group
if response.compileGroup?
$scope.pdf.compileGroup = response.compileGroup
qs.compileGroup = "#{$scope.pdf.compileGroup}"
# convert the qs hash into a query string and append it
qs_args = ("#{k}=#{v}" for k, v of qs)
$scope.pdf.qs = if qs_args.length then "?" + qs_args.join("&") else ""
$scope.pdf.url += $scope.pdf.qs
fetchLogs(fileByPath['output.log']) fetchLogs(fileByPath['output.log'])
@ -101,8 +109,11 @@ define [
$scope.pdf.outputFiles.push file $scope.pdf.outputFiles.push file
fetchLogs = (outputFile) -> fetchLogs = (outputFile) ->
qs = if outputFile?.build? then "?build=#{outputFile.build}" else "" if outputFile?.build?
$http.get "/project/#{$scope.project_id}/output/output.log" + qs logUrl = "/project/#{$scope.project_id}/build/#{outputFile.build}/output/output.log"
else
logUrl = "/project/#{$scope.project_id}/output/output.log"
$http.get logUrl
.success (log) -> .success (log) ->
#console.log ">>", log #console.log ">>", log
$scope.pdf.rawLog = log $scope.pdf.rawLog = log
@ -124,8 +135,12 @@ define [
type: if entry.level == "error" then "error" else "warning" type: if entry.level == "error" then "error" else "warning"
text: entry.message text: entry.message
} }
# Get the biber log and parse it too # Get the biber log and parse it
$http.get "/project/#{$scope.project_id}/output/output.blg" + qs if outputFile?.build?
biberLogUrl = "/project/#{$scope.project_id}/build/#{outputFile.build}/output/output.blg"
else
biberLogUrl = "/project/#{$scope.project_id}/output/output.blg"
$http.get biberLogUrl
.success (log) -> .success (log) ->
window._s = $scope window._s = $scope
biberLogEntries = BibLogParser.parse(log, {}) biberLogEntries = BibLogParser.parse(log, {})