New IRC connection - don't send redundant con_num to client on connection error
[KiwiIRC.git] / client / assets / src / models / network.js
CommitLineData
ce13508b
D
1(function () {
2
3 _kiwi.model.Network = Backbone.Model.extend({
4 defaults: {
5 connection_id: 0,
6 /**
7 * The name of the network
8 * @type String
9 */
10 name: 'Network',
11
12 /**
13 * The address (URL) of the network
14 * @type String
15 */
16 address: '',
17
d6eec6ed
D
18 /**
19 * The port for the network
20 * @type Int
21 */
22 port: 6667,
23
24 /**
25 * If this network uses SSL
26 * @type Bool
27 */
28 ssl: false,
29
30 /**
31 * The password to connect to this network
32 * @type String
33 */
34 password: '',
35
ce13508b
D
36 /**
37 * The current nickname
38 * @type String
39 */
40 nick: '',
41
42 /**
43 * The channel prefix for this network
44 * @type String
45 */
46 channel_prefix: '#',
47
48 /**
49 * The user prefixes for channel owner/admin/op/voice etc. on this network
50 * @type Array
51 */
52 user_prefixes: ['~', '&', '@', '+']
53 },
54
55
56 initialize: function () {
d6eec6ed
D
57 // If we already have a connection, bind our events
58 if (typeof this.get('connection_id') !== 'undefined') {
59 this.gateway = _kiwi.global.components.Network(this.get('connection_id'));
60 this.bindGatewayEvents();
61 }
ce13508b 62
c62a9570 63 // Create our panel list (tabs)
0e546dd4 64 this.panels = new _kiwi.model.PanelList([], this);
c62a9570 65 //this.panels.network = this;
0e546dd4
D
66
67 // Automatically create a server tab
68 var server_panel = new _kiwi.model.Server({name: 'Server'});
69 this.panels.add(server_panel);
c966123a 70 this.panels.server = this.panels.active = server_panel;
ce13508b
D
71 },
72
73
d6eec6ed
D
74 reconnect: function(callback_fn) {
75 var that = this,
76 server_info = {
77 nick: this.get('nick'),
78 host: this.get('address'),
79 port: this.get('port'),
80 ssl: this.get('ssl'),
81 password: this.get('password')
82 };
83
84 _kiwi.gateway.makeIrcConnection(server_info, function(err, connection_id) {
85 if (!err) {
86 that.gateway.dispose();
87
88 that.set('connection_id', connection_id);
89 that.gateway = _kiwi.global.components.Network(that.get('connection_id'));
90 that.bindGatewayEvents();
91
92 callback_fn && callback_fn(err);
93
94 } else {
95 console.log("_kiwi.gateway.socket.on('error')", {reason: err});
96 callback_fn && callback_fn(err);
97 }
98 });
99 },
100
101
ce13508b 102 bindGatewayEvents: function () {
0e546dd4 103 //this.gateway.on('all', function() {console.log('ALL', this.get('connection_id'), arguments);});
ce13508b 104
4047ee2b 105 this.gateway.on('connect', onConnect, this);
a36b7eb6 106 this.gateway.on('disconnect', onDisconnect, this);
ce13508b
D
107
108 this.gateway.on('nick', function(event) {
2ffd1291 109 if (event.nick === this.get('nick')) {
ce13508b
D
110 this.set('nick', event.newnick);
111 }
112 }, this);
113
114 this.gateway.on('options', onOptions, this);
115 this.gateway.on('motd', onMotd, this);
116 this.gateway.on('join', onJoin, this);
117 this.gateway.on('part', onPart, this);
118 this.gateway.on('quit', onQuit, this);
119 this.gateway.on('kick', onKick, this);
120 this.gateway.on('msg', onMsg, this);
e2c54b3e 121 this.gateway.on('nick', onNick, this);
ce13508b
D
122 this.gateway.on('ctcp_request', onCtcpRequest, this);
123 this.gateway.on('ctcp_response', onCtcpResponse, this);
124 this.gateway.on('notice', onNotice, this);
125 this.gateway.on('action', onAction, this);
126 this.gateway.on('topic', onTopic, this);
127 this.gateway.on('topicsetby', onTopicSetBy, this);
128 this.gateway.on('userlist', onUserlist, this);
129 this.gateway.on('userlist_end', onUserlistEnd, this);
130 this.gateway.on('mode', onMode, this);
131 this.gateway.on('whois', onWhois, this);
5989f3f4 132 this.gateway.on('whowas', onWhowas, this);
ce13508b
D
133 this.gateway.on('away', onAway, this);
134 this.gateway.on('list_start', onListStart, this);
f8240e98 135 this.gateway.on('irc_error', onIrcError, this);
18818abd
D
136 },
137
138
139 /**
140 * Create panels and join the channel
141 * This will not wait for the join event to create a panel. This
142 * increases responsiveness in case of network lag
143 */
144 createAndJoinChannels: function (channels) {
145 var that = this,
146 panels = [];
147
d6eec6ed 148 // Multiple channels may come as comma-delimited
18818abd
D
149 if (typeof channels === 'string') {
150 channels = channels.split(',');
151 }
152
153 $.each(channels, function (index, channel_name_key) {
154 // We may have a channel key so split it off
155 var spli = channel_name_key.trim().split(' '),
156 channel_name = spli[0],
157 channel_key = spli[1] || '';
158
159 // Trim any whitespace off the name
160 channel_name = channel_name.trim();
161
162 // If not a valid channel name, display a warning
163 if (!_kiwi.app.isChannelName(channel_name)) {
247dd7ac
N
164 that.panels.server.addMsg('', _kiwi.global.i18n.translate('client_models_network_channel_invalid_name').fetch(channel_name));
165 _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_channel_invalid_name').fetch(channel_name), {timeout: 5000});
18818abd
D
166 return;
167 }
168
169 // Check if we have the panel already. If not, create it
170 channel = that.panels.getByName(channel_name);
171 if (!channel) {
172 channel = new _kiwi.model.Channel({name: channel_name});
173 that.panels.add(channel);
174 }
175
176 panels.push(channel);
177
178 that.gateway.join(channel_name, channel_key);
179 });
180
181 return panels;
24d27c8c
D
182 },
183
184
185 /**
186 * Join all the open channels we have open
187 * Reconnecting to a network would typically call this.
188 */
189 rejoinAllChannels: function() {
190 var that = this;
191
192 this.panels.forEach(function(panel) {
193 if (!panel.isChannel())
194 return;
195
196 that.gateway.join(panel.get('name'));
197 });
ce13508b
D
198 }
199 });
200
201
d6eec6ed 202
a36b7eb6
D
203 function onDisconnect(event) {
204 $.each(this.panels.models, function (index, panel) {
247dd7ac 205 panel.addMsg('', _kiwi.global.i18n.translate('client_models_network_disconnected').fetch(), 'action quit');
a36b7eb6
D
206 });
207 }
208
209
ce13508b 210
4047ee2b 211 function onConnect(event) {
18818abd
D
212 var panels, channel_names;
213
214 // Update our nick with what the network gave us
4047ee2b
D
215 this.set('nick', event.nick);
216
24d27c8c
D
217 // If this is a re-connection then we may have some channels to re-join
218 this.rejoinAllChannels();
219
18818abd 220 // Auto joining channels
4047ee2b 221 if (this.auto_join && this.auto_join.channel) {
18818abd
D
222 panels = this.createAndJoinChannels(this.auto_join.channel + ' ' + (this.auto_join.channel_key || ''));
223
224 // Show the last channel if we have one
225 if (panels)
226 panels[panels.length - 1].view.show();
cf3d9759
D
227
228 delete this.auto_join;
4047ee2b
D
229 }
230 }
231
232
233
ce13508b
D
234 function onOptions(event) {
235 var that = this;
236
237 $.each(event.options, function (name, value) {
238 switch (name) {
239 case 'CHANTYPES':
240 that.set('channel_prefix', value.join(''));
241 break;
242 case 'NETWORK':
243 that.set('name', value);
244 break;
245 case 'PREFIX':
246 that.set('user_prefixes', value);
247 break;
248 }
249 });
250
251 this.set('cap', event.cap);
252 }
253
254
255
256 function onMotd(event) {
257 this.panels.server.addMsg(this.get('name'), event.msg, 'motd');
258 }
259
260
261
262 function onJoin(event) {
263 var c, members, user;
264 c = this.panels.getByName(event.channel);
265 if (!c) {
266 c = new _kiwi.model.Channel({name: event.channel});
267 this.panels.add(c);
268 }
269
270 members = c.get('members');
271 if (!members) return;
272
273 user = new _kiwi.model.Member({nick: event.nick, ident: event.ident, hostname: event.hostname});
274 members.add(user);
275 }
276
277
278
279 function onPart(event) {
280 var channel, members, user,
281 part_options = {};
282
283 part_options.type = 'part';
284 part_options.message = event.message || '';
285
286 channel = this.panels.getByName(event.channel);
287 if (!channel) return;
288
289 // If this is us, close the panel
290 if (event.nick === this.get('nick')) {
291 channel.close();
292 return;
293 }
294
295 members = channel.get('members');
296 if (!members) return;
297
298 user = members.getByNick(event.nick);
299 if (!user) return;
300
301 members.remove(user, part_options);
302 }
303
304
305
306 function onQuit(event) {
307 var member, members,
308 quit_options = {};
309
310 quit_options.type = 'quit';
311 quit_options.message = event.message || '';
312
313 $.each(this.panels.models, function (index, panel) {
314 if (!panel.isChannel()) return;
315
316 member = panel.get('members').getByNick(event.nick);
317 if (member) {
318 panel.get('members').remove(member, quit_options);
319 }
320 });
321 }
322
323
324
325 function onKick(event) {
326 var channel, members, user,
327 part_options = {};
328
329 part_options.type = 'kick';
330 part_options.by = event.nick;
331 part_options.message = event.message || '';
b8c035b2
VDF
332 part_options.current_user_kicked = (event.kicked == this.get('nick'))
333 part_options.current_user_initiated = (event.nick == this.get('nick'))
ce13508b
D
334
335 channel = this.panels.getByName(event.channel);
336 if (!channel) return;
337
338 members = channel.get('members');
339 if (!members) return;
340
341 user = members.getByNick(event.kicked);
342 if (!user) return;
343
eed5ac29 344
ce13508b
D
345 members.remove(user, part_options);
346
b8c035b2 347 if (part_options.current_user_kicked) {
d6eec6ed 348 members.reset([]);
ce13508b
D
349 }
350 }
351
352
353
354 function onMsg(event) {
355 var panel,
aef6e2a7 356 is_pm = (event.channel.toLowerCase() == this.get('nick').toLowerCase());
ce13508b
D
357
358 // An ignored user? don't do anything with it
359 if (_kiwi.gateway.isNickIgnored(event.nick)) {
360 return;
361 }
362
363 if (is_pm) {
364 // If a panel isn't found for this PM, create one
365 panel = this.panels.getByName(event.nick);
366 if (!panel) {
367 panel = new _kiwi.model.Query({name: event.nick});
368 this.panels.add(panel);
369 }
370
371 } else {
372 // If a panel isn't found for this channel, reroute to the
373 // server panel
374 panel = this.panels.getByName(event.channel);
375 if (!panel) {
376 panel = this.panels.server;
377 }
378 }
379
380 panel.addMsg(event.nick, event.msg);
381 }
382
383
384
e2c54b3e
D
385 function onNick(event) {
386 var member;
387
388 $.each(this.panels.models, function (index, panel) {
389 if (panel.get('name') == event.nick)
390 panel.set('name', event.newnick);
391
392 if (!panel.isChannel()) return;
393
394 member = panel.get('members').getByNick(event.nick);
395 if (member) {
396 member.set('nick', event.newnick);
247dd7ac 397 panel.addMsg('', '== ' + _kiwi.global.i18n.translate('client_models_network_nickname_changed').fetch(event.nick, event.newnick) , 'action nick');
e2c54b3e
D
398 }
399 });
400 }
401
402
403
ce13508b
D
404 function onCtcpRequest(event) {
405 // An ignored user? don't do anything with it
406 if (_kiwi.gateway.isNickIgnored(event.nick)) {
407 return;
408 }
409
410 // Reply to a TIME ctcp
411 if (event.msg.toUpperCase() === 'TIME') {
e3691498 412 this.gateway.ctcp(false, event.type, event.nick, (new Date()).toString());
ce13508b
D
413 }
414 }
415
416
417
418 function onCtcpResponse(event) {
419 // An ignored user? don't do anything with it
420 if (_kiwi.gateway.isNickIgnored(event.nick)) {
421 return;
422 }
423
424 this.panels.server.addMsg('[' + event.nick + ']', 'CTCP ' + event.msg);
425 }
426
427
428
429 function onNotice(event) {
4550fa1f 430 var panel, channel_name;
ce13508b
D
431
432 // An ignored user? don't do anything with it
0190c2c9 433 if (!event.from_server && event.nick && _kiwi.gateway.isNickIgnored(event.nick)) {
ce13508b
D
434 return;
435 }
436
437 // Find a panel for the destination(channel) or who its from
0190c2c9
D
438 if (!event.from_server) {
439 panel = this.panels.getByName(event.target) || this.panels.getByName(event.nick);
4550fa1f
D
440
441 // Forward ChanServ messages to its associated channel
b70909a6 442 if (event.nick && event.nick.toLowerCase() == 'chanserv' && event.msg.charAt(0) == '[') {
4550fa1f
D
443 channel_name = /\[([^ \]]+)\]/gi.exec(event.msg);
444 if (channel_name && channel_name[1]) {
445 channel_name = channel_name[1];
446
447 panel = this.panels.getByName(channel_name);
448 }
449 }
450
0190c2c9
D
451 if (!panel) {
452 panel = this.panels.server;
453 }
454 } else {
ce13508b
D
455 panel = this.panels.server;
456 }
457
458 panel.addMsg('[' + (event.nick||'') + ']', event.msg);
2119ce7a
D
459
460 // Show this notice to the active panel if it didn't have a set target
4f19a296 461 if (!event.from_server && panel === this.panels.server && _kiwi.app.panels().active !== this.panels.server)
2119ce7a 462 _kiwi.app.panels().active.addMsg('[' + (event.nick||'') + ']', event.msg);
ce13508b
D
463 }
464
465
466
467 function onAction(event) {
468 var panel,
aef6e2a7 469 is_pm = (event.channel.toLowerCase() == this.get('nick').toLowerCase());
ce13508b
D
470
471 // An ignored user? don't do anything with it
472 if (_kiwi.gateway.isNickIgnored(event.nick)) {
473 return;
474 }
475
476 if (is_pm) {
477 // If a panel isn't found for this PM, create one
478 panel = this.panels.getByName(event.nick);
479 if (!panel) {
480 panel = new _kiwi.model.Channel({name: event.nick});
481 this.panels.add(panel);
482 }
483
484 } else {
485 // If a panel isn't found for this channel, reroute to the
486 // server panel
487 panel = this.panels.getByName(event.channel);
488 if (!panel) {
489 panel = this.panels.server;
490 }
491 }
492
493 panel.addMsg('', '* ' + event.nick + ' ' + event.msg, 'action');
494 }
495
496
497
498 function onTopic(event) {
499 var c;
500 c = this.panels.getByName(event.channel);
501 if (!c) return;
502
503 // Set the channels topic
504 c.set('topic', event.topic);
505
506 // If this is the active channel, update the topic bar too
507 if (c.get('name') === this.panels.active.get('name')) {
508 _kiwi.app.topicbar.setCurrentTopic(event.topic);
509 }
510 }
511
512
513
514 function onTopicSetBy(event) {
515 var c, when;
516 c = this.panels.getByName(event.channel);
517 if (!c) return;
518
519 when = formatDate(new Date(event.when * 1000));
247dd7ac 520 c.addMsg('', _kiwi.global.i18n.translate('client_models_network_topic').fetch(event.nick, when), 'topic');
ce13508b
D
521 }
522
523
524
525 function onUserlist(event) {
526 var channel;
527 channel = this.panels.getByName(event.channel);
528
529 // If we didn't find a channel for this, may aswell leave
530 if (!channel) return;
531
532 channel.temp_userlist = channel.temp_userlist || [];
533 _.each(event.users, function (item) {
534 var user = new _kiwi.model.Member({nick: item.nick, modes: item.modes});
535 channel.temp_userlist.push(user);
536 });
537 }
538
539
540
541 function onUserlistEnd(event) {
542 var channel;
543 channel = this.panels.getByName(event.channel);
544
545 // If we didn't find a channel for this, may aswell leave
546 if (!channel) return;
547
548 // Update the members list with the new list
549 channel.get('members').reset(channel.temp_userlist || []);
550
551 // Clear the temporary userlist
552 delete channel.temp_userlist;
553 }
554
555
556
557 function onMode(event) {
558 var channel, i, prefixes, members, member, find_prefix;
559
560 // Build a nicely formatted string to be displayed to a regular human
561 function friendlyModeString (event_modes, alt_target) {
562 var modes = {}, return_string;
563
564 // If no default given, use the main event info
565 if (!event_modes) {
566 event_modes = event.modes;
567 alt_target = event.target;
568 }
569
570 // Reformat the mode object to make it easier to work with
571 _.each(event_modes, function (mode){
572 var param = mode.param || alt_target || '';
573
574 // Make sure we have some modes for this param
575 if (!modes[param]) {
576 modes[param] = {'+':'', '-':''};
577 }
578
579 modes[param][mode.mode[0]] += mode.mode.substr(1);
580 });
581
582 // Put the string together from each mode
583 return_string = [];
584 _.each(modes, function (modeset, param) {
585 var str = '';
586 if (modeset['+']) str += '+' + modeset['+'];
587 if (modeset['-']) str += '-' + modeset['-'];
588 return_string.push(str + ' ' + param);
589 });
590 return_string = return_string.join(', ');
591
592 return return_string;
593 }
594
595
596 channel = this.panels.getByName(event.target);
597 if (channel) {
598 prefixes = this.get('user_prefixes');
599 find_prefix = function (p) {
600 return event.modes[i].mode[1] === p.mode;
601 };
602 for (i = 0; i < event.modes.length; i++) {
603 if (_.any(prefixes, find_prefix)) {
604 if (!members) {
605 members = channel.get('members');
606 }
607 member = members.getByNick(event.modes[i].param);
608 if (!member) {
609 console.log('MODE command recieved for unknown member %s on channel %s', event.modes[i].param, event.target);
610 return;
611 } else {
612 if (event.modes[i].mode[0] === '+') {
613 member.addMode(event.modes[i].mode[1]);
614 } else if (event.modes[i].mode[0] === '-') {
615 member.removeMode(event.modes[i].mode[1]);
616 }
617 members.sort();
618 //channel.addMsg('', '== ' + event.nick + ' set mode ' + event.modes[i].mode + ' ' + event.modes[i].param, 'action mode');
619 }
620 } else {
621 // Channel mode being set
622 // TODO: Store this somewhere?
623 //channel.addMsg('', 'CHANNEL === ' + event.nick + ' set mode ' + event.modes[i].mode + ' on ' + event.target, 'action mode');
624 }
625 }
626
247dd7ac 627 channel.addMsg('', '== ' + _kiwi.global.i18n.translate('client_models_network_mode').fetch(event.nick, friendlyModeString()), 'action mode');
ce13508b
D
628 } else {
629 // This is probably a mode being set on us.
630 if (event.target.toLowerCase() === this.get("nick").toLowerCase()) {
247dd7ac 631 this.panels.server.addMsg('', '== ' + _kiwi.global.i18n.translate('client_models_network_selfmode').fetch(event.nick, friendlyModeString()), 'action mode');
ce13508b
D
632 } else {
633 console.log('MODE command recieved for unknown target %s: ', event.target, event);
634 }
635 }
636 }
637
638
639
640 function onWhois(event) {
641 var logon_date, idle_time = '', panel;
642
643 if (event.end)
644 return;
645
646 if (typeof event.idle !== 'undefined') {
647 idle_time = secondsToTime(parseInt(event.idle, 10));
648 idle_time = idle_time.h.toString().lpad(2, "0") + ':' + idle_time.m.toString().lpad(2, "0") + ':' + idle_time.s.toString().lpad(2, "0");
649 }
650
e7d65587 651 panel = _kiwi.app.panels().active;
ce13508b
D
652 if (event.ident) {
653 panel.addMsg(event.nick, event.nick + ' [' + event.nick + '!' + event.ident + '@' + event.host + '] * ' + event.msg, 'whois');
654 } else if (event.chans) {
247dd7ac 655 panel.addMsg(event.nick, _kiwi.global.i18n.translate('client_models_network_channels').fetch(event.chans), 'whois');
ce13508b 656 } else if (event.irc_server) {
247dd7ac 657 panel.addMsg(event.nick, _kiwi.global.i18n.translate('client_models_network_server').fetch(event.irc_server, event.server_info), 'whois');
ce13508b
D
658 } else if (event.msg) {
659 panel.addMsg(event.nick, event.msg, 'whois');
660 } else if (event.logon) {
661 logon_date = new Date();
662 logon_date.setTime(event.logon * 1000);
663 logon_date = formatDate(logon_date);
664
247dd7ac 665 panel.addMsg(event.nick, _kiwi.global.i18n.translate('client_models_network_idle_and_signon').fetch(idle_time, logon_date), 'whois');
f701d5ba 666 } else if (event.away_reason) {
247dd7ac 667 panel.addMsg(event.nick, _kiwi.global.i18n.translate('client_models_network_away').fetch(event.away_reason), 'whois');
ce13508b 668 } else {
247dd7ac 669 panel.addMsg(event.nick, _kiwi.global.i18n.translate('client_models_network_idle').fetch(idle_time), 'whois');
ce13508b
D
670 }
671 }
672
5989f3f4
JA
673 function onWhowas(event) {
674 var panel;
675
676 if (event.end)
677 return;
678
679 panel = _kiwi.app.panels().active;
680 if (event.host) {
681 panel.addMsg(event.nick, event.nick + ' [' + event.nick + ((event.ident)? '!' + event.ident : '') + '@' + event.host + '] * ' + event.real_name, 'whois');
682 } else {
247dd7ac 683 panel.addMsg(event.nick, _kiwi.global.i18n.translate('client_models_network_nickname_notfound').fetch(), 'whois');
5989f3f4
JA
684 }
685 }
ce13508b
D
686
687
688 function onAway(event) {
689 $.each(this.panels.models, function (index, panel) {
690 if (!panel.isChannel()) return;
691
692 member = panel.get('members').getByNick(event.nick);
693 if (member) {
694 member.set('away', !(!event.trailing));
695 }
696 });
697 }
698
699
700
701 function onListStart(event) {
b24da6ba
D
702 var chanlist = _kiwi.model.Applet.loadOnce('kiwi_chanlist');
703 chanlist.view.show();
ce13508b
D
704 }
705
706
707
708 function onIrcError(event) {
709 var panel, tmp;
710
f8240e98 711 if (event.channel !== undefined && !(panel = this.panels.getByName(event.channel))) {
ce13508b
D
712 panel = this.panels.server;
713 }
714
715 switch (event.error) {
716 case 'banned_from_channel':
247dd7ac
N
717 panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_banned').fetch(event.channel, event.reason), 'status');
718 _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_banned').fetch(event.channel, event.reason));
ce13508b
D
719 break;
720 case 'bad_channel_key':
247dd7ac
N
721 panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_channel_badkey').fetch(event.channel), 'status');
722 _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_channel_badkey').fetch(event.channel));
ce13508b
D
723 break;
724 case 'invite_only_channel':
247dd7ac
N
725 panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_channel_inviteonly').fetch(event.channel), 'status');
726 _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_channel_inviteonly').fetch(event.channel));
ce13508b
D
727 break;
728 case 'channel_is_full':
247dd7ac
N
729 panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_channel_limitreached').fetch(event.channel), 'status');
730 _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_channel_limitreached').fetch(event.channel));
ce13508b
D
731 break;
732 case 'chanop_privs_needed':
733 panel.addMsg(' ', '== ' + event.reason, 'status');
734 _kiwi.app.message.text(event.reason + ' (' + event.channel + ')');
735 break;
736 case 'no_such_nick':
737 tmp = this.panels.getByName(event.nick);
738 if (tmp) {
739 tmp.addMsg(' ', '== ' + event.nick + ': ' + event.reason, 'status');
740 } else {
741 this.panels.server.addMsg(' ', '== ' + event.nick + ': ' + event.reason, 'status');
742 }
743 break;
744 case 'nickname_in_use':
247dd7ac 745 this.panels.server.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_nickname_alreadyinuse').fetch( event.nick), 'status');
2e06af20 746 if (this.panels.server !== this.panels.active) {
247dd7ac 747 _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_nickname_alreadyinuse').fetch(event.nick));
ce13508b
D
748 }
749
750 // Only show the nickchange component if the controlbox is open
2e06af20 751 if (_kiwi.app.controlbox.$el.css('display') !== 'none') {
ce13508b
D
752 (new _kiwi.view.NickChangeBox()).render();
753 }
754
755 break;
756
757 case 'password_mismatch':
247dd7ac 758 this.panels.server.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_badpassword').fetch(), 'status');
ce13508b
D
759 break;
760 default:
761 // We don't know what data contains, so don't do anything with it.
762 //_kiwi.front.tabviews.server.addMsg(null, ' ', '== ' + data, 'status');
763 }
764 }
765}
766
eed5ac29 767)();