diff --git a/public/src/app.js b/public/src/app.js index 537d0103bd..854957b7aa 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -51,6 +51,32 @@ var socket, reconnectEl.html('<i class="fa fa-check"></i>'); reconnecting = false; + // Rejoin room that was left when we disconnected + var url_parts = document.location.pathname.slice(RELATIVE_PATH.length).split('/').slice(1), + room; + switch(url_parts[0]) { + case 'user': + room = 'user/' + templates.get('theirid'); + case 'topic': + room = 'topic_' + url_parts[1]; + break; + case 'category': + room = 'category_' + url_parts[1]; + break; + case 'recent': // intentional fall-through + case 'unread': + room = 'recent_posts'; + break; + case 'admin': + room = 'admin'; + break; + + default: + room = 'global'; + break; + } + app.enterRoom(room, true); + setTimeout(function() { reconnectEl.removeClass('active'); }, 3000); @@ -248,9 +274,9 @@ var socket, }); }; - app.enterRoom = function (room) { + app.enterRoom = function (room, force) { if (socket) { - if (app.currentRoom === room) { + if (app.currentRoom === room && !force) { return; } diff --git a/src/websockets.js b/src/websockets.js index 17ec884489..338b054cfd 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -163,9 +163,8 @@ websockets.init = function(io) { return anonCount; } - var uids = getUidsInRoom(rooms[roomName]); - - var anonymousCount = getAnonymousCount(roomName); + var uids = getUidsInRoom(rooms[roomName]), + anonymousCount = getAnonymousCount(roomName); if (uids.length === 0) { io.sockets.in(roomName).emit('api:get_users_in_room', { users: [], anonymousCount: anonymousCount }); @@ -184,19 +183,19 @@ websockets.init = function(io) { } socket.join(data.enter); - rooms[data.enter] = rooms[data.enter] || {}; if (uid) { rooms[data.enter][socket.id] = uid; - if (data.leave && rooms[data.leave] && rooms[data.leave][socket.id]) { + if (data.leave && rooms[data.leave] && rooms[data.leave][socket.id] && data.enter !== data.leave) { delete rooms[data.leave][socket.id]; } } - if (data.leave) + if (data.leave) { updateRoomBrowsingText(data.leave); + } updateRoomBrowsingText(data.enter);