Merge branch 'master' of github.com:designcreateplay/NodeBB

v1.18.x
Julian Lam 11 years ago
commit 0668556d4f

@ -8,9 +8,13 @@
XRegExp = require('xregexp').XRegExp; XRegExp = require('xregexp').XRegExp;
process.profile = function(operation, start) { process.profile = function(operation, start) {
console.log('%s took %d milliseconds', process.elapsedTimeSince(start));
};
process.elapsedTimeSince = function(start) {
var diff = process.hrtime(start); var diff = process.hrtime(start);
console.log('%s took %d milliseconds', operation, diff[0] * 1e3 + diff[1] / 1e6); return diff[0] * 1e3 + diff[1] / 1e6;
} };
} else { } else {
XRegExp = window.XRegExp; XRegExp = window.XRegExp;

@ -87,11 +87,10 @@ Controllers.home = function(req, res, next) {
}; };
Controllers.search = function(req, res, next) { Controllers.search = function(req, res, next) {
var start = process.hrtime();
if (!req.params.term) { if (!req.params.term) {
return res.render('search', { return res.render('search', {
show_no_topics: 'hide',
show_no_posts: 'hide',
show_results: 'hide',
search_query: '', search_query: '',
posts: [], posts: [],
topics: [] topics: []
@ -102,51 +101,49 @@ Controllers.search = function(req, res, next) {
return res.redirect('/404'); return res.redirect('/404');
} }
function searchPosts(callback) { function search(index, callback) {
plugins.fireHook('filter:search.query', { plugins.fireHook('filter:search.query', {
index: 'post', index: index,
query: req.params.term query: req.params.term
}, function(err, pids) { }, callback);
if (err) {
return callback(err);
} }
posts.getPostSummaryByPids(pids, false, callback); async.parallel({
}); pids: function(next) {
search('post', next);
},
tids: function(next) {
search('topic', next);
} }
}, function (err, results) {
function searchTopics(callback) {
plugins.fireHook('filter:search.query', {
index: 'topic',
query: req.params.term
}, function(err, tids) {
if (err) { if (err) {
return callback(err); return next(err);
} }
topics.getTopicsByTids(tids, 0, callback); if(!results) {
}); results = {pids:[], tids: []};
} }
async.parallel([searchPosts, searchTopics], function (err, results) { async.parallel({
posts: function(next) {
posts.getPostSummaryByPids(results.pids, false, next);
},
topics: function(next) {
topics.getTopicsByTids(results.tids, 0, next);
}
}, function(err, results) {
if (err) { if (err) {
return next(err); return next(err);
} }
if(!results) {
results = [];
results[0] = results[1] = [];
}
return res.render('search', { return res.render('search', {
show_no_topics: results[1].length ? 'hide' : '', time: process.elapsedTimeSince(start),
show_no_posts: results[0].length ? 'hide' : '',
show_results: '',
search_query: req.params.term, search_query: req.params.term,
posts: results[0], posts: results.posts,
topics: results[1], topics: results.topics,
post_matches : results[0].length, post_matches : results.posts.length,
topic_matches : results[1].length topic_matches : results.topics.length
});
}); });
}); });
}; };

@ -296,8 +296,12 @@ SocketPosts.loadMoreUserPosts = function(socket, data, callback) {
}; };
SocketPosts.getRecentPosts = function(socket, term, callback) { SocketPosts.getRecentPosts = function(socket, data, callback) {
posts.getRecentPosts(socket.uid, 0, 19, term, callback); if(!data || !data.count) {
return callback(new Error('invalid data'));
}
posts.getRecentPosts(socket.uid, 0, data.count - 1, data.term, callback);
}; };

@ -737,8 +737,7 @@ var async = require('async'),
userCache[topicData.uid] = topicInfo.user; userCache[topicData.uid] = topicInfo.user;
if (!isTopicVisible(topicData, topicInfo)) { if (!isTopicVisible(topicData, topicInfo)) {
topicData = null; return next(null, null);
return next();
} }
topicData.pinned = parseInt(topicData.pinned, 10) === 1; topicData.pinned = parseInt(topicData.pinned, 10) === 1;
@ -751,7 +750,7 @@ var async = require('async'),
topicData.teaser = topicInfo.teaser; topicData.teaser = topicInfo.teaser;
topicData.user = topicInfo.user; topicData.user = topicInfo.user;
next(); next(null, topicData);
}); });
} }
@ -760,7 +759,7 @@ var async = require('async'),
return callback(err); return callback(err);
} }
async.eachSeries(topics, loadTopicInfo, function(err) { async.mapSeries(topics, loadTopicInfo, function(err, topics) {
if(err) { if(err) {
return callback(err); return callback(err);
} }

Loading…
Cancel
Save