]> jfr.im git - irc/quakenet/qwebirc.git/blob - js/irc/irctracker.js
Reorganise.
[irc/quakenet/qwebirc.git] / js / irc / irctracker.js
1 function NickChanEntry() {
2 this.prefixes = "";
3 }
4
5 var IRCTracker = new Class({
6 initialize: function() {
7 this.channels = {};
8 this.nicknames = {};
9 },
10 isEmpty: function(hash) {
11 for(var x in hash)
12 return false;
13 return true;
14 },
15 getNick: function(nick) {
16 return this.nicknames[nick];
17 },
18 getOrCreateNick: function(nick) {
19 var n = this.getNick(nick);
20 if(!n)
21 n = this.nicknames[nick] = {};
22 return n;
23 },
24 getChannel: function(channel) {
25 return this.channels[channel];
26 },
27 getOrCreateChannel: function(channel) {
28 var c = this.getChannel(channel);
29 if(!c)
30 c = this.channels[channel] = {};
31 return c;
32 },
33 getOrCreateNickOnChannel: function(nick, channel) {
34 var n = this.getNick(nick);
35
36 var nc = n[channel];
37 if(!nc)
38 return this.addNickToChannel(nick, channel);
39
40 return nc;
41 },
42 addNickToChannel: function(nick, channel) {
43 var nc = new NickChanEntry();
44
45 var n = this.getOrCreateNick(nick);
46 n[channel] = nc;
47
48 var c = this.getOrCreateChannel(channel);
49 c[nick] = nc;
50
51 return nc;
52 },
53 removeNick: function(nick) {
54 var n = this.getNick(nick);
55 if(!n)
56 return;
57
58 for(var channel in n) {
59 var c = this.channels[channel];
60
61 delete c[nick];
62 if(this.isEmpty(c))
63 delete this.channels[channel];
64 }
65 delete this.nicknames[nick];
66 },
67 removeChannel: function(channel) {
68 var c = this.getChannel(channel);
69 if(!c)
70 return;
71
72 for(var nick in c) {
73 var n = this.nicknames[nick];
74
75 delete n[channel];
76 if(this.isEmpty(n))
77 delete this.nicknames[nick];
78 }
79 delete this.channels[channel];
80 },
81 removeNickFromChannel: function(nick, channel) {
82 var n = this.getNick(nick);
83 var c = this.getChannel(channel);
84 if(!n || !c)
85 return;
86
87 delete n[channel];
88 delete c[nick];
89
90 if(this.isEmpty(n))
91 delete this.nicknames[nick];
92 if(this.isEmpty(c))
93 delete this.channels[channel];
94 },
95 renameNick: function(oldnick, newnick) {
96 var n = this.getNick(oldnick);
97 if(!n)
98 return;
99
100 for(var channel in n) {
101 this.channels[channel][newnick] = this.channels[channel][oldnick];
102 delete this.channels[channel][oldnick];
103 }
104
105 this.nicknames[newnick] = this.nicknames[oldnick];
106 delete this.nicknames[oldnick];
107 }
108 });