From 2bb4aab6acbab0844a48fd589535727c74e4a2b0 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 17 Jul 2013 12:57:57 -0400 Subject: [PATCH 1/3] changes to online users code --- public/css/style.less | 2 + public/src/app.js | 26 ++++++------ public/src/forum/topic.js | 3 ++ src/user.js | 23 ----------- src/websockets.js | 83 ++++++++++++++++++++------------------- 5 files changed, 61 insertions(+), 76 deletions(-) diff --git a/public/css/style.less b/public/css/style.less index df3a249ede..f8ceba625f 100644 --- a/public/css/style.less +++ b/public/css/style.less @@ -399,10 +399,12 @@ body .navbar .nodebb-inline-block { .icon-circle { font-size: 12px; color: green; + margin-right:3px; } .icon-circle-blank { font-size: 12px; color: red; + margin-right:3px; } } diff --git a/public/src/app.js b/public/src/app.js index 177a9f4f0a..3f325662b1 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -86,9 +86,11 @@ var socket, uid = el.parents('li').attr('data-uid'); if (uid && jQuery.inArray(uid, users) !== -1) { - el.prepend(' '); + el.find('i').remove(); + el.prepend(''); } else { - el.prepend(' '); + el.find('i').remove(); + el.prepend(''); } el.processed = true; @@ -208,17 +210,17 @@ var socket, } }; - app.process_page = function() { + app.populate_online_users = function() { + var uids = []; - function populate_online_users() { - var uids = []; + jQuery('.post-row').each(function() { + uids.push(this.getAttribute('data-uid')); + }); + + socket.emit('api:user.get_online_users', uids); + } - jQuery('.post-row').each(function() { - uids.push(this.getAttribute('data-uid')); - }); - - socket.emit('api:user.get_online_users', uids); - } + app.process_page = function() { // here is where all modules' onNavigate should be called, I think. require(['mobileMenu'], function(mobileMenu) { @@ -226,7 +228,7 @@ var socket, }); - populate_online_users(); + app.populate_online_users(); setTimeout(function() { window.scrollTo(0, 1); // rehide address bar on mobile after page load completes. diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index 217f176b5c..5d7ed4226c 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -324,6 +324,8 @@ var activeEl = $('#thread_active_users'); if(activeEl.length) activeEl.html(data); + + app.populate_online_users(); }); socket.on('event:rep_up', function(data) { @@ -351,6 +353,7 @@ tempContainer.replaceWith(tempContainer.contents()); infiniteLoaderActive = false; + app.populate_online_users(); addCommasToNumbers(); }); diff --git a/src/user.js b/src/user.js index 3cfa0bc6c2..0e8e84f1fc 100644 --- a/src/user.js +++ b/src/user.js @@ -904,29 +904,6 @@ var utils = require('./../public/src/utils.js'), } }; - User.get_online_users = function(socket, uids) { - RDB.sismembers('users:online', uids, function(err, data) { - RDB.handle(err); - socket.emit('api:user.get_online_users', data); - }); - }; - - User.go_online = function(uid) { - RDB.sadd('users:online', uid, function(err) { - if (err) { - RDB.handle(err); - } - }); - }; - - User.go_offline = function(uid) { - RDB.srem('users:online', uid, function(err) { - if (err) { - RDB.handle(err); - } - }); - }; - User.active = { get_record : function(socket) { RDB.mget(['global:active_user_record', 'global:active_user_record_date'], function(err, data) { diff --git a/src/websockets.js b/src/websockets.js index 2b3ea8117c..07a9143851 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -58,43 +58,35 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), var hs = socket.handshake; var uid = users[hs.sessionID]; - // if (uid > 0) { - userSockets[uid] = userSockets[uid] || []; - userSockets[uid].push(socket); - user.go_online(uid); - - socket.join('uid_' + uid); - // } - /*process.on('uncaughtException', function(err) { - // handle the error safely - console.log("error message "+err); - socket.emit('event:consolelog',{type:'uncaughtException', stack:err.stack, error:err.toString()}); - });*/ + userSockets[uid] = userSockets[uid] || []; + userSockets[uid].push(socket); + + socket.join('uid_' + uid); + socket.emit('event:connect', {status: 1}); socket.on('disconnect', function() { - // if (uid > 0) { - user.go_offline(uid); + + var index = userSockets[uid].indexOf(socket); + if(index !== -1) { + userSockets[uid].splice(index, 1); + } + + if(userSockets[uid].length === 0) delete users[hs.sessionID]; - var index = userSockets[uid].indexOf(socket); - if(index !== -1) { - userSockets[uid].splice(index, 1); - } - - for(var roomName in rooms) { + + for(var roomName in rooms) { - socket.leave(roomName); + socket.leave(roomName); - if(rooms[roomName][hs.sessionID]) { - delete rooms[roomName][hs.sessionID]; - } - - updateRoomBrowsingText(roomName); - } + if(rooms[roomName][socket.id]) { + delete rooms[roomName][socket.id]; + } - // } + updateRoomBrowsingText(roomName); + } }); socket.on('api:get_all_rooms', function(data) { @@ -105,9 +97,9 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), function getUidsInRoom(room) { var uids = []; - for(var sessionId in room) { - if(uids.indexOf(room[sessionId]) === -1) - uids.push(room[sessionId]); + for(var socketId in room) { + if(uids.indexOf(room[socketId]) === -1) + uids.push(room[socketId]); } return uids; } @@ -118,6 +110,7 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), for(var i=0; i 0) + returnData.push(uid); + else + returnData.push(0); + } + socket.emit('api:user.get_online_users', returnData); }); socket.on('api:user.changePassword', function(data) { From 03d3f598045bd49fa14a8e4e81ebcb9b89bfd1f6 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 17 Jul 2013 15:48:09 -0400 Subject: [PATCH 2/3] change to async.each for addUserInfoToPosts --- src/topics.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/topics.js b/src/topics.js index 715122cc3e..1d8eef2f92 100644 --- a/src/topics.js +++ b/src/topics.js @@ -51,16 +51,15 @@ marked.setOptions({ } function addUserInfoToPosts(next) { - var done = 0; - - for(var i=0, ii=postData.length; i Date: Wed, 17 Jul 2013 16:09:01 -0400 Subject: [PATCH 3/3] show correct version on admin/index --- public/templates/admin/index.tpl | 2 +- src/routes/admin.js | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/public/templates/admin/index.tpl b/public/templates/admin/index.tpl index af5b04ba12..507cea020e 100644 --- a/public/templates/admin/index.tpl +++ b/public/templates/admin/index.tpl @@ -8,7 +8,7 @@ Get Themes dcplabs

-

You are running NodeBB v0.0.1. This is where we will check to make sure your NodeBB is latest, etc.

+

You are running NodeBB v{version}. This is where we will check to make sure your NodeBB is latest, etc.

diff --git a/src/routes/admin.js b/src/routes/admin.js index f2c00f6a48..38be4c3094 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -1,7 +1,8 @@ var user = require('./../user.js'), topics = require('./../topics.js'), - RDB = require('./../redis.js') + RDB = require('./../redis.js'), + pkg = require('./../../package.json'), categories = require('./../categories.js'); (function(Admin) { @@ -57,6 +58,9 @@ var user = require('./../user.js'), function api_method(req, res) { switch(req.params.method) { + case 'index': + res.json({version:pkg.version}); + break; case 'users' : if (req.params.tab == 'search') { res.json({search_display: 'block', users: []});