diff --git a/api/redis.js b/api/redis.js index 11bbe61..5577082 100644 --- a/api/redis.js +++ b/api/redis.js @@ -124,12 +124,32 @@ exports.getPublicRooms = function(fn) { * |- [, , ... ] * */ - -exports.getRoomUsers = function(roomKey, fn) { +exports._getRoomUsersKeys = function(roomKey, fn) { client.smembers(keys.roomUsers(roomKey), function(err, users) { if(err) return fn(err); return fn(null, users); - }) + }); +}; + +exports.getRoomUsers = function(roomKey, fn) { + var users = []; + exports._getRoomUsersKeys(roomKey, function(err, usersKeys) { + if(err) return fn(err); + var multi = client.multi(); + usersKeys.forEach(function(userKey) { + multi.hgetall(keys.user(userKey), function(err, user) { + // if(err) return fn(err); + // if(!user) return fn("Coudn't find user."); + return user; + }); + }); + multi.exec(function(err, results) { + results.forEach(function(u) { + users.push(utils.clearUserInfo(u)); + }); + return fn(null, users); + }); + }); }; exports.addUserToRoom = function(roomKey, userKey, fn) { @@ -206,6 +226,7 @@ exports.getOrCreateUser = function(passport, fn) { if(user) return fn(null, user); exports.createUser(passport, function(err, user) { if(err) return fn(err); + console.log('created user'); return fn(null, user); }); }); diff --git a/public/js/script.js b/public/js/script.js index a96ab17..fbb2122 100755 --- a/public/js/script.js +++ b/public/js/script.js @@ -58,10 +58,10 @@ $(function() { data.history.forEach(function(historyLine) { var time = new Date(historyLine.atTime) , msnData = historyLine.from.split(':') - , nickname = msnData.length > 1 ? msnData[1] : msnData[0] + , username = msnData.length > 1 ? msnData[1] : msnData[0] , provider = msnData.length > 1 ? msnData[0] : "twitter" , chatBoxData = { - nickname: nickname, + username: username, provider: provider, msg: historyLine.withData, type: 'history', @@ -71,7 +71,7 @@ $(function() { $lastInput = $('.chat .history').children().last(); lastInputUserKey = $lastInput.data('provider') + ':' + $lastInput.data('user'); - if($lastInput.hasClass('chat-box') && lastInputUserKey === chatBoxData.provider + ':' + chatBoxData.nickname) { + if($lastInput.hasClass('chat-box') && lastInputUserKey === chatBoxData.provider + ':' + chatBoxData.username) { $lastInput.append(parseChatBoxMsg(ich.chat_box_text(chatBoxData))); } else { $('.chat .history').append(parseChatBox(ich.chat_box(chatBoxData))); @@ -86,26 +86,26 @@ $(function() { var message = "$username has joined the room."; //If user is not 'there' - if(!$('.people a[data-username="' + data.nickname + '"][data-provider="' + data.provider + '"]').length) { + if(!$('.people a[data-username="' + data.username + '"][data-provider="' + data.provider + '"]').length) { //Then add it $('.online .people').prepend(ich.people_box(data)); - USERS[data.provider + ":" + data.nickname] = 1; + USERS[data.provider + ":" + data.username] = 1; // Chat notice message = message - .replace('$username', data.nickname); + .replace('$username', data.username); // Check update time var time = new Date() , noticeBoxData = { - user: data.nickname, + user: data.username, noticeMsg: message, time: timeParser(time) }; var $lastChatInput = $('.chat .current').children().last(); - if($lastChatInput.hasClass('notice') && $lastChatInput.data('user') === data.nickname) { + if($lastChatInput.hasClass('notice') && $lastChatInput.data('user') === data.username) { $lastChatInput.replaceWith(ich.chat_notice(noticeBoxData)); } else { $('.chat .current').append(ich.chat_notice(noticeBoxData)); @@ -113,7 +113,7 @@ $(function() { } } else { //Instead, just check him as 'back' - USERS[data.provider + ":" + data.nickname] = 1; + USERS[data.provider + ":" + data.username] = 1; } }); @@ -167,7 +167,7 @@ $(function() { data.type = 'chat'; data.time = timeParser(time) - if($lastInput.hasClass('chat-box') && lastInputUserKey === data.provider + ':' + data.nickname) { + if($lastInput.hasClass('chat-box') && lastInputUserKey === data.provider + ':' + data.username) { $lastInput.append(parseChatBoxMsg(ich.chat_box_text(data))); } else { $('.chat .current').append(parseChatBox(ich.chat_box(data))); @@ -184,11 +184,11 @@ $(function() { }); socket.on('user leave', function(data) { - var nickname = $('#username').text() + var username = $('#username').text() , message = "$username has left the room."; for (var userKey in USERS) { - if(userKey === data.provider + ":" + data.nickname && data.nickname != nickname) { + if(userKey === data.provider + ":" + data.username && data.username != username) { //Mark user as leaving USERS[userKey] = 0; @@ -197,23 +197,23 @@ $(function() { //If not re-connected if (!USERS[userKey]) { //Remove it and notify - $('.people a[data-username="' + data.nickname + '"][data-provider="' + data.provider + '"]').remove(); + $('.people a[data-username="' + data.username + '"][data-provider="' + data.provider + '"]').remove(); // Chat notice message = message - .replace('$username', data.nickname); + .replace('$username', data.username); // Check update time var time = new Date(), noticeBoxData = { - user: data.nickname, + user: data.username, noticeMsg: message, time: timeParser(time) }; var $lastChatInput = $('.chat .current').children().last(); - if($lastChatInput.hasClass('notice') && $lastChatInput.data('user') === data.nickname) { + if($lastChatInput.hasClass('notice') && $lastChatInput.data('user') === data.username) { $lastChatInput.replaceWith(ich.chat_notice(noticeBoxData)); } else { $('.chat .current').append(ich.chat_notice(noticeBoxData)); diff --git a/routes/index.js b/routes/index.js index 0feabf4..a9deddd 100644 --- a/routes/index.js +++ b/routes/index.js @@ -88,6 +88,7 @@ app.get('/new_splash', function(req, res) { app.get('/:id', utils.restrict, function(req, res) { api.redis.getFullRoom(req.params.id, function(err, room) { if(err) return res.redirect('/'); + console.log(room); api.redis.getPublicRooms(function(err, rooms) { if(err) return res.redirect('/'); utils.enterRoom(req, res, room, rooms); diff --git a/sockets.js b/sockets.js index b41cb1c..83d26a2 100644 --- a/sockets.js +++ b/sockets.js @@ -56,7 +56,7 @@ io.sockets.on('connection', function (socket) { var hs = socket.handshake , user = hs.balloons.user , userKey = user.key - , nickname = user.username + , username = user.username , provider = user.provider , userStatus = user.status , room_id = hs.balloons.room @@ -74,7 +74,7 @@ io.sockets.on('connection', function (socket) { api.redis.updateRoomCounter(room_id, 1, function(err) { if(err) return console.log(err); io.sockets.in(room_id).emit('new user', { - nickname: nickname, + username: username, provider: provider, status: userStatus || 'available' }); @@ -96,7 +96,7 @@ io.sockets.on('connection', function (socket) { io.sockets.in(room_id).emit('new msg', { key: userKey, - nickname: nickname, + username: username, provider: provider, msg: data.msg }); @@ -110,7 +110,7 @@ io.sockets.on('connection', function (socket) { api.redis.updateUserStatus(userKey, userStatus, function(err) { if(err) return console.error(err); io.sockets.emit('user-info update', { - username: nickname, + username: username, provider: provider, status: userStatus || 'available' }); @@ -148,7 +148,7 @@ io.sockets.on('connection', function (socket) { if(err) return console.error(err); chatlogWriteStream.destroySoon(); io.sockets.in(room_id).emit('user leave', { - nickname: nickname, + username: username, provider: provider }); }); diff --git a/utils.js b/utils.js index 7b1897c..a65a321 100644 --- a/utils.js +++ b/utils.js @@ -161,17 +161,28 @@ exports.enterRoom = function(req, res, room, rooms){ res.locals({ room: room, rooms: rooms, - user: { - key: req.user.key, - nickname: req.user.username, - provider: req.user.provider, - status: req.user.status - }, + user: exports.clearUserInfo(req.user), users_list: room.users }); res.render('room'); }; +/* + * Prepare user info before deliver + */ +exports.clearUserInfo = function(user) { + if(!user) return null; + return user = { + key: user.key, + username: user.username, + displayName: user.displayName, + provider: user.provider, + photos: user.photos, + status: user.status + } +} + + /* * Sort Case Insensitive */ diff --git a/views/themes/default/room.jade b/views/themes/default/room.jade index 50b934b..8da7b36 100644 --- a/views/themes/default/room.jade +++ b/views/themes/default/room.jade @@ -59,7 +59,7 @@ block content // .wrap span#room_name(style="display:none")= room.name - span#username(style="display:none")= user.nickname + span#username(style="display:none")= user.username span#provider(style="display:none")= user.provider include templates/chat_tmpl diff --git a/views/themes/default/templates/chat_tmpl.jade b/views/themes/default/templates/chat_tmpl.jade index e4188b3..3e17be3 100644 --- a/views/themes/default/templates/chat_tmpl.jade +++ b/views/themes/default/templates/chat_tmpl.jade @@ -1,10 +1,10 @@ script#chat_box(type='text/html') - .chat-box(data-user='{{ nickname }}', data-provider='{{ provider }}', data-type='{{ type }}') + .chat-box(data-user='{{ username }}', data-provider='{{ provider }}', data-type='{{ type }}') div(class="avatar avatar-{{ provider }}") - img(src='http://avatars.io/{{ provider }}/{{ nickname }}') - a(href="https://{{ provider }}.com/{{ nickname }}") + img(src='http://avatars.io/{{ provider }}/{{ username }}') + a(href="https://{{ provider }}.com/{{ username }}") h5 - | {{ nickname }} + | {{ username }} {{> chat_box_text }} script#chat_box_text(type='text/html') @@ -18,9 +18,9 @@ script#chat_notice(type='text/html') | {{ noticeMsg }} script#people_box(type='text/html') - a(class='{{ status }}', href='#', data-username='{{ nickname }}', data-provider='{{ provider }}') + a(class='{{ status }}', href='#', data-username='{{ username }}', data-provider='{{ provider }}') b - | {{ nickname }} + | {{ username }} script#title_template(type='text/html') | {{#count}} ({{ count }}) {{/count}} {{ roomName }} - Balloons.IO