Add ACP list active channels

This commit is contained in:
calzoneman 2014-02-06 23:31:47 -06:00
parent 359a228d5f
commit afa17165f7
3 changed files with 72 additions and 1 deletions

View File

@ -14,6 +14,7 @@ var Server = require("./server");
var db = require("./database"); var db = require("./database");
var util = require("./utilities"); var util = require("./utilities");
var Config = require("./config"); var Config = require("./config");
var Server = require("./server");
function handleAnnounce(user, data) { function handleAnnounce(user, data) {
var sv = Server.getServer(); var sv = Server.getServer();
@ -240,6 +241,29 @@ function handleDeleteChannel(user, data) {
}); });
} }
function handleListActiveChannels(user) {
user.socket.emit("acp-list-activechannels", Server.getServer().packChannelList(false));
}
function handleForceUnload(user, data) {
var name = data.name;
if (typeof name !== "string") {
return;
}
var sv = Server.getServer();
if (!sv.isChannelLoaded(name)) {
return;
}
var chan = sv.getChannel(name);
var users = Array.prototype.slice.call(chan.users);
chan.emit("empty");
users.forEach(function (u) {
u.kick("Channel shutting down");
});
}
function init(user) { function init(user) {
var s = user.socket; var s = user.socket;
s.on("acp-announce", handleAnnounce.bind(this, user)); s.on("acp-announce", handleAnnounce.bind(this, user));
@ -251,6 +275,8 @@ function init(user) {
s.on("acp-reset-password", handleResetPassword.bind(this, user)); s.on("acp-reset-password", handleResetPassword.bind(this, user));
s.on("acp-list-channels", handleListChannels.bind(this, user)); s.on("acp-list-channels", handleListChannels.bind(this, user));
s.on("acp-delete-channel", handleDeleteChannel.bind(this, user)); s.on("acp-delete-channel", handleDeleteChannel.bind(this, user));
s.on("acp-list-activechannels", handleListActiveChannels.bind(this, user));
s.on("acp-force-unload", handleForceUnload.bind(this, user));
db.listGlobalBans(function (err, bans) { db.listGlobalBans(function (err, bans) {
if (err) { if (err) {

View File

@ -195,7 +195,9 @@ Server.prototype.packChannel = function (c) {
usercount: c.users.length, usercount: c.users.length,
voteskip_eligible: c.calcVoteskipMax(), voteskip_eligible: c.calcVoteskipMax(),
users: [], users: [],
chat: Array.prototype.slice.call(c.chatbuffer) chat: Array.prototype.slice.call(c.chatbuffer),
registered: c.registered,
public: c.opts.show_public
}; };
for (var i = 0; i < c.users.length; i++) { for (var i = 0; i < c.users.length; i++) {

View File

@ -6,6 +6,7 @@
window.socket = io.connect(IO_URL, opts); window.socket = io.connect(IO_URL, opts);
window.socket.on("connect", function () { window.socket.on("connect", function () {
window.socket.emit("initACP"); window.socket.emit("initACP");
window.socket.emit("acp-list-activechannels");
}); });
window.socket.on("errMessage", function (data) { window.socket.on("errMessage", function (data) {
@ -346,6 +347,48 @@ socket.on("acp-delete-channel", function (data) {
.remove(); .remove();
}); });
/* Active channels */
socket.on("acp-list-activechannels", function (channels) {
var tbl = $("#acp-loaded-channels table");
tbl.find("tbody").remove();
channels.sort(function (a, b) {
if (a.usercount === b.usercount) {
var x = a.name.toLowerCase();
var y = b.name.toLowerCase();
return x === y ? 0 : (x > y ? 1 : -1);
}
return a.usercount > b.usercount ? -1 : 1;
});
channels.forEach(function (c) {
var tr = $("<tr/>").appendTo(tbl);
var name = $("<td/>").appendTo(tr);
$("<a/>").attr("href", "/r/" + c.name)
.text(c.pagetitle + " (/r/" + c.name + ")")
.appendTo(name);
var usercount = $("<td/>").text(c.usercount).appendTo(tr);
var nowplaying = $("<td/>").text(c.mediatitle).appendTo(tr);
var registered = $("<td/>").text(c.registered).appendTo(tr);
var public = $("<td/>").text(c.public).appendTo(tr);
var unload = $("<td/>").appendTo(tr);
$("<button/>").addClass("btn btn-danger btn-xs").text("Force Unload")
.appendTo(unload)
.click(function () {
if (confirm("Are you sure you want to unload /r/" + c.name + "?")) {
socket.emit("acp-force-unload", {
name: c.name
});
}
});
});
});
$("#acp-lchannels-refresh").click(function () {
socket.emit("acp-list-activechannels");
});
/* Initialize keyed table sorts */ /* Initialize keyed table sorts */
$("table").each(function () { $("table").each(function () {
var table = $(this); var table = $(this);