From afa17165f7f1cb12c23ad897e9fc55a86c279030 Mon Sep 17 00:00:00 2001 From: calzoneman Date: Thu, 6 Feb 2014 23:31:47 -0600 Subject: [PATCH] Add ACP list active channels --- lib/acp.js | 26 ++++++++++++++++++++++++++ lib/server.js | 4 +++- www/js/acp.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/lib/acp.js b/lib/acp.js index 21f157e3..114e3153 100644 --- a/lib/acp.js +++ b/lib/acp.js @@ -14,6 +14,7 @@ var Server = require("./server"); var db = require("./database"); var util = require("./utilities"); var Config = require("./config"); +var Server = require("./server"); function handleAnnounce(user, data) { 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) { var s = user.socket; 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-list-channels", handleListChannels.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) { if (err) { diff --git a/lib/server.js b/lib/server.js index 8f64193d..8d27e901 100644 --- a/lib/server.js +++ b/lib/server.js @@ -195,7 +195,9 @@ Server.prototype.packChannel = function (c) { usercount: c.users.length, voteskip_eligible: c.calcVoteskipMax(), 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++) { diff --git a/www/js/acp.js b/www/js/acp.js index ab89d167..38aa4d79 100644 --- a/www/js/acp.js +++ b/www/js/acp.js @@ -6,6 +6,7 @@ window.socket = io.connect(IO_URL, opts); window.socket.on("connect", function () { window.socket.emit("initACP"); + window.socket.emit("acp-list-activechannels"); }); window.socket.on("errMessage", function (data) { @@ -346,6 +347,48 @@ socket.on("acp-delete-channel", function (data) { .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 = $("").appendTo(tbl); + var name = $("").appendTo(tr); + $("").attr("href", "/r/" + c.name) + .text(c.pagetitle + " (/r/" + c.name + ")") + .appendTo(name); + var usercount = $("").text(c.usercount).appendTo(tr); + var nowplaying = $("").text(c.mediatitle).appendTo(tr); + var registered = $("").text(c.registered).appendTo(tr); + var public = $("").text(c.public).appendTo(tr); + var unload = $("").appendTo(tr); + $("