diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index df20a6d657..c07e6410c1 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -34,7 +34,10 @@ SocketTopics.bookmark = async function (socket, data) { } const postcount = await topics.getTopicField(data.tid, 'postcount'); if (data.index > meta.config.bookmarkThreshold && postcount > meta.config.bookmarkThreshold) { - await topics.setUserBookmark(data.tid, socket.uid, data.index); + const currentIndex = await db.sortedSetScore(`tid:${data.tid}:bookmarks`, socket.uid); + if (!currentIndex || data.index > currentIndex) { + await topics.setUserBookmark(data.tid, socket.uid, data.index); + } } }; diff --git a/src/socket.io/topics/unread.js b/src/socket.io/topics/unread.js index 238ef89b7f..cd93169983 100644 --- a/src/socket.io/topics/unread.js +++ b/src/socket.io/topics/unread.js @@ -54,7 +54,6 @@ module.exports = function (SocketTopics) { throw new Error('[[error:no-privileges]]'); } const isAdmin = await user.isAdministrator(socket.uid); - const now = Date.now(); await Promise.all(tids.map(async (tid) => { const topicData = await topics.getTopicFields(tid, ['tid', 'cid']); if (!topicData.tid) { @@ -65,9 +64,6 @@ module.exports = function (SocketTopics) { throw new Error('[[error:no-privileges]]'); } await topics.markAsUnreadForAll(tid); - await topics.updateRecent(tid, now); - await db.sortedSetAdd(`cid:${topicData.cid}:tids:lastposttime`, now, tid); - await topics.setTopicField(tid, 'lastposttime', now); })); topics.pushUnreadCount(socket.uid); }; diff --git a/src/topics/bookmarks.js b/src/topics/bookmarks.js index 7c0ad567cc..e7d52f84ae 100644 --- a/src/topics/bookmarks.js +++ b/src/topics/bookmarks.js @@ -25,10 +25,7 @@ module.exports = function (Topics) { if (parseInt(uid, 10) <= 0) { return; } - const currentIndex = await db.sortedSetScore(`tid:${tid}:bookmarks`, uid); - if (!currentIndex || index > currentIndex) { - await db.sortedSetAdd(`tid:${tid}:bookmarks`, index, uid); - } + await db.sortedSetAdd(`tid:${tid}:bookmarks`, index, uid); }; Topics.getTopicBookmarks = async function (tid) { diff --git a/src/topics/create.js b/src/topics/create.js index a6d63d53dd..fe0d710bed 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -213,7 +213,7 @@ module.exports = function (Topics) { async function onNewPost(postData, data) { const { tid } = postData; const { uid } = postData; - await Topics.markAsUnreadForAll(tid); + await Topics.markCategoryUnreadForAll(tid); await Topics.markAsRead([tid], uid); const [ userInfo, diff --git a/src/topics/unread.js b/src/topics/unread.js index f0ab2a5c36..ff07c3c5a8 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -260,7 +260,12 @@ module.exports = function (Topics) { }; Topics.markAsUnreadForAll = async function (tid) { + const now = Date.now(); + const cid = await Topics.getTopicField(tid, 'cid'); await Topics.markCategoryUnreadForAll(tid); + await Topics.updateRecent(tid, now); + await db.sortedSetAdd(`cid:${cid}:tids:lastposttime`, now, tid); + await Topics.setTopicField(tid, 'lastposttime', now); }; Topics.markAsRead = async function (tids, uid) {