diff --git a/public/css/style.less b/public/css/style.less
index 5cd6887afd..af5fb49f18 100644
--- a/public/css/style.less
+++ b/public/css/style.less
@@ -201,6 +201,15 @@ footer.footer {
display:inline-block;
vertical-align:top;
}
+
+.account-online-status {
+ .icon-circle-blank {
+ color:red;
+ }
+ .icon-circle {
+ color:green;
+ }
+}
.user-profile-picture {
width:128px;
diff --git a/public/src/forum/account.js b/public/src/forum/account.js
index ae87fa4e1b..b54d0f39f5 100644
--- a/public/src/forum/account.js
+++ b/public/src/forum/account.js
@@ -37,7 +37,21 @@
$('.user-recent-posts .topic-row').on('click', function() {
ajaxify.go($(this).attr('topic-url'));
- })
+ });
+
+ var onlineStatus = $('.account-online-status');
+
+ socket.on('api:user.isOnline', function(online) {
+ if(online) {
+ onlineStatus.find('span span').text('online');
+ onlineStatus.find('i').attr('class', 'icon-circle');
+ } else {
+ onlineStatus.find('span span').text('offline');
+ onlineStatus.find('i').attr('class', 'icon-circle-blank');
+ }
+ });
+
+ socket.emit('api:user.isOnline', theirid);
});
diff --git a/public/templates/account.tpl b/public/templates/account.tpl
index 0813a1d346..79a94cae4d 100644
--- a/public/templates/account.tpl
+++ b/public/templates/account.tpl
@@ -20,6 +20,9 @@
+
+ offline
+
diff --git a/src/websockets.js b/src/websockets.js
index 6aabb17be9..65a9a4a7ce 100644
--- a/src/websockets.js
+++ b/src/websockets.js
@@ -47,7 +47,8 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
userSockets[uid] = userSockets[uid] || [];
userSockets[uid].push(socket);
-
+ if(uid)
+ io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid));
socket.join('uid_' + uid);
});
});
@@ -61,8 +62,12 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
userSockets[uid].splice(index, 1);
}
- if(userSockets[uid].length === 0)
+ if(userSockets[uid].length === 0) {
delete users[sessionID];
+ console.log('dc ', userSockets[uid]);
+ if(uid)
+ io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid));
+ }
for(var roomName in rooms) {
@@ -215,12 +220,16 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
user.reset.commit(socket, data.code, data.password);
});
+ function isUserOnline(uid) {
+ return !!userSockets[uid] && userSockets[uid].length > 0;
+ }
+
socket.on('api:user.get_online_users', function(data) {
var returnData = [];
for(var i=0; i 0)
+ if(isUserOnline(uid))
returnData.push(uid);
else
returnData.push(0);
@@ -228,6 +237,10 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
socket.emit('api:user.get_online_users', returnData);
});
+ socket.on('api:user.isOnline', function(uid) {
+ socket.emit('api:user.isOnline', isUserOnline(uid));
+ });
+
socket.on('api:user.changePassword', function(data) {
user.changePassword(socket, uid, data, function(success) {
if(success) {