From 20757b11b8df3f288a79d144607909514e4f19af Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 15 Jan 2016 14:41:05 +0000 Subject: [PATCH] Add code to automatically index bib files on project load. --- .../Features/Project/ProjectController.coffee | 6 ++-- .../ReferencesSearchHandler.coffee | 34 +++++++++++++++---- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee index a8dfc65ab2..540e460953 100644 --- a/services/web/app/coffee/Features/Project/ProjectController.coffee +++ b/services/web/app/coffee/Features/Project/ProjectController.coffee @@ -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', diff --git a/services/web/app/coffee/Features/ReferencesSearch/ReferencesSearchHandler.coffee b/services/web/app/coffee/Features/ReferencesSearch/ReferencesSearchHandler.coffee index d7fa5b8f14..0464fc2274 100644 --- a/services/web/app/coffee/Features/ReferencesSearch/ReferencesSearchHandler.coffee +++ b/services/web/app/coffee/Features/ReferencesSearch/ReferencesSearchHandler.coffee @@ -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"