Fix more things

This commit is contained in:
calzoneman 2014-01-07 22:47:00 -06:00
parent 1aa464caa5
commit 22c4e8f9ff
5 changed files with 122 additions and 54 deletions

View file

@ -73,7 +73,7 @@ function initChannelDumper(Server) {
for (var i = 0; i < Server.channels.length; i++) { for (var i = 0; i < Server.channels.length; i++) {
var chan = Server.channels[i]; var chan = Server.channels[i];
if (!chan.dead && chan.users && chan.users.length > 0) { if (!chan.dead && chan.users && chan.users.length > 0) {
chan.saveDump(); chan.saveState();
} }
} }
}, CHANNEL_SAVE_INTERVAL); }, CHANNEL_SAVE_INTERVAL);

View file

@ -467,7 +467,7 @@ Channel.prototype.join = function (user, password) {
user.whenLoggedIn(function () { user.whenLoggedIn(function () {
var lname = user.name.toLowerCase(); var lname = user.name.toLowerCase();
for (var i = 0; i < self.users.length; i++) { for (var i = 0; i < self.users.length; i++) {
if (self.users[i] !== user) { if (self.users[i].name.toLowerCase() === lname && self.users[i] !== user) {
self.users[i].kick("Duplicate login"); self.users[i].kick("Duplicate login");
} }
} }
@ -485,6 +485,7 @@ Channel.prototype.join = function (user, password) {
user.socket.emit("rank", user.rank); user.socket.emit("rank", user.rank);
self.sendUserJoin(self.users, user); self.sendUserJoin(self.users, user);
self.sendUserlist([user]);
}); });
}); });
@ -994,34 +995,29 @@ Channel.prototype.sendDrinkCount = function (users) {
*/ */
Channel.prototype.sendUserlist = function (toUsers) { Channel.prototype.sendUserlist = function (toUsers) {
var self = this; var self = this;
var users = []; var base = [];
var detailedUsers = []; var mod = [];
var sadmin = [];
for (var i = 0; i < this.users.length; i++) { for (var i = 0; i < self.users.length; i++) {
var u = this.users[i]; var u = self.users[i];
if (u.name === "") { if (u.name === "") {
continue; continue;
} }
users.push({ var data = self.packUserData(self.users[i]);
name: u.name, base.push(data.base);
rank: u.rank, mod.push(data.mod);
profile: u.profile sadmin.push(data.sadmin);
});
detailedUsers.push({
name: u.name,
rank: u.rank,
meta: u.meta,
profile: u.profile
});
} }
toUsers.forEach(function (u) { toUsers.forEach(function (u) {
if (u.rank >= 2) { if (u.global_rank >= 255) {
u.socket.emit("userlist", detailedUsers); u.socket.emit("userlist", sadmin);
} else if (u.rank >= 2) {
u.socket.emit("userlist", mod);
} else { } else {
u.socket.emit("userlist", users); u.socket.emit("userlist", base);
} }
if (self.leader != null) { if (self.leader != null) {
@ -1052,6 +1048,53 @@ Channel.prototype.sendRecentChat = function (users) {
}); });
}; };
/**
* Packs userdata for addUser or userlist
*/
Channel.prototype.packUserData = function (user) {
var base = {
name: user.name,
rank: user.rank,
profile: user.profile,
meta: {
afk: user.meta.afk,
muted: user.meta.muted && !user.meta.smuted
}
};
var mod = {
name: user.name,
rank: user.rank,
profile: user.profile,
meta: {
afk: user.meta.afk,
muted: user.meta.muted,
smuted: user.meta.smuted,
aliases: user.meta.aliases,
ip: util.maskIP(user.ip)
}
};
var sadmin = {
name: user.name,
rank: user.rank,
profile: user.profile,
meta: {
afk: user.meta.afk,
muted: user.meta.muted,
smuted: user.meta.smuted,
aliases: user.meta.aliases,
ip: user.ip
}
};
return {
base: base,
mod: mod,
sadmin: sadmin
};
};
/** /**
* Send a user join notification * Send a user join notification
*/ */
@ -1062,7 +1105,7 @@ Channel.prototype.sendUserJoin = function (users, user) {
return; return;
} }
if (err) { if (err || aliases.length === 0) {
aliases = [user.name]; aliases = [user.name];
} }
@ -1076,41 +1119,20 @@ Channel.prototype.sendUserJoin = function (users, user) {
if (self.isShadowMuted(user.name)) { if (self.isShadowMuted(user.name)) {
user.meta.muted = true; user.meta.muted = true;
user.meta.shadowmuted = true; user.meta.shadowmuted = true;
user.meta.icon = "icon-volume-off";
} else if (self.isMuted(user.name)) { } else if (self.isMuted(user.name)) {
user.meta.muted = true; user.meta.muted = true;
user.meta.shadowmuted = false; user.meta.shadowmuted = false;
user.meta.icon = "icon-volume-off";
} }
var base = { var data = self.packUserData(user);
name: user.name,
rank: user.rank,
profile: user.profile,
meta: {
afk: user.meta.afk
}
};
if (user.meta.icon && !user.meta.shadowmuted) {
base.meta.icon = user.meta.icon;
}
var mod = {
name: user.name,
rank: user.rank,
profile: user.profile,
meta: {
afk: user.meta.afk,
icon: user.meta.icon
}
};
users.forEach(function (u) { users.forEach(function (u) {
if (u.rank >= 2) { if (u.global_rank >= 255) {
u.socket.emit("addUser", mod); u.socket.emit("addUser", data.sadmin);
} else if (u.rank >= 2) {
u.socket.emit("addUser", data.mod);
} else { } else {
u.socket.emit("addUser", base); u.socket.emit("addUser", data.base);
} }
}); });

View file

@ -126,6 +126,34 @@ User.prototype.kick = function (reason) {
this.socket.disconnect(true); this.socket.disconnect(true);
}; };
/**
* Packs user metadata
*/
User.prototype.packMeta = function (opts) {
var meta = {};
if (opts.afk) {
meta.afk = this.meta.afk;
}
if (opts.aliases) {
meta.aliases = this.meta.aliases;
}
if (opts.ip) {
meta.ip = this.ip;
}
if (opts.muted) {
meta.muted = this.meta.muted;
}
if (opts.smuted) {
meta.smuted = this.meta.smuted;
}
return meta;
};
/** /**
* Initializes socket message callbacks for a channel user * Initializes socket message callbacks for a channel user
*/ */

View file

@ -713,7 +713,7 @@ Callbacks = {
div.data("rank", data.rank); div.data("rank", data.rank);
div.data("leader", Boolean(data.leader)); div.data("leader", Boolean(data.leader));
div.data("profile", data.profile); div.data("profile", data.profile);
div.data("icon", data.meta.icon); div.data("meta", data.meta);
div.data("afk", data.meta.afk); div.data("afk", data.meta.afk);
formatUserlistItem(div, data); formatUserlistItem(div, data);
addUserDropdown(div, data); addUserDropdown(div, data);
@ -721,6 +721,15 @@ Callbacks = {
sortUserlist(); sortUserlist();
}, },
setUserMeta: function (data) {
var user = findUserlistItem(data.name);
if (user == null) {
return;
}
user.data("meta", data);
},
setUserProfile: function (data) { setUserProfile: function (data) {
var user = findUserlistItem(data.name); var user = findUserlistItem(data.name);
if (user === null) if (user === null)
@ -978,8 +987,8 @@ Callbacks = {
handleMediaUpdate(data); handleMediaUpdate(data);
}, },
setPlaylistLocked: function(data) { setPlaylistLocked: function (locked) {
CHANNEL.openqueue = !data.locked; CHANNEL.openqueue = !locked;
handlePermissionChange(); handlePermissionChange();
if(CHANNEL.openqueue) { if(CHANNEL.openqueue) {
$("#qlockbtn").removeClass("btn-danger") $("#qlockbtn").removeClass("btn-danger")
@ -1191,7 +1200,7 @@ Callbacks = {
} }
} }
var SOCKET_DEBUG = false; var SOCKET_DEBUG = true;
setupCallbacks = function() { setupCallbacks = function() {
for(var key in Callbacks) { for(var key in Callbacks) {
(function(key) { (function(key) {

View file

@ -110,6 +110,15 @@ function formatUserlistItem(div) {
.appendTo(profile); .appendTo(profile);
} }
$("<strong/>").text(data.name).appendTo(profile); $("<strong/>").text(data.name).appendTo(profile);
var meta = div.data("meta") || {};
if (meta.ip) {
$("<br/>").appendTo(profile);
$("<em/>").text(meta.ip).appendTo(profile);
}
if (meta.aliases) {
$("<p/>").text("aliases: " + meta.aliases.join(", ")).appendTo(profile);
}
$("<p/>").text(data.profile.text).appendTo(profile); $("<p/>").text(data.profile.text).appendTo(profile);
}); });
name.mousemove(function(ev) { name.mousemove(function(ev) {
@ -555,7 +564,7 @@ function showUserOptions() {
$("#us-chat-notice").prop("checked", USEROPTS.blink_title); $("#us-chat-notice").prop("checked", USEROPTS.blink_title);
$("#us-boop").prop("checked", USEROPTS.boop); $("#us-boop").prop("checked", USEROPTS.boop);
$("#us-sendbtn").prop("checked", USEROPTS.chatbtn); $("#us-sendbtn").prop("checked", USEROPTS.chatbtn);
$("#us-modflair").prop("checked", USEROPTS.modhat); $("#us-modflair").prop("checked", USEROPTS.modhat);
$("#us-joinmessage").prop("checked", USEROPTS.joinmessage); $("#us-joinmessage").prop("checked", USEROPTS.joinmessage);