From eec82a7dd9a3a9b615062903fe5b99452c02099a Mon Sep 17 00:00:00 2001 From: khlieng Date: Mon, 2 Feb 2015 01:54:26 +0100 Subject: [PATCH] Added IRC network naming, added some convenience getters to the stores --- client/package.json | 2 +- client/src/js/actions/server.js | 5 ++-- client/src/js/app.js | 4 ++-- client/src/js/components/ChatTitle.jsx | 6 +---- client/src/js/components/TabList.jsx | 33 +++++++++++++++++++++----- client/src/js/components/UserList.jsx | 14 ++++------- client/src/js/stores/channel.js | 7 ++++++ client/src/js/stores/selectedTab.js | 12 ++++++++-- client/src/js/stores/server.js | 12 ++++++++-- irc.go | 4 ++-- json_types.go | 1 + main.go | 2 +- storage/user.go | 2 ++ websocket_handler.go | 2 ++ 14 files changed, 73 insertions(+), 33 deletions(-) diff --git a/client/package.json b/client/package.json index e63be9c2..62cbebdf 100644 --- a/client/package.json +++ b/client/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "lodash": "3.0.0", - "reflux": "~0.2.2", + "reflux": "0.2.4", "react-router": "~0.11.6", "react": "~0.12.2" } diff --git a/client/src/js/actions/server.js b/client/src/js/actions/server.js index ab01c586..bb987933 100644 --- a/client/src/js/actions/server.js +++ b/client/src/js/actions/server.js @@ -8,12 +8,13 @@ var serverActions = Reflux.createActions([ 'load' ]); -serverActions.connect.preEmit = function(server, nick, username, tls) { +serverActions.connect.preEmit = function(server, nick, username, tls, name) { socket.send('connect', { server: server, nick: nick, username: username, - tls: tls || false + tls: tls || false, + name: name || server }); }; diff --git a/client/src/js/app.js b/client/src/js/app.js index 6f72d899..4704f7a3 100644 --- a/client/src/js/app.js +++ b/client/src/js/app.js @@ -14,8 +14,8 @@ var nick = 'test' + Math.floor(Math.random() * 99999); socket.on('connect', function() { socket.send('uuid', uuid); - serverActions.connect('irc.freenode.net', nick, 'username', true); - serverActions.connect('irc.quakenet.org', nick, 'username'); + serverActions.connect('irc.freenode.net', nick, 'username', true, 'Freenode'); + serverActions.connect('irc.quakenet.org', nick, 'username', false, 'QuakeNet'); channelActions.join(['#stuff'], 'irc.freenode.net'); channelActions.join(['#herp'], 'irc.quakenet.org'); diff --git a/client/src/js/components/ChatTitle.jsx b/client/src/js/components/ChatTitle.jsx index 88217e8d..ddd3aaaf 100644 --- a/client/src/js/components/ChatTitle.jsx +++ b/client/src/js/components/ChatTitle.jsx @@ -19,25 +19,21 @@ var ChatTitle = React.createClass({ render: function() { var tab = this.state.selectedTab; - var title; var topic; var usercount; if (tab.channel && this.state.channels[tab.server]) { var channel = this.state.channels[tab.server][tab.channel]; - title = tab.channel if (channel) { usercount = channel.users.length; topic = channel.topic || ''; } - } else { - title = tab.server; } return (
- {title} + {tab.name} {topic}
{usercount} diff --git a/client/src/js/components/TabList.jsx b/client/src/js/components/TabList.jsx index 1ed07f22..38ba0835 100644 --- a/client/src/js/components/TabList.jsx +++ b/client/src/js/components/TabList.jsx @@ -4,6 +4,7 @@ var _ = require('lodash'); var channelStore = require('../stores/channel'); var privateChatStore = require('../stores/privateChat'); +var serverStore = require('../stores/server'); var selectedTabStore = require('../stores/selectedTab'); var tabActions = require('../actions/tab'); @@ -11,14 +12,16 @@ var TabList = React.createClass({ mixins: [ Reflux.connect(channelStore, 'channels'), Reflux.connect(privateChatStore, 'privateChats'), - Reflux.connect(selectedTabStore, 'selectedTab') + Reflux.connect(selectedTabStore, 'selectedTab'), + Reflux.connect(serverStore, 'servers') ], getInitialState: function() { return { channels: channelStore.getState(), privateChats: privateChatStore.getState(), - selectedTab: selectedTabStore.getState() + selectedTab: selectedTabStore.getState(), + servers: serverStore.getState() }; }, @@ -36,7 +39,13 @@ var TabList = React.createClass({ tabClass = ''; } - return

{name}

; + return ( +

+ {name} +

+ ); }); _.each(self.state.privateChats[address], function(chat, nick) { @@ -46,8 +55,14 @@ var TabList = React.createClass({ } else { tabClass = ''; } - - channels.push(

{nick}

); + + channels.push( +

+ {nick} +

+ ); }); if (address === selected.server && @@ -57,7 +72,13 @@ var TabList = React.createClass({ tabClass = 'tab-server'; } - channels.unshift(

{address}

); + channels.unshift( +

+ {serverStore.getName(address)} +

+ ); return channels; }); diff --git a/client/src/js/components/UserList.jsx b/client/src/js/components/UserList.jsx index 1b7e3588..b59e6aa7 100644 --- a/client/src/js/components/UserList.jsx +++ b/client/src/js/components/UserList.jsx @@ -22,20 +22,14 @@ var UserList = React.createClass({ render: function() { var users = null; var tab = this.state.selectedTab; - var style = {}; if (!tab.channel || tab.channel[0] !== '#') { style.display = 'none'; - } - - if (tab.channel && this.state.channels[tab.server]) { - var channel = this.state.channels[tab.server][tab.channel]; - if (channel) { - users = _.map(channel.users, function(user) { - return ; - }); - } + } else { + users = _.map(channelStore.getUsers(tab.server, tab.channel), function(user) { + return ; + }); } return ( diff --git a/client/src/js/stores/channel.js b/client/src/js/stores/channel.js index cb1bbd7f..c18517d2 100644 --- a/client/src/js/stores/channel.js +++ b/client/src/js/stores/channel.js @@ -186,6 +186,13 @@ var channelStore = Reflux.createStore({ return channels[server]; }, + getUsers: function(server, channel) { + if (channels[server] && channels[server][channel]) { + return channels[server][channel].users; + } + return []; + }, + getState: function() { return channels; } diff --git a/client/src/js/stores/selectedTab.js b/client/src/js/stores/selectedTab.js index db09cdd5..8cdc76bb 100644 --- a/client/src/js/stores/selectedTab.js +++ b/client/src/js/stores/selectedTab.js @@ -1,6 +1,7 @@ var Reflux = require('reflux'); var _ = require('lodash'); +var serverStore = require('./server'); var actions = require('../actions/tab'); var channelActions = require('../actions/channel'); @@ -20,6 +21,13 @@ var selectedTabStore = Reflux.createStore({ select: function(server, channel) { selectedTab.server = server; selectedTab.channel = channel; + + if (channel) { + selectedTab.name = channel; + } else { + selectedTab.name = serverStore.getName(server); + } + this.trigger(selectedTab); }, @@ -49,8 +57,8 @@ var selectedTabStore = Reflux.createStore({ } }); -selectedTabStore.listen(function(selected) { - localStorage.selectedTab = JSON.stringify(selected); +selectedTabStore.listen(function(selectedTab) { + localStorage.selectedTab = JSON.stringify(selectedTab); }); module.exports = selectedTabStore; \ No newline at end of file diff --git a/client/src/js/stores/server.js b/client/src/js/stores/server.js index a8910935..c5c4c732 100644 --- a/client/src/js/stores/server.js +++ b/client/src/js/stores/server.js @@ -10,11 +10,12 @@ var serverStore = Reflux.createStore({ this.listenToMany(actions); }, - connect: function(server, nick, username) { + connect: function(server, nick, username, tls, name) { servers[server] = { address: server, nick: nick, - username: username + username: username, + name: name || server }; this.trigger(servers); }, @@ -30,6 +31,13 @@ var serverStore = Reflux.createStore({ return servers[server].nick; }, + getName: function(server) { + if (servers[server]) { + return servers[server].name; + } + return null; + }, + getState: function() { return servers; } diff --git a/irc.go b/irc.go index 056fd727..4d9bcaf6 100644 --- a/irc.go +++ b/irc.go @@ -179,7 +179,7 @@ func (i *IRC) Writef(format string, a ...interface{}) { } func (i *IRC) write(data string) { - fmt.Fprint(i.conn, data+"\r\n") + i.conn.Write([]byte(data + "\r\n")) } func (i *IRC) writef(format string, a ...interface{}) { @@ -189,7 +189,7 @@ func (i *IRC) writef(format string, a ...interface{}) { func (i *IRC) send() { i.ready.Wait() for message := range i.out { - fmt.Fprint(i.conn, message) + i.conn.Write([]byte(message)) } } diff --git a/json_types.go b/json_types.go index 9867d091..5d947568 100644 --- a/json_types.go +++ b/json_types.go @@ -17,6 +17,7 @@ type WSResponse struct { type Connect struct { Server string `json:"server"` TLS bool `json:"tls"` + Name string `json:"name"` Nick string `json:"nick"` Username string `json:"username"` } diff --git a/main.go b/main.go index 600671f4..f3af0621 100644 --- a/main.go +++ b/main.go @@ -31,7 +31,7 @@ func main() { sessions[user.UUID] = session irc := NewIRC(server.Nick, server.Username) - irc.TLS = true + irc.TLS = server.TLS irc.Connect(server.Address) session.setIRC(irc.Host, irc) diff --git a/storage/user.go b/storage/user.go index 41a9929c..04f8ec2d 100644 --- a/storage/user.go +++ b/storage/user.go @@ -9,6 +9,8 @@ import ( type Server struct { Address string `json:"address"` + TLS bool `json:"tls"` + Name string `json:"name"` Nick string `json:"nick"` Username string `json:"username"` Realname string `json:"realname"` diff --git a/websocket_handler.go b/websocket_handler.go index 4d9ad537..3484b24f 100644 --- a/websocket_handler.go +++ b/websocket_handler.go @@ -86,6 +86,8 @@ func handleWS(ws *websocket.Conn) { session.user.AddServer(storage.Server{ Address: irc.Host, + TLS: data.TLS, + Name: data.Name, Nick: data.Nick, Username: data.Username, })