From 4a7111d042968cb008be6b438020e50d1ed712ca Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 1 Apr 2025 14:40:58 -0400 Subject: [PATCH] fix: marking remote category topics as read --- public/src/client/unread.js | 2 +- src/socket.io/topics/unread.js | 5 +++++ src/topics/unread.js | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/public/src/client/unread.js b/public/src/client/unread.js index 65d5e75d6d..c2e8903127 100644 --- a/public/src/client/unread.js +++ b/public/src/client/unread.js @@ -68,7 +68,7 @@ define('forum/unread', [ markAllRead(); } else if (category.cid === 'selected') { markSelectedRead(); - } else if (parseInt(category.cid, 10) > 0) { + } else if (category.cid) { markCategoryRead(category.cid); } }, diff --git a/src/socket.io/topics/unread.js b/src/socket.io/topics/unread.js index e32ee59450..360e3feaa6 100644 --- a/src/socket.io/topics/unread.js +++ b/src/socket.io/topics/unread.js @@ -1,6 +1,7 @@ 'use strict'; const topics = require('../../topics'); +const categories = require('../../categories'); const api = require('../../api'); const sockets = require('..'); @@ -32,6 +33,10 @@ module.exports = function (SocketTopics) { }; SocketTopics.markCategoryTopicsRead = async function (socket, cid) { + const exists = await categories.exists(cid); + if (!exists) { + throw new Error('[[error:invalid-cid]]'); + } const tids = await topics.getUnreadTids({ cid: cid, uid: socket.uid, filter: '' }); await SocketTopics.markAsRead(socket, tids); }; diff --git a/src/topics/unread.js b/src/topics/unread.js index 724d3dd5f8..7910bca77a 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -148,7 +148,7 @@ module.exports = function (Topics) { const categoryWatchState = await categories.getWatchState(topicCids, params.uid); const userCidState = _.zipObject(topicCids, categoryWatchState); - const filterCids = params.cid && params.cid.map(cid => parseInt(cid, 10)); + const filterCids = params.cid && params.cid.map(cid => utils.isNumber(cid) ? parseInt(cid, 10) : cid); const filterTags = params.tag && params.tag.map(tag => String(tag)); topicData.forEach((topic) => {