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: []});