Browse Source

Got user lists for channels working

Nathaniel van Diepen 11 years ago
parent
commit
7ced5c0b79
3 changed files with 61 additions and 11 deletions
  1. 35 7
      app/OmnomIRC.js
  2. 4 1
      app/www/css/style.css
  3. 22 3
      app/www/js/omnomirc.js

+ 35 - 7
app/OmnomIRC.js

@@ -60,6 +60,7 @@ io.sockets.on('connection',function(socket){
 			name: data.name,
 			title: data.title
 		});
+		sendUserList(data.name);
 		socket.get('nick',function(e,nick){
 			logger.debug(nick+' joined '+data.name);
 			io.sockets.in(data.name).emit('message',{
@@ -73,19 +74,26 @@ io.sockets.on('connection',function(socket){
 		socket.leave(data.name);
 		socket.get('nick',function(e,nick){
 			logger.debug(nick+' left '+data.name);
-			io.sockets.in(data.name).emit('message',{
-				message: nick+' parted the channel',
-				room: data.name,
-				from: 0
-			});
+			sendUserList(data.name);
 		});
 	});
+	socket.on('disconnect',function(data){
+		var rooms = io.sockets.manager.rooms,
+			i,
+			room;
+		for(i in rooms){
+			if(rooms[i] != '' && typeof rooms[i] == 'string'){
+				room = rooms[i].substr(1);
+				sendUserList(names);
+			}
+		}
+	});
 	socket.on('message',function(data){
 		logger.debug('message sent to '+data.room);
 		io.sockets.in(data.room).emit('message',data);
 	});
 	socket.on('names',function(data){
-		var sockets = io.sockets.clients('room'),
+		var sockets = io.sockets.clients(data.name),
 			i;
 		socket.emit('message',{
 			message: data.name+' users:',
@@ -93,7 +101,7 @@ io.sockets.on('connection',function(socket){
 			from: 0
 		});
 		for(i in sockets){
-			socket.get('nick',function(e,nick){
+			sockets[i].get('nick',function(e,nick){
 				socket.emit('message',{
 					message: '	'+nick,
 					room: data.name,
@@ -101,6 +109,7 @@ io.sockets.on('connection',function(socket){
 				});
 			});
 		}
+		sendUserList(data.name);
 	});
 	socket.on('auth',function(data){
 		logger.info(data.nick+' registered');
@@ -108,4 +117,23 @@ io.sockets.on('connection',function(socket){
 		socket.set('nick',data.nick);
 		socket.emit('authorized');
 	});
+	var usersInRoom = function(room){
+			var sockets = io.sockets.clients(room),
+				i,
+				ret = [];
+			for(i in sockets){
+				sockets[i].get('nick',function(e,nick){
+					ret.push(nick);
+				});
+			}
+			return ret;
+		},
+		sendUserList = function(room){
+			if(typeof room != 'undefined'){
+				io.sockets.in(room).emit('names',{
+					room: room,
+					names: usersInRoom(room)
+				});
+			}
+		};
 });

+ 4 - 1
app/www/css/style.css

@@ -139,7 +139,7 @@ html,body{
 #users,#input,#send,#settings{
 	position: fixed;
 }
-#content-list,#users-list,#settings-list,#tabs-list{
+#content-list,#user-list,#settings-list,#tabs-list{
 	width: 100%;
 	height: 100%;
 	list-style-type: none;
@@ -147,6 +147,9 @@ html,body{
 	padding: 0;
 	overflow: auto;
 }
+#user-list{
+	padding-left: 5px;
+}
 #tabs-list{
 	width: calc(100% - 42px);
 	height: 20px;

+ 22 - 3
app/www/js/omnomirc.js

@@ -69,7 +69,6 @@
 			{
 				cmd: 'nick',
 				fn: function(args){
-					console.log(args);
 					properties.nick = args[1];
 					$o.auth();
 				}
@@ -99,6 +98,7 @@
 				cmd: 'clear',
 				fn: function(args){
 					$cl.html('');
+					tabs[selectedTab].body = document.createDocumentFragment();
 				}
 			},
 			{
@@ -122,6 +122,21 @@
 			}
 		],
 		handles = [
+			{
+				on: 'names',
+				fn: function(data){
+					console.log(data);
+					tabs[$o.tabIdForName(data.room)].names = data.names;
+					if($o.tabIdForName(data.room) == selectedTab){
+						$ul = $('#user-list').html('');
+						for(var i in data.names){
+							$ul.append(
+								$('<li>').text(data.names[i])
+							);
+						}
+					}
+				}
+			},
 			{
 				on: 'authorized',
 				fn: function(){
@@ -325,7 +340,7 @@
 			$($tl.children().get(id)).addClass('clicked');
 			$('#title').text(tabs[id].title);
 			$('#topic').text(tabs[id].topic);
-			$cl.html($(tabs[id].body).clone());
+			$cl.html($(tabs[id].body).clone()).scrollTop($cl[0].scrollHeight);
 			$o.abbrDate('abbr.date');
 		},
 		tabIdForName: function(name){
@@ -352,7 +367,8 @@
 				tabs.push({
 					name: name,
 					title: title,
-					body: document.createDocumentFragment()
+					body: document.createDocumentFragment(),
+					names: []
 				});
 				$tl.append($o.tabObj(tabs.length-1));
 				$o.refreshTabs();
@@ -363,6 +379,9 @@
 		removeTab: function(id){
 			if(typeof tabs[id] != 'undefined'){
 				event('Tab removed: '+tabs[id].name);
+				socket.emit('part',{
+					name: tabs[id].name
+				});
 				tabs.splice(id,1);
 				if(selectedTab==id&&selectedTab>0){
 					selectedTab--;