Add code to automatically index bib files on project load.

This commit is contained in:
Shane Kilkelly 2016-01-15 14:41:05 +00:00
parent b49ed15c14
commit 20757b11b8
2 changed files with 30 additions and 10 deletions

View file

@ -218,10 +218,8 @@ 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
# HACK: don't do it for now
# ReferencesSearchHandler.indexProjectReferences project, -> # don't need to wait on this
logger.log project_id:project_id, "rendering editor page"
res.render 'project/editor',

View file

@ -3,6 +3,7 @@ request = require("request")
settings = require("settings-sharelatex")
ProjectLocator = require("../Project/ProjectLocator")
U = require('underscore')
Async = require('async')
oneMinInMs = 60 * 1000
fiveMinsInMs = oneMinInMs * 5
@ -10,13 +11,34 @@ fiveMinsInMs = oneMinInMs * 5
module.exports = ReferencesSearchHandler =
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) ->
_findBibDocIds: (project) ->
ids = []
_process = (folder) ->
folder.docs.forEach (doc) ->
if doc?.name?.match(/^.*\.bib$/)
ids.push(doc._id)
folder.folders.forEach (folder) ->
_process(folder)
project.rootFolder.forEach (rootFolder) ->
_process(rootFolder)
return ids
indexProjectReferences: (project, callback = (err) ->) ->
logger.log {projectId: project._id}, "try indexing references from project"
ids = ReferencesSearchHandler._findBibDocIds(project)
logger.log {projectId: project._id, count: ids.length}, "found bib files in project"
Async.eachSeries(
ids,
(docId, next) ->
ReferencesSearchHandler.indexFile project._id, docId, (err) ->
next(err)
, (err) ->
logger.log {projectId: project._id, count: ids.length}, "done index bib files in project"
callback(err)
)
indexFile: (project_id, file_id, callback = (err)->) ->
logger.log {project_id, file_id}, "sending index request to references api"