Added nick change handling, the client now shows nick and quit messages, the userlist gets hidden when the chat window is not a channel
This commit is contained in:
parent
c421dc504b
commit
5f43b3e78e
@ -9,6 +9,7 @@ var channelActions = Reflux.createActions([
|
|||||||
'addUser',
|
'addUser',
|
||||||
'removeUser',
|
'removeUser',
|
||||||
'removeUserAll',
|
'removeUserAll',
|
||||||
|
'renameUser',
|
||||||
'setUsers',
|
'setUsers',
|
||||||
'setTopic',
|
'setTopic',
|
||||||
'setMode',
|
'setMode',
|
||||||
@ -41,6 +42,10 @@ socket.on('quit', function(data) {
|
|||||||
channelActions.removeUserAll(data.user, data.server);
|
channelActions.removeUserAll(data.user, data.server);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on('nick', function(data) {
|
||||||
|
channelActions.renameUser(data.old, data.new, data.server);
|
||||||
|
});
|
||||||
|
|
||||||
socket.on('users', function(data) {
|
socket.on('users', function(data) {
|
||||||
channelActions.setUsers(data.users, data.server, data.channel);
|
channelActions.setUsers(data.users, data.server, data.channel);
|
||||||
});
|
});
|
||||||
|
@ -5,7 +5,8 @@ var socket = require('../socket');
|
|||||||
|
|
||||||
var messageActions = Reflux.createActions([
|
var messageActions = Reflux.createActions([
|
||||||
'send',
|
'send',
|
||||||
'add'
|
'add',
|
||||||
|
'broadcast'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
messageActions.send.preEmit = function(message, to, server) {
|
messageActions.send.preEmit = function(message, to, server) {
|
||||||
@ -44,6 +45,14 @@ socket.on('part', function(data) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on('quit', function(data) {
|
||||||
|
messageActions.broadcast(data.user + ' has quit', data.server);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('nick', function(data) {
|
||||||
|
messageActions.broadcast(data.old + ' changed nick to ' + data.new, data.server);
|
||||||
|
});
|
||||||
|
|
||||||
socket.on('motd', function(data) {
|
socket.on('motd', function(data) {
|
||||||
_.each(data.content.split('\n'), function(line) {
|
_.each(data.content.split('\n'), function(line) {
|
||||||
messageActions.add({
|
messageActions.add({
|
||||||
|
@ -2,7 +2,7 @@ var React = require('react');
|
|||||||
var Reflux = require('reflux');
|
var Reflux = require('reflux');
|
||||||
var _ = require('lodash');
|
var _ = require('lodash');
|
||||||
|
|
||||||
var UserListItem = require('../components/UserListItem.jsx');
|
var UserListItem = require('./UserListItem.jsx');
|
||||||
var channelStore = require('../stores/channel');
|
var channelStore = require('../stores/channel');
|
||||||
var selectedTabStore = require('../stores/selectedTab');
|
var selectedTabStore = require('../stores/selectedTab');
|
||||||
|
|
||||||
@ -23,6 +23,12 @@ var UserList = React.createClass({
|
|||||||
var users = null;
|
var users = null;
|
||||||
var tab = this.state.selectedTab;
|
var tab = this.state.selectedTab;
|
||||||
|
|
||||||
|
var style = {};
|
||||||
|
|
||||||
|
if (!tab.channel || tab.channel[0] !== '#') {
|
||||||
|
style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
if (tab.channel && this.state.channels[tab.server]) {
|
if (tab.channel && this.state.channels[tab.server]) {
|
||||||
var channel = this.state.channels[tab.server][tab.channel];
|
var channel = this.state.channels[tab.server][tab.channel];
|
||||||
if (channel) {
|
if (channel) {
|
||||||
@ -33,7 +39,7 @@ var UserList = React.createClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="userlist">{users}</div>
|
<div className="userlist" style={style}>{users}</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -110,6 +110,18 @@ var channelStore = Reflux.createStore({
|
|||||||
this.trigger(channels);
|
this.trigger(channels);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
renameUser: function(oldNick, newNick, server) {
|
||||||
|
_.each(channels[server], function(channel, channelName) {
|
||||||
|
var user = _.find(channel.users, { nick: oldNick });
|
||||||
|
if (user) {
|
||||||
|
user.nick = newNick;
|
||||||
|
updateRenderName(user);
|
||||||
|
sortUsers(server, channelName);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.trigger(channels);
|
||||||
|
},
|
||||||
|
|
||||||
setUsers: function(users, server, channel) {
|
setUsers: function(users, server, channel) {
|
||||||
initChannel(server, channel);
|
initChannel(server, channel);
|
||||||
var chan = channels[server][channel];
|
var chan = channels[server][channel];
|
||||||
@ -170,6 +182,10 @@ var channelStore = Reflux.createStore({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getChannels: function(server) {
|
||||||
|
return channels[server];
|
||||||
|
},
|
||||||
|
|
||||||
getState: function() {
|
getState: function() {
|
||||||
return channels;
|
return channels;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
var Reflux = require('reflux');
|
var Reflux = require('reflux');
|
||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
var serverStore = require('./server');
|
var serverStore = require('./server');
|
||||||
|
var channelStore = require('./channel');
|
||||||
var actions = require('../actions/message');
|
var actions = require('../actions/message');
|
||||||
|
|
||||||
var messages = {};
|
var messages = {};
|
||||||
@ -45,6 +47,20 @@ var messageStore = Reflux.createStore({
|
|||||||
this.trigger(messages);
|
this.trigger(messages);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
broadcast: function(message, server) {
|
||||||
|
_.each(channelStore.getChannels(server), function(channel, channelName) {
|
||||||
|
addMessage({
|
||||||
|
server: server,
|
||||||
|
from: '',
|
||||||
|
to: channelName,
|
||||||
|
message: message,
|
||||||
|
type: 'info',
|
||||||
|
time: new Date()
|
||||||
|
}, channelName);
|
||||||
|
});
|
||||||
|
this.trigger(messages);
|
||||||
|
},
|
||||||
|
|
||||||
getState: function() {
|
getState: function() {
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
1
irc.go
1
irc.go
@ -12,6 +12,7 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
PING = "PING"
|
PING = "PING"
|
||||||
|
NICK = "NICK"
|
||||||
JOIN = "JOIN"
|
JOIN = "JOIN"
|
||||||
PART = "PART"
|
PART = "PART"
|
||||||
MODE = "MODE"
|
MODE = "MODE"
|
||||||
|
@ -21,6 +21,12 @@ type Connect struct {
|
|||||||
Username string `json:"username"`
|
Username string `json:"username"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Nick struct {
|
||||||
|
Server string `json:"server"`
|
||||||
|
Old string `json:"old"`
|
||||||
|
New string `json:"new"`
|
||||||
|
}
|
||||||
|
|
||||||
type Join struct {
|
type Join struct {
|
||||||
Server string `json:"server"`
|
Server string `json:"server"`
|
||||||
User string `json:"user"`
|
User string `json:"user"`
|
||||||
|
@ -15,6 +15,17 @@ func handleMessages(irc *IRC, session *Session) {
|
|||||||
|
|
||||||
for msg := range irc.Messages {
|
for msg := range irc.Messages {
|
||||||
switch msg.Command {
|
switch msg.Command {
|
||||||
|
case NICK:
|
||||||
|
printMessage(msg, irc)
|
||||||
|
|
||||||
|
session.sendJSON("nick", Nick{
|
||||||
|
Server: irc.Host,
|
||||||
|
Old: msg.Prefix,
|
||||||
|
New: msg.Trailing,
|
||||||
|
})
|
||||||
|
|
||||||
|
channelStore.RenameUser(msg.Prefix, msg.Trailing, irc.Host)
|
||||||
|
|
||||||
case JOIN:
|
case JOIN:
|
||||||
user := msg.Prefix
|
user := msg.Prefix
|
||||||
|
|
||||||
|
@ -75,6 +75,12 @@ func (c *ChannelStore) RemoveUserAll(user, server string) {
|
|||||||
c.userLock.Unlock()
|
c.userLock.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChannelStore) RenameUser(oldNick, newNick, server string) {
|
||||||
|
c.userLock.Lock()
|
||||||
|
c.renameAll(server, oldNick, newNick)
|
||||||
|
c.userLock.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ChannelStore) SetMode(server, channel, user, add, remove string) {
|
func (c *ChannelStore) SetMode(server, channel, user, add, remove string) {
|
||||||
c.userLock.Lock()
|
c.userLock.Lock()
|
||||||
|
|
||||||
@ -118,6 +124,12 @@ func (c *ChannelStore) rename(server, channel, oldNick, newNick string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChannelStore) renameAll(server, oldNick, newNick string) {
|
||||||
|
for channel, _ := range c.users[server] {
|
||||||
|
c.rename(server, channel, oldNick, newNick)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ChannelStore) removeUser(user, server, channel string) {
|
func (c *ChannelStore) removeUser(user, server, channel string) {
|
||||||
for i, u := range c.users[server][channel] {
|
for i, u := range c.users[server][channel] {
|
||||||
u = strings.TrimLeft(u, "@+")
|
u = strings.TrimLeft(u, "@+")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user