Sort user list within a single pass, use server provided user modes

This commit is contained in:
Pavel Djundik 2016-03-14 13:44:06 +02:00 committed by Maxime Poulin
parent 516ccd965f
commit 071881a9fa
4 changed files with 17 additions and 14 deletions

View file

@ -23,18 +23,21 @@ function Chan(attr) {
}, attr));
}
Chan.prototype.sortUsers = function() {
this.users = _.sortBy(
this.users,
function(u) { return u.name.toLowerCase(); }
);
Chan.prototype.sortUsers = function(irc) {
var userModeSortPriority = {};
irc.network.options.PREFIX.forEach(function(prefix, index) {
userModeSortPriority[prefix.symbol] = index;
});
["+", "%", "@", "&", "~"].forEach(function(mode) {
this.users = _.remove(
this.users,
function(u) { return u.mode === mode; }
).concat(this.users);
}, this);
userModeSortPriority[""] = 99; // No mode is lowest
this.users = this.users.sort(function(a, b) {
if (a.mode === b.mode) {
return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;
}
return userModeSortPriority[a.mode] - userModeSortPriority[b.mode];
});
};
Chan.prototype.getMode = function(name) {

View file

@ -19,7 +19,7 @@ module.exports = function(irc, network) {
});
}
chan.users.push(new User({nick: data.nick, modes: ""}));
chan.sortUsers();
chan.sortUsers(irc);
client.emit("users", {
chan: chan.id
});

View file

@ -19,7 +19,7 @@ module.exports = function(irc, network) {
chan.users.push(user);
});
chan.sortUsers();
chan.sortUsers(irc);
client.emit("users", {
chan: chan.id
});

View file

@ -29,7 +29,7 @@ module.exports = function(irc, network) {
return;
}
user.name = data.newnick;
chan.sortUsers();
chan.sortUsers(irc);
client.emit("users", {
chan: chan.id
});