mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-09 19:39:06 +00:00
Begin work on indexing the references when project is opened.
This commit is contained in:
parent
6244d013af
commit
ca0a625dcc
6 changed files with 43 additions and 22 deletions
|
@ -16,6 +16,8 @@ SecurityManager = require("../../managers/SecurityManager")
|
|||
fs = require "fs"
|
||||
InactiveProjectManager = require("../InactiveData/InactiveProjectManager")
|
||||
ProjectUpdateHandler = require("./ProjectUpdateHandler")
|
||||
ReferencesSearchHandler = require("../ReferencesSearch/ReferencesSearchHandler")
|
||||
|
||||
|
||||
module.exports = ProjectController =
|
||||
|
||||
|
@ -168,15 +170,15 @@ module.exports = ProjectController =
|
|||
return res.render("general/closed", {title:"updating_site"})
|
||||
|
||||
if req.session.user?
|
||||
user_id = req.session.user._id
|
||||
user_id = req.session.user._id
|
||||
anonymous = false
|
||||
else
|
||||
anonymous = true
|
||||
user_id = 'openUser'
|
||||
|
||||
|
||||
project_id = req.params.Project_id
|
||||
logger.log project_id:project_id, "loading editor"
|
||||
|
||||
|
||||
async.parallel {
|
||||
project: (cb)->
|
||||
Project.findPopulatedById project_id, cb
|
||||
|
@ -193,7 +195,7 @@ module.exports = ProjectController =
|
|||
SubscriptionLocator.getUsersSubscription user_id, cb
|
||||
activate: (cb)->
|
||||
InactiveProjectManager.reactivateProjectIfRequired project_id, cb
|
||||
markAsOpened: (cb)->
|
||||
markAsOpened: (cb)->
|
||||
#don't need to wait for this to complete
|
||||
ProjectUpdateHandler.markAsOpened project_id, ->
|
||||
cb()
|
||||
|
@ -205,6 +207,7 @@ module.exports = ProjectController =
|
|||
user = results.user
|
||||
subscription = results.subscription
|
||||
|
||||
|
||||
daysSinceLastUpdated = (new Date() - project.lastUpdated) /86400000
|
||||
logger.log project_id:project_id, daysSinceLastUpdated:daysSinceLastUpdated, "got db results for loading editor"
|
||||
|
||||
|
@ -214,6 +217,12 @@ module.exports = ProjectController =
|
|||
|
||||
if subscription? and subscription.freeTrial? and subscription.freeTrial.expiresAt?
|
||||
allowedFreeTrial = !!subscription.freeTrial.allowed || true
|
||||
|
||||
# TODO: need to search for all docs in project
|
||||
rootDocs = project?.rootFolder?[0]?.docs
|
||||
if rootDocs
|
||||
ReferencesSearchHandler.indexProjectReferences project_id, rootDocs -> # don't need to wait on this
|
||||
|
||||
logger.log project_id:project_id, "rendering editor page"
|
||||
res.render 'project/editor',
|
||||
title: project.name
|
||||
|
@ -311,4 +320,3 @@ do generateThemeList = () ->
|
|||
if file.slice(-2) == "js" and file.match(/^theme-/)
|
||||
cleanName = file.slice(0,-3).slice(6)
|
||||
THEME_LIST.push cleanName
|
||||
|
||||
|
|
|
@ -21,8 +21,7 @@ module.exports = ReferencesSearchController =
|
|||
if err?
|
||||
logger.err {err, project_id, doc_id}, "error finding doc to index"
|
||||
return res.send 500
|
||||
doc_url = ReferencesSearchController._buildDocUrl project_id, doc_id
|
||||
ReferencesSearchHandler.indexFile project_id, doc_url, (err) ->
|
||||
ReferencesSearchHandler.indexFile project_id, doc_id, (err) ->
|
||||
if err
|
||||
logger.err {err, project_id, doc_id}, "error indexing references file"
|
||||
return res.send 500
|
||||
|
@ -37,6 +36,3 @@ module.exports = ReferencesSearchController =
|
|||
logger.err {err, project_id}, "error getting references keys"
|
||||
return res.send 500
|
||||
return res.json data
|
||||
|
||||
_buildDocUrl: (project_id, doc_id) ->
|
||||
"#{settings.apis.web.url}/project/#{project_id}/doc/#{doc_id}"
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
logger = require("logger-sharelatex")
|
||||
request = require("request")
|
||||
settings = require("settings-sharelatex")
|
||||
ProjectLocator = require("../Project/ProjectLocator")
|
||||
U = require('underscore')
|
||||
|
||||
oneMinInMs = 60 * 1000
|
||||
fiveMinsInMs = oneMinInMs * 5
|
||||
|
@ -8,11 +10,20 @@ fiveMinsInMs = oneMinInMs * 5
|
|||
|
||||
module.exports = ReferencesSearchHandler =
|
||||
|
||||
indexFile: (project_id, file_url, callback = (err)->) ->
|
||||
logger.log {project_id, file_url}, "sending index request to references api"
|
||||
url = "#{settings.apis.references.url}/project/#{project_id}"
|
||||
indexProjectReferences: (project_id, docs, callback = (err) ->) ->
|
||||
logger.log {project_id}, "try indexing references from project"
|
||||
bibDocs = U.filter(docs, (doc) -> doc?.name?.match(/^.*\.bib$/))
|
||||
if bibDocs and bibDocs.length == 1 # presume we'll only get either one or zero bib files
|
||||
doc = bibDocs[0]
|
||||
ReferencesSearchHandler.indexFile project_id, doc._id, (err) ->
|
||||
callback(err)
|
||||
|
||||
indexFile: (project_id, file_id, callback = (err)->) ->
|
||||
logger.log {project_id, file_id}, "sending index request to references api"
|
||||
target_url = "#{settings.apis.references.url}/project/#{project_id}"
|
||||
file_url = ReferencesSearchHandler._buildDocUrl project_id, file_id
|
||||
request.post {
|
||||
url: url
|
||||
url: target_url
|
||||
json:
|
||||
referencesUrl: file_url
|
||||
}, (err, res, result) ->
|
||||
|
@ -40,3 +51,6 @@ module.exports = ReferencesSearchHandler =
|
|||
err = new Error("references api responded with non-success code: #{res.statusCode}")
|
||||
logger.log {err, project_id}, "error getting references keys"
|
||||
return callback(err)
|
||||
|
||||
_buildDocUrl: (project_id, doc_id) ->
|
||||
"#{settings.apis.web.url}/project/#{project_id}/doc/#{doc_id}"
|
||||
|
|
|
@ -46,6 +46,8 @@ describe "ProjectController", ->
|
|||
reactivateProjectIfRequired:sinon.stub()
|
||||
@ProjectUpdateHandler =
|
||||
markAsOpened: sinon.stub()
|
||||
@ReferencesSearchHandler =
|
||||
indexProjectReferences: sinon.stub()
|
||||
@ProjectController = SandboxedModule.require modulePath, requires:
|
||||
"settings-sharelatex":@settings
|
||||
"logger-sharelatex":
|
||||
|
@ -63,6 +65,7 @@ describe "ProjectController", ->
|
|||
"../../managers/SecurityManager":@SecurityManager
|
||||
"../InactiveData/InactiveProjectManager":@InactiveProjectManager
|
||||
"./ProjectUpdateHandler":@ProjectUpdateHandler
|
||||
"../ReferencesSearch/ReferencesSearchHandler": @ReferencesSearchHandler
|
||||
|
||||
@user =
|
||||
_id:"!£123213kjljkl"
|
||||
|
|
|
@ -110,9 +110,8 @@ describe "ReferencesSearchController", ->
|
|||
it 'should call ReferencesSearchHandler.indexFile', (done) ->
|
||||
@res.send = (status) =>
|
||||
@ReferencesSearchHandler.indexFile.calledOnce.should.equal true
|
||||
expected_url = "http://some.url/project/2222/doc/3333"
|
||||
@ReferencesSearchHandler.indexFile
|
||||
.calledWith(@project_id, expected_url).should.equal true
|
||||
.calledWith(@project_id, @doc_id).should.equal true
|
||||
done()
|
||||
@controller.indexFile(@req, @res)
|
||||
|
||||
|
@ -162,9 +161,8 @@ describe "ReferencesSearchController", ->
|
|||
it 'should call ReferencesSearchHandler.indexFile', (done) ->
|
||||
@res.send = (status) =>
|
||||
@ReferencesSearchHandler.indexFile.calledOnce.should.equal true
|
||||
expected_url = "http://some.url/project/2222/doc/3333"
|
||||
@ReferencesSearchHandler.indexFile
|
||||
.calledWith(@project_id, expected_url).should.equal true
|
||||
.calledWith(@project_id, @doc_id).should.equal true
|
||||
done()
|
||||
@controller.indexFile(@req, @res)
|
||||
|
||||
|
|
|
@ -9,14 +9,16 @@ describe 'ReferencesSearchHandler', ->
|
|||
|
||||
beforeEach ->
|
||||
@project_id = '222'
|
||||
@file_url = 'http://example.com/some/file'
|
||||
@file_id = '111111'
|
||||
@handler = SandboxedModule.require modulePath, requires:
|
||||
'logger-sharelatex': {
|
||||
log: ->
|
||||
err: ->
|
||||
}
|
||||
'settings-sharelatex': @settings = {
|
||||
apis: {references: {url: 'http://some.url'}}
|
||||
apis:
|
||||
references: {url: 'http://some.url'}
|
||||
web: {url: 'http://some.url'}
|
||||
}
|
||||
'request': @request = {
|
||||
get: sinon.stub()
|
||||
|
@ -30,7 +32,7 @@ describe 'ReferencesSearchHandler', ->
|
|||
@request.post.callsArgWith(1, null, {statusCode: 201}, {})
|
||||
|
||||
it 'should not produce an error', (done) ->
|
||||
@handler.indexFile @project_id, @file_url, (err) =>
|
||||
@handler.indexFile @project_id, @file_id, (err) =>
|
||||
expect(err).to.equal null
|
||||
done()
|
||||
|
||||
|
@ -39,7 +41,7 @@ describe 'ReferencesSearchHandler', ->
|
|||
@request.post.callsArgWith(1, null, {statusCode: 500}, {})
|
||||
|
||||
it 'should produce an error', (done) ->
|
||||
@handler.indexFile @project_id, @file_url, (err) =>
|
||||
@handler.indexFile @project_id, @file_id, (err) =>
|
||||
expect(err).to.not.equal null
|
||||
done()
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue