Added /nick and /topic

This commit is contained in:
khlieng 2015-02-04 02:43:49 +01:00
parent ad4354adfc
commit 92c316e9ea
7 changed files with 65 additions and 2 deletions

View File

@ -5,6 +5,7 @@ var socket = require('../socket');
var serverActions = Reflux.createActions([
'connect',
'disconnect',
'setNick',
'load'
]);
@ -22,4 +23,11 @@ serverActions.disconnect.preEmit = function(server) {
socket.send('quit', { server: server });
};
serverActions.setNick.preEmit = function(nick, server) {
socket.send('nick', {
server: server,
new: nick
});
};
module.exports = serverActions;

View File

@ -1,9 +1,11 @@
var React = require('react');
var Reflux = require('reflux');
var channelStore = require('../stores/channel');
var selectedTabStore = require('../stores/selectedTab');
var messageActions = require('../actions/message');
var channelActions = require('../actions/channel');
var serverActions = require('../actions/server');
var tabActions = require('../actions/tab');
function dispatchCommand(cmd, channel, server) {
@ -28,6 +30,21 @@ function dispatchCommand(cmd, channel, server) {
messageActions.send('\x01ACTION ' + params.slice(1).join(' ') + '\x01', channel, server);
}
break;
case 'topic':
var topic = channelStore.getTopic(server, channel);
if (topic) {
messageActions.inform(topic, server, channel);
} else {
messageActions.inform('No topic set', server, channel);
}
break;
case 'nick':
if (params[1]) {
serverActions.setNick(params[1], server);
}
break;
}
}
@ -46,7 +63,7 @@ var MessageInput = React.createClass({
if (e.which === 13 && e.target.value) {
var tab = this.state.selectedTab;
if (e.target.value.charAt(0) === '/') {
if (e.target.value[0] === '/') {
dispatchCommand(e.target.value, tab.channel, tab.server);
} else {
messageActions.send(e.target.value, tab.channel, tab.server);

View File

@ -205,6 +205,13 @@ var channelStore = Reflux.createStore({
return [];
},
getTopic: function(server, channel) {
if (channels[server] && channels[server][channel]) {
return channels[server][channel].topic || null;
}
return null;
},
getState: function() {
return channels;
}

View File

@ -73,7 +73,7 @@ var messageStore = Reflux.createStore({
to: channel,
message: message,
type: 'info'
}, channel);
}, channel || server);
this.trigger(messages);
},

View File

@ -28,6 +28,11 @@ var serverStore = Reflux.createStore({
tabActions.select(server);
},
setNick: function(nick, server) {
servers[server].nick = nick;
this.trigger(servers);
},
load: function(storedServers) {
_.each(storedServers, function(server) {
servers[server.address] = server;

View File

@ -123,6 +123,22 @@ func (u User) AddChannel(channel Channel) {
})
}
func (u User) SetNick(nick, address string) {
go db.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("Servers"))
id := []byte(u.UUID + ":" + address)
var server Server
json.Unmarshal(b.Get(id), &server)
server.Nick = nick
data, _ := json.Marshal(server)
b.Put(id, data)
return nil
})
}
func (u User) RemoveServer(address string) {
go db.Update(func(tx *bolt.Tx) error {
serverID := []byte(u.UUID + ":" + address)

View File

@ -133,6 +133,16 @@ func handleWS(ws *websocket.Conn) {
if irc, ok := session.getIRC(data.Server); ok {
irc.Privmsg(data.To, data.Message)
}
case "nick":
var data Nick
json.Unmarshal(req.Request, &data)
if irc, ok := session.getIRC(data.Server); ok {
irc.Nick(data.New)
session.user.SetNick(data.New, data.Server)
}
}
}
}