Skip to content

Commit

Permalink
room interface. Issue #65
Browse files Browse the repository at this point in the history
  • Loading branch information
cristiandouce committed Sep 10, 2012
1 parent e3cdd6f commit a6dae6c
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 37 deletions.
27 changes: 24 additions & 3 deletions api/redis.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,32 @@ exports.getPublicRooms = function(fn) {
* |- [<room_key>, <room_key>, ... ]
*
*/

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) {
Expand Down Expand Up @@ -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);
});
});
Expand Down
32 changes: 16 additions & 16 deletions public/js/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand All @@ -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)));
Expand All @@ -86,34 +86,34 @@ $(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));
$('.chat').scrollTop($('.chat').prop('scrollHeight'));
}
} else {
//Instead, just check him as 'back'
USERS[data.provider + ":" + data.nickname] = 1;
USERS[data.provider + ":" + data.username] = 1;
}
});

Expand Down Expand Up @@ -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)));
Expand All @@ -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;

Expand All @@ -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));
Expand Down
1 change: 1 addition & 0 deletions routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 5 additions & 5 deletions sockets.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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'
});
Expand All @@ -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
});
Expand All @@ -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'
});
Expand Down Expand Up @@ -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
});
});
Expand Down
23 changes: 17 additions & 6 deletions utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down
2 changes: 1 addition & 1 deletion views/themes/default/room.jade
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions views/themes/default/templates/chat_tmpl.jade
Original file line number Diff line number Diff line change
@@ -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')
Expand All @@ -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

0 comments on commit a6dae6c

Please sign in to comment.