-
+
+
-
diff --git a/src/routes/user.js b/src/routes/user.js
index f7461886d7..d31f2b1ba7 100644
--- a/src/routes/user.js
+++ b/src/routes/user.js
@@ -6,7 +6,10 @@ var user = require('./../user.js'),
path = require('path'),
winston = require('winston'),
nconf = require('nconf'),
- meta = require('./../meta');
+ meta = require('./../meta'),
+ async= require('async'),
+ RDB = require('./../redis'),
+ websockets = require('./../websockets.js');
(function (User) {
User.create_routes = function (app) {
@@ -457,7 +460,8 @@ var user = require('./../user.js'),
res.json({
search_display: 'none',
loadmore_display: 'block',
- users: data
+ users: data,
+ show_anon: 'hide'
});
});
}
@@ -467,7 +471,8 @@ var user = require('./../user.js'),
res.json({
search_display: 'none',
loadmore_display: 'block',
- users: data
+ users: data,
+ show_anon: 'hide'
});
});
}
@@ -477,17 +482,36 @@ var user = require('./../user.js'),
res.json({
search_display: 'none',
loadmore_display: 'block',
- users: data
+ users: data,
+ show_anon: 'hide'
});
});
}
function getOnlineUsers(req, res) {
user.getUsers('users:online', 0, 49, function (err, data) {
- res.json({
- search_display: 'none',
- loadmore_display: 'block',
- users: data
+
+ var onlineUsers = [];
+
+ function iterator(user, callback) {
+ if(websockets.isUserOnline(user.uid)) {
+ onlineUsers.push(user);
+ } else {
+ RDB.zrem('users:online', user.uid);
+ }
+ callback(null);
+ }
+
+ var anonymousUserCount = websockets.getOnlineAnonCount();
+
+ async.each(data, iterator, function(err) {
+ res.json({
+ search_display: 'none',
+ loadmore_display: 'block',
+ users: onlineUsers,
+ anonymousUserCount: anonymousUserCount,
+ show_anon: anonymousUserCount?'':'hide'
+ });
});
});
}
@@ -496,7 +520,8 @@ var user = require('./../user.js'),
res.json({
search_display: 'block',
loadmore_display: 'none',
- users: []
+ users: [],
+ show_anon: 'hide'
});
}
diff --git a/src/user.js b/src/user.js
index 4c6ccfc811..2bd216725f 100644
--- a/src/user.js
+++ b/src/user.js
@@ -227,7 +227,7 @@ var utils = require('./../public/src/utils.js'),
});
function updateField(field, next) {
- if (data[field] !== undefined) {
+ if (data[field] !== undefined && typeof data[field] === 'string') {
if (field === 'email') {
var gravatarpicture = User.createGravatarURLFromEmail(data[field]);
User.setUserField(uid, 'gravatarpicture', gravatarpicture);
diff --git a/src/websockets.js b/src/websockets.js
index 90784ad847..633c5b8f86 100644
--- a/src/websockets.js
+++ b/src/websockets.js
@@ -68,7 +68,6 @@ module.exports.init = function(io) {
RDB.zadd('users:online', Date.now(), uid, function(err, data) {
socket.join('uid_' + uid);
- io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
user.getUserField(uid, 'username', function(err, username) {
socket.emit('event:connect', {
@@ -79,6 +78,8 @@ module.exports.init = function(io) {
});
});
}
+
+ io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
});
});
@@ -96,11 +97,12 @@ module.exports.init = function(io) {
delete userSockets[uid];
if (uid) {
RDB.zrem('users:online', uid, function(err, data) {
- io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
});
}
}
+ io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
+
emitOnlineUserCount();
for (var roomName in rooms) {
@@ -266,6 +268,8 @@ module.exports.init = function(io) {
return !!userSockets[uid] && userSockets[uid].length > 0;
}
+ module.exports.isUserOnline = isUserOnline;
+
socket.on('api:user.get_online_users', function(data) {
var returnData = [];
@@ -282,6 +286,7 @@ module.exports.init = function(io) {
socket.on('api:user.isOnline', function(uid, callback) {
callback({
online: isUserOnline(uid),
+ uid: uid,
timestamp: Date.now()
});
});
@@ -438,6 +443,14 @@ module.exports.init = function(io) {
});
});
+ socket.on('api:user.getOnlineAnonCount', function(data, callback) {
+ callback(module.exports.getOnlineAnonCount());
+ });
+
+ module.exports.getOnlineAnonCount = function () {
+ return userSockets[0] ? userSockets[0].length : 0;
+ }
+
function emitOnlineUserCount() {
var anon = userSockets[0] ? userSockets[0].length : 0;
var registered = Object.keys(userSockets).length;
@@ -445,7 +458,8 @@ module.exports.init = function(io) {
registered = registered - 1;
var returnObj = {
- users: registered + anon
+ users: registered + anon,
+ anon: anon
};
io.sockets.emit('api:user.active.get', returnObj)
}