]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/irc/irctracker.js
1 qwebirc
.irc
.NickChanEntry = function() {
3 this.lastSpoke
= -Infinity
;
6 qwebirc
.irc
.IRCTracker
= new Class({
7 initialize: function(owner
) {
8 this.channels
= new QHash();
9 this.nicknames
= new QHash();
12 toIRCLower: function(value
) {
13 /* proxied because the method can change after we connect */
15 return this.owner
.toIRCLower(value
);
17 getNick: function(nick
) {
18 return this.nicknames
.get(nick
);
20 getOrCreateNick: function(nick
) {
21 var n
= this.getNick(nick
);
24 this.nicknames
.put(nick
, n
);
28 getChannel: function(channel
) {
29 return this.channels
.get(this.toIRCLower(channel
));
31 getOrCreateChannel: function(channel
) {
32 var c
= this.getChannel(channel
);
35 this.channels
.put(this.toIRCLower(channel
), c
);
39 getOrCreateNickOnChannel: function(nick
, channel
) {
40 var n
= this.getOrCreateNick(nick
);
42 var nc
= n
.get(this.toIRCLower(channel
));
44 return this.addNickToChannel(nick
, channel
);
48 getNickOnChannel: function(nick
, channel
) {
49 var n
= this.getNick(nick
);
53 return n
.get(this.toIRCLower(channel
));
55 addNickToChannel: function(nick
, channel
) {
56 var nc
= new qwebirc
.irc
.NickChanEntry();
58 var n
= this.getOrCreateNick(nick
);
59 n
.put(this.toIRCLower(channel
), nc
);
61 var c
= this.getOrCreateChannel(channel
);
66 removeNick: function(nick
) {
67 var n
= this.getNick(nick
);
71 n
.each(function(channel
) {
72 var lchannel
= this.toIRCLower(channel
);
73 var c
= this.channels
.get(lchannel
);
77 this.channels
.remove(lchannel
);
79 this.nicknames
.remove(nick
);
81 removeChannel: function(channel
) {
82 var c
= this.getChannel(channel
);
86 var lchannel
= this.toIRCLower(channel
);
88 c
.each(function(nick
) {
89 var n
= this.nicknames
.get(nick
);
93 this.nicknames
.remove(nick
);
95 this.channels
.remove(lchannel
);
97 removeNickFromChannel: function(nick
, channel
) {
98 var lchannel
= this.toIRCLower(channel
);
100 var n
= this.getNick(nick
);
101 var c
= this.getChannel(lchannel
);
109 this.nicknames
.remove(nick
);
111 this.channels
.remove(lchannel
);
113 renameNick: function(oldnick
, newnick
) {
114 var n
= this.getNick(oldnick
);
118 n
.each(function(channel
) {
119 var c
= this.channels
.get(this.toIRCLower(channel
));
120 c
.put(newnick
, c
.get(oldnick
));
124 this.nicknames
.put(newnick
, this.nicknames
.get(oldnick
));
125 this.nicknames
.remove(oldnick
);
127 updateLastSpoke: function(nick
, channel
, time
) {
128 var nc
= this.getNickOnChannel(nick
, channel
);
132 __mapAndSortEntries: function(channel
, fn
, pos
) {
133 var c
= this.getChannel(channel
);
138 n
.sort(qwebirc
.util
.arrayCmp
);
141 for(var i
=0;i
<n
.length
;i
++)
146 getSortedByLastSpoke: function(channel
) {
147 var l
= this.toIRCLower
.bind(this);
148 return this.__mapAndSortEntries(channel
, function(nick
, nc
) {
149 return [-nc
.lastSpoke
, l(nick
)];
152 getSortedByLastSpokePrefix: function(channel
) {
153 var p
= this.owner
.getPrefixPriority
.bind(this.owner
);
154 var l
= this.toIRCLower
.bind(this);
155 return this.__mapAndSortEntries(channel
, function(nick
, nc
) {
156 return [-nc
.lastSpoke
, p(nc
.prefixes
), l(nick
), nick
];