Improved state updates when parting and quitting

This commit is contained in:
khlieng 2015-02-09 02:06:24 +01:00
parent 99ef788906
commit 5df364a3a4
6 changed files with 63 additions and 14 deletions

View File

@ -4,10 +4,11 @@ var messageActions = require('./actions/message');
var serverActions = require('./actions/server'); var serverActions = require('./actions/server');
var tabActions = require('./actions/tab'); var tabActions = require('./actions/tab');
messageActions.command.listen(function(cmd, channel, server) { messageActions.command.listen(function(line, channel, server) {
var params = cmd.slice(1).split(' '); var params = line.slice(1).split(' ');
var command = params[0].toLowerCase();
switch (params[0].toLowerCase()) { switch (command) {
case 'nick': case 'nick':
if (params[1]) { if (params[1]) {
serverActions.setNick(params[1], server); serverActions.setNick(params[1], server);

View File

@ -63,6 +63,10 @@ socket.on('channels', function(data) {
channelActions.load(data); channelActions.load(data);
}); });
serverActions.connect.listen(function(server, nick, opts) {
messageActions.inform('Connecting...', server);
});
function withReason(message, reason) { function withReason(message, reason) {
return message + (reason ? ' (' + reason + ')' : ''); return message + (reason ? ' (' + reason + ')' : '');
} }

View File

@ -4,6 +4,8 @@ var _ = require('lodash');
var serverStore = require('./server'); var serverStore = require('./server');
var channelStore = require('./channel'); var channelStore = require('./channel');
var actions = require('../actions/message'); var actions = require('../actions/message');
var serverActions = require('../actions/server');
var channelActions = require('../actions/channel');
var messages = {}; var messages = {};
@ -30,6 +32,8 @@ function addMessage(message, dest) {
var messageStore = Reflux.createStore({ var messageStore = Reflux.createStore({
init: function() { init: function() {
this.listenToMany(actions); this.listenToMany(actions);
this.listenTo(serverActions.disconnect, 'disconnect');
this.listenTo(channelActions.part, 'part');
}, },
send: function(message, to, server) { send: function(message, to, server) {
@ -77,6 +81,18 @@ var messageStore = Reflux.createStore({
this.trigger(messages); this.trigger(messages);
}, },
disconnect: function(server) {
delete messages[server];
this.trigger(messages);
},
part: function(channels, server) {
_.each(channels, function(channel) {
delete messages[server][channel];
});
this.trigger(messages);
},
getMessages: function(server, dest) { getMessages: function(server, dest) {
if (messages[server] && messages[server][dest]) { if (messages[server] && messages[server][dest]) {
return messages[server][dest]; return messages[server][dest];

View File

@ -2,6 +2,7 @@ var Reflux = require('reflux');
var actions = require('../actions/privateChat'); var actions = require('../actions/privateChat');
var messageActions = require('../actions/message'); var messageActions = require('../actions/message');
var serverActions = require('../actions/server');
var privateChats = {}; var privateChats = {};
@ -23,6 +24,7 @@ var privateChatStore = Reflux.createStore({
init: function() { init: function() {
this.listenToMany(actions); this.listenToMany(actions);
this.listenTo(messageActions.add, 'messageAdded'); this.listenTo(messageActions.add, 'messageAdded');
this.listenTo(serverActions.disconnect, 'disconnect');
}, },
open: function(server, nick) { open: function(server, nick) {
@ -42,6 +44,11 @@ var privateChatStore = Reflux.createStore({
} }
}, },
disconnect: function(server) {
delete privateChats[server];
this.trigger(privateChats);
},
getState: function() { getState: function() {
return privateChats; return privateChats;
} }

View File

@ -4,6 +4,7 @@ var _ = require('lodash');
var serverStore = require('./server'); var serverStore = require('./server');
var actions = require('../actions/tab'); var actions = require('../actions/tab');
var channelActions = require('../actions/channel'); var channelActions = require('../actions/channel');
var serverActions = require('../actions/server');
var selectedTab = {}; var selectedTab = {};
var stored = localStorage.selectedTab; var stored = localStorage.selectedTab;
@ -16,6 +17,9 @@ var selectedTabStore = Reflux.createStore({
init: function() { init: function() {
this.listenToMany(actions); this.listenToMany(actions);
this.listenTo(channelActions.part, 'part'); this.listenTo(channelActions.part, 'part');
this.listenTo(serverActions.disconnect, 'disconnect');
this.listenTo(channelActions.load, 'loadChannels');
this.listenTo(serverActions.load, 'loadServers');
}, },
select: function(server, channel) { select: function(server, channel) {
@ -32,15 +36,33 @@ var selectedTabStore = Reflux.createStore({
}, },
part: function(channels, server) { part: function(channels, server) {
var self = this; if (server === selectedTab.server &&
if (server === selectedTab.server) { channels.indexOf(selectedTab.channel) !== -1) {
_.each(channels, function(channel) { selectedTab.channel = null;
if (channel === selectedTab.channel) { selectedTab.name = null;
delete selectedTab.channel; this.trigger(selectedTab);
self.trigger(selectedTab);
return;
} }
}); },
disconnect: function(server) {
if (server === selectedTab.server) {
selectedTab = {};
this.trigger(selectedTab);
}
},
loadChannels: function(channels) {
if (selectedTab.channel && !_.find(channels, { name: selectedTab.channel })) {
selectedTab.channel = null;
selectedTab.name = null;
this.trigger(selectedTab);
}
},
loadServers: function(servers) {
if (selectedTab.server && !_.find(servers, { address: selectedTab.server })) {
selectedTab = {};
this.trigger(selectedTab);
} }
}, },

View File

@ -11,7 +11,7 @@ var serverStore = Reflux.createStore({
this.listenToMany(actions); this.listenToMany(actions);
}, },
connect: function(server, nick, username, tls, name) { connect: function(server, nick, opts) {
var i = server.indexOf(':'); var i = server.indexOf(':');
if (i > 0) { if (i > 0) {
server = server.slice(0, i); server = server.slice(0, i);
@ -20,8 +20,7 @@ var serverStore = Reflux.createStore({
servers[server] = { servers[server] = {
address: server, address: server,
nick: nick, nick: nick,
username: username, name: opts.name || server
name: name || server
}; };
this.trigger(servers); this.trigger(servers);