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