diff --git a/src/controllers/topics.js b/src/controllers/topics.js index 02544c7409..7eeb463d89 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -126,7 +126,7 @@ topicsController.get = async function getTopic(req, res, next) { buildBreadcrumbs(topicData), addOldCategory(topicData, userPrivileges), addTags(topicData, req, res, currentPage), - incrementViewCount(req, tid), + topics.increaseViewCount(req, tid), markAsRead(req, tid), analytics.increment([`pageviews:byCid:${topicData.category.cid}`]), ]); @@ -164,19 +164,6 @@ function calculateStartStop(page, postIndex, settings) { return { start: Math.max(0, start), stop: Math.max(0, stop) }; } -async function incrementViewCount(req, tid) { - const allow = req.uid > 0 || (meta.config.guestsIncrementTopicViews && req.uid === 0); - if (allow) { - req.session.tids_viewed = req.session.tids_viewed || {}; - const now = Date.now(); - const interval = meta.config.incrementTopicViewsInterval * 60000; - if (!req.session.tids_viewed[tid] || req.session.tids_viewed[tid] < now - interval) { - await topics.increaseViewCount(tid); - req.session.tids_viewed[tid] = now; - } - } -} - async function markAsRead(req, tid) { if (req.loggedIn) { const markedRead = await topics.markAsRead([tid], req.uid); diff --git a/src/topics/posts.js b/src/topics/posts.js index eb7b51bfc0..603bc465b9 100644 --- a/src/topics/posts.js +++ b/src/topics/posts.js @@ -296,13 +296,22 @@ module.exports = function (Topics) { incrementFieldAndUpdateSortedSet(tid, 'postcount', -1, 'topics:posts'); }; - Topics.increaseViewCount = async function (tid) { - const cid = await Topics.getTopicField(tid, 'cid'); - incrementFieldAndUpdateSortedSet(tid, 'viewcount', 1, ['topics:views', `cid:${cid}:tids:views`]); + Topics.increaseViewCount = async function (req, tid) { + const allow = req.uid > 0 || (meta.config.guestsIncrementTopicViews && req.uid === 0); + if (allow) { + req.session.tids_viewed = req.session.tids_viewed || {}; + const now = Date.now(); + const interval = meta.config.incrementTopicViewsInterval * 60000; + if (!req.session.tids_viewed[tid] || req.session.tids_viewed[tid] < now - interval) { + const cid = await Topics.getTopicField(tid, 'cid'); + incrementFieldAndUpdateSortedSet(tid, 'viewcount', 1, ['topics:views', `cid:${cid}:tids:views`]); + req.session.tids_viewed[tid] = now; + } + } }; async function incrementFieldAndUpdateSortedSet(tid, field, by, set) { - const value = await db.incrObjectFieldBy(`topic:${tid}`, field, by); + const value = await db.incrObjectFieldBy(`${activitypub.helpers.isUri(tid) ? 'topicRemote' : 'topic'}:${tid}`, field, by); await db[Array.isArray(set) ? 'sortedSetsAdd' : 'sortedSetAdd'](set, value, tid); }