mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-07 22:45:46 +01:00
use lodash, load 3 posts per iteration
This commit is contained in:
@@ -248,35 +248,33 @@ module.exports = function (Topics) {
|
|||||||
if (!params.blockedUids.length) {
|
if (!params.blockedUids.length) {
|
||||||
return setImmediate(callback, null, params.tids);
|
return setImmediate(callback, null, params.tids);
|
||||||
}
|
}
|
||||||
params.topicScores = {};
|
const topicScores = _.mapValues(_.keyBy(params.recentTids, 'value'), 'score');
|
||||||
params.recentTids.forEach(function (topic) {
|
|
||||||
params.topicScores[topic.value] = topic.score;
|
|
||||||
});
|
|
||||||
|
|
||||||
db.sortedSetScores('uid:' + params.uid + ':tids_read', params.tids, function (err, userScores) {
|
db.sortedSetScores('uid:' + params.uid + ':tids_read', params.tids, function (err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
params.userScores = {};
|
const userScores = _.zipObject(params.tids, results);
|
||||||
userScores.forEach(function (score, index) {
|
|
||||||
params.userScores[params.tids[index]] = score;
|
|
||||||
});
|
|
||||||
async.filter(params.tids, function (tid, next) {
|
async.filter(params.tids, function (tid, next) {
|
||||||
doesTidHaveUnblockedUnreadPosts(tid, params, next);
|
doesTidHaveUnblockedUnreadPosts(tid, {
|
||||||
|
blockedUids: params.blockedUids,
|
||||||
|
topicTimestamp: topicScores[tid],
|
||||||
|
userLastReadTimestamp: userScores[tid],
|
||||||
|
}, next);
|
||||||
}, callback);
|
}, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function doesTidHaveUnblockedUnreadPosts(tid, params, callback) {
|
function doesTidHaveUnblockedUnreadPosts(tid, params, callback) {
|
||||||
var topicTimestamp = params.topicScores[tid];
|
var userLastReadTimestamp = params.userLastReadTimestamp;
|
||||||
var userLastReadTimestamp = params.userScores[tid];
|
|
||||||
if (!userLastReadTimestamp) {
|
if (!userLastReadTimestamp) {
|
||||||
return setImmediate(callback, null, true);
|
return setImmediate(callback, null, true);
|
||||||
}
|
}
|
||||||
var start = 0;
|
var start = 0;
|
||||||
var count = 5;
|
var count = 3;
|
||||||
var done = false;
|
var done = false;
|
||||||
var hasUnblockedUnread = topicTimestamp > userLastReadTimestamp;
|
var hasUnblockedUnread = params.topicTimestamp > userLastReadTimestamp;
|
||||||
|
|
||||||
async.whilst(function () {
|
async.whilst(function () {
|
||||||
return !done;
|
return !done;
|
||||||
@@ -469,14 +467,7 @@ module.exports = function (Topics) {
|
|||||||
var read = !results.tids_unread[index] &&
|
var read = !results.tids_unread[index] &&
|
||||||
(results.topicScores[index] < cutoff ||
|
(results.topicScores[index] < cutoff ||
|
||||||
!!(results.userScores[index] && results.userScores[index] >= results.topicScores[index]));
|
!!(results.userScores[index] && results.userScores[index] >= results.topicScores[index]));
|
||||||
return { tid: tid, read: read };
|
return { tid: tid, read: read, index: index };
|
||||||
});
|
|
||||||
|
|
||||||
var topicScores = {};
|
|
||||||
var userScores = {};
|
|
||||||
tids.forEach(function (tid, index) {
|
|
||||||
topicScores[tid] = results.topicScores[index];
|
|
||||||
userScores[tid] = results.userScores[index];
|
|
||||||
});
|
});
|
||||||
|
|
||||||
async.map(result, function (data, next) {
|
async.map(result, function (data, next) {
|
||||||
@@ -484,8 +475,8 @@ module.exports = function (Topics) {
|
|||||||
return next(null, true);
|
return next(null, true);
|
||||||
}
|
}
|
||||||
doesTidHaveUnblockedUnreadPosts(data.tid, {
|
doesTidHaveUnblockedUnreadPosts(data.tid, {
|
||||||
topicScores: topicScores,
|
topicTimestamp: results.topicScores[data.index],
|
||||||
userScores: userScores,
|
userLastReadTimestamp: results.userScores[data.index],
|
||||||
blockedUids: results.blockedUids,
|
blockedUids: results.blockedUids,
|
||||||
}, function (err, hasUnblockedUnread) {
|
}, function (err, hasUnblockedUnread) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user