diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 597f259f86..8890bf1097 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -149,7 +149,7 @@ define('forum/topic', dependencies, function(pagination, infinitescroll, threadT var postcount = $('.user_postcount_' + data.posts[i].uid); postcount.html(parseInt(postcount.html(), 10) + 1); } - socket.emit('topics.markAsRead', [tid]); + createNewPosts(data); } @@ -195,7 +195,6 @@ define('forum/topic', dependencies, function(pagination, infinitescroll, threadT }); } - function updateTopicTitle() { if($(window).scrollTop() > 50) { $('.header-topic-title').find('span').text(ajaxify.variables.get('topic_name')).show(); @@ -442,6 +441,7 @@ define('forum/topic', dependencies, function(pagination, infinitescroll, threadT }); hidePostToolsForDeletedPosts(); } else { + socket.emit('topics.markAsRead', [tid]); navigator.update(); done(); } diff --git a/src/topics/unread.js b/src/topics/unread.js index 4e8bc509d2..d4628c9c03 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -180,24 +180,45 @@ module.exports = function(Topics) { }); async.parallel({ - markRead: function(next) { - db.sortedSetAdd('uid:' + uid + ':tids_read', scores, tids, next); + topicScores: function(next) { + db.sortedSetScores('topics:recent', tids, next); }, - topicData: function(next) { - Topics.getTopicsFields(tids, ['cid'], next); + userScores: function(next) { + db.sortedSetScores('uid:' + uid + ':tids_read', tids, next); } }, function(err, results) { if (err) { return callback(err); } - var cids = results.topicData.map(function(topic) { - return topic && topic.cid; - }).filter(function(topic, index, array) { - return topic && array.indexOf(topic) === index; + tids = tids.filter(function(tid, index) { + return !results.userScores[index] || results.userScores[index] < results.topicScores[index]; }); - categories.markAsRead(cids, uid, callback); + if (!tids.length) { + return callback(); + } + + async.parallel({ + markRead: function(next) { + db.sortedSetAdd('uid:' + uid + ':tids_read', scores, tids, next); + }, + topicData: function(next) { + Topics.getTopicsFields(tids, ['cid'], next); + } + }, function(err, results) { + if (err) { + return callback(err); + } + + var cids = results.topicData.map(function(topic) { + return topic && topic.cid; + }).filter(function(topic, index, array) { + return topic && array.indexOf(topic) === index; + }); + + categories.markAsRead(cids, uid, callback); + }); }); };