From 2e045012243a74f45f337857117ee4ef952dc24f Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 9 Dec 2014 20:48:35 -0500 Subject: [PATCH] closes #2516 --- public/src/client/topic.js | 9 ++++++++- public/src/client/topic/events.js | 1 - src/socket.io/index.js | 12 ++++++------ src/socket.io/topics.js | 13 ++++++++++--- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 367a5d04f0..d5d3aa28b6 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -58,7 +58,14 @@ define('forum/topic', [ $(window).trigger('action:topic.loaded'); - socket.emit('topics.enter', tid); + if (app.user.uid) { + socket.emit('topics.enter', tid, function(err, data) { + if (err) { + return app.alertError(err.message); + } + browsing.onUpdateUsersInRoom(data); + }); + } }; Topic.toTop = function() { diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index cf33e15bc7..90f54ec064 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -13,7 +13,6 @@ define('forum/topic/events', [ var Events = {}; var events = { - 'event:update_users_in_room': browsing.onUpdateUsersInRoom, 'event:user_enter': browsing.onUserEnter, 'event:user_leave': browsing.onUserLeave, 'event:user_status_change': browsing.onUserStatusChange, diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 39d754be81..6c19f356a2 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -270,7 +270,7 @@ Sockets.isUsersOnline = function(uids, callback) { callback(null, uids.map(Sockets.isUserOnline)); }; -Sockets.updateRoomBrowsingText = function (roomName, selfUid) { +Sockets.getUsersInRoom = function (uid, roomName, callback) { if (!roomName) { return; } @@ -278,22 +278,22 @@ Sockets.updateRoomBrowsingText = function (roomName, selfUid) { var uids = Sockets.getUidsInRoom(roomName); var total = uids.length; uids = uids.slice(0, 9); - if (selfUid) { - uids = [selfUid].concat(uids); + if (uid) { + uids = [uid].concat(uids); } if (!uids.length) { - return; + return callback(null, {users: [], total: 0 , room: roomName}); } user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status'], function(err, users) { if (err) { - return; + return callback(err); } users = users.filter(function(user) { return user && user.status !== 'offline'; }); - io.sockets.in(roomName).emit('event:update_users_in_room', { + callback(null, { users: users, room: roomName, total: Math.max(0, total - uids.length) diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index 3ef3af2a63..da01d3e1de 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -70,9 +70,16 @@ SocketTopics.enter = function(socket, tid, callback) { if (!parseInt(tid, 10) || !socket.uid) { return; } - - SocketTopics.markAsRead(socket, [tid], callback); - websockets.updateRoomBrowsingText('topic_' + tid); + async.parallel({ + markAsRead: function(next) { + SocketTopics.markAsRead(socket, [tid], next); + }, + users: function(next) { + websockets.getUsersInRoom(socket.uid, 'topic_' + tid, next); + } + }, function(err, result) { + callback(err, result ? result.users : null); + }); }; SocketTopics.postcount = function(socket, tid, callback) {