diff --git a/src/client.js b/src/client.js index 15e0830d..9e9c707c 100644 --- a/src/client.js +++ b/src/client.js @@ -141,13 +141,34 @@ Client.prototype.connect = function(args) { var webirc = null; var channels = []; - if (args.join) { - var join = args.join.replace(/\,/g, " ").split(/\s+/g); - join.forEach(function(chan) { + if (args.channels) { + var badName = false; + + args.channels.forEach(function(chan) { + if (!chan.name) { + badName = true; + return; + } + channels.push(new Chan({ - name: chan + name: chan.name })); }); + + if (badName && client.name) { + log.warn("User '" + client.name + "' on network '" + args.name + "' has an invalid channel which has been ignored"); + } + // `join` is kept for backwards compatibility when updating from versions <2.0 + // also used by the "connect" window + } else if (args.join) { + channels = args.join + .replace(/\,/g, " ") + .split(/\s+/g) + .map(function(chan) { + return new Chan({ + name: chan + }); + }); } var network = new Network({ diff --git a/src/models/network.js b/src/models/network.js index 209cfefc..65303756 100644 --- a/src/models/network.js +++ b/src/models/network.js @@ -73,10 +73,15 @@ Network.prototype.export = function() { "hostname" ]); - network.join = _.map( - _.filter(this.channels, {type: Chan.Type.CHANNEL}), - "name" - ).join(","); + network.channels = this.channels + .filter(function(channel) { + return channel.type === Chan.Type.CHANNEL; + }) + .map(function(chan) { + return _.pick(chan, [ + "name" + ]); + }); return network; }; diff --git a/test/models/network.js b/test/models/network.js index f41d0ec4..04314b3d 100644 --- a/test/models/network.js +++ b/test/models/network.js @@ -13,6 +13,8 @@ describe("Network", function() { network.setNick("chillin`"); network.channels.push(new Chan({name: "#thelounge"})); network.channels.push(new Chan({name: "&foobar"})); + network.channels.push(new Chan({name: "Lobby", type: Chan.Type.LOBBY})); + network.channels.push(new Chan({name: "PrivateChat", type: Chan.Type.QUERY})); expect(network.export()).to.deep.equal({ name: "networkName", @@ -24,9 +26,12 @@ describe("Network", function() { realname: "", commands: [], nick: "chillin`", - join: "#thelounge,&foobar", ip: null, - hostname: null + hostname: null, + channels: [ + {"name": "#thelounge"}, + {"name": "&foobar"}, + ] }); }); });