feat: add new hook filteR:topics.getSortedTids

to let plugins replace the logic used to retrieve tids
v1.18.x
Baris Usakli 5 years ago
parent 95ab071254
commit b93c826d35

@ -25,6 +25,8 @@ module.exports = function (Topics) {
params.cids = [params.cids]; params.cids = [params.cids];
} }
data.tids = await getTids(params); data.tids = await getTids(params);
data.tids = await sortTids(data.tids, params);
data.tids = await filterTids(data.tids.slice(0, 200), params);
data.topicCount = data.tids.length; data.topicCount = data.tids.length;
data.topics = await getTopics(data.tids, params); data.topics = await getTopics(data.tids, params);
data.nextStart = params.stop + 1; data.nextStart = params.stop + 1;
@ -32,6 +34,10 @@ module.exports = function (Topics) {
}; };
async function getTids(params) { async function getTids(params) {
if (plugins.hasListeners('filter:topics.getSortedTids')) {
const result = await plugins.fireHook('filter:topics.getSortedTids', { params: params, tids: [] });
return result.tids;
}
let tids = []; let tids = [];
if (params.term !== 'alltime') { if (params.term !== 'alltime') {
tids = await Topics.getLatestTidsFromSet('topics:tid', 0, -1, params.term); tids = await Topics.getLatestTidsFromSet('topics:tid', 0, -1, params.term);
@ -45,10 +51,8 @@ module.exports = function (Topics) {
} else { } else {
tids = await db.getSortedSetRevRange('topics:' + params.sort, 0, 199); tids = await db.getSortedSetRevRange('topics:' + params.sort, 0, 199);
} }
if (params.term !== 'alltime' || params.cids || params.filter === 'watched' || params.floatPinned) {
tids = await sortTids(tids, params); return tids;
}
return await filterTids(tids.slice(0, 200), params);
} }
async function getCidTids(params) { async function getCidTids(params) {
@ -70,6 +74,9 @@ module.exports = function (Topics) {
} }
async function sortTids(tids, params) { async function sortTids(tids, params) {
if (params.term === 'alltime' && !params.cids && params.filter !== 'watched' && !params.floatPinned) {
return;
}
const topicData = await Topics.getTopicsFields(tids, ['tid', 'lastposttime', 'upvotes', 'downvotes', 'postcount', 'pinned']); const topicData = await Topics.getTopicsFields(tids, ['tid', 'lastposttime', 'upvotes', 'downvotes', 'postcount', 'pinned']);
let sortFn = sortRecent; let sortFn = sortRecent;
if (params.sort === 'posts') { if (params.sort === 'posts') {

Loading…
Cancel
Save