diff --git a/lib/channel.js b/lib/channel.js index 2f58cb0d..4cc2b2d2 100644 --- a/lib/channel.js +++ b/lib/channel.js @@ -168,6 +168,7 @@ Channel.prototype.tryLoadState = function () { // Don't load state if the channel isn't registered if (!self.registered) { + self.setUnregisteredPermissions(); self.emit("ready"); return; } @@ -453,9 +454,6 @@ Channel.prototype.preJoin = function (user, password) { if (err) { user.rank = user.global_rank; } else { - if (!self.registered && user.rank > 2 && rank <= 2) { - return; - } user.rank = Math.max(rank, user.global_rank); } @@ -519,21 +517,6 @@ Channel.prototype.join = function (user) { } } - if (!self.registered) { - var hasAdmin = false; - for (var i = 0; i < self.users.length; i++) { - if (self.users[i].rank > 2) { - hasAdmin = true; - break; - } - } - - if (!hasAdmin) { - user.rank = 4; - user.socket.emit("rank", 4); - } - } - self.sendUserJoin(self.users, user); self.sendUserlist([user]); }; @@ -628,19 +611,6 @@ Channel.prototype.part = function (user) { self.users.splice(idx, 1); } - if (!self.registered && user.rank === 4) { - if (self.users.length > 0) { - for (var i = 0; i < self.users.length; i++) { - self.users[i].rank = 4; - self.users[i].socket.emit("rank", 4); - self.sendAll("setUserRank", { - name: self.users[i].name, - rank: 4 - }); - } - } - } - // A change in usercount might cause a voteskip result to change self.checkVoteskipPass(); self.sendUsercount(self.users); @@ -3014,4 +2984,40 @@ Channel.prototype.sendAll = function (msg, data) { }); }; +/** + * Loads a special set of permissions for unregistered channels + */ +Channel.prototype.setUnregisteredPermissions = function () { + this.permissions = { + playlistadd: -1, // Add video to the playlist + playlistnext: 0, + playlistmove: 0, // Move a video on the playlist + playlistdelete: 0, // Delete a video from the playlist + playlistjump: 0, // Start a different video on the playlist + playlistaddlist: 0, // Add a list of videos to the playlist + oplaylistadd: -1, // Same as above, but for open (unlocked) playlist + oplaylistnext: 0, + oplaylistmove: 0, + oplaylistdelete: 0, + oplaylistjump: 0, + oplaylistaddlist: 0, + playlistaddcustom: 0, // Add custom embed to the playlist + playlistaddlive: 0, // Add a livestream to the playlist + exceedmaxlength: 0, // Add a video longer than the maximum length set + addnontemp: 0, // Add a permanent video to the playlist + settemp: 0, // Toggle temporary status of a playlist item + playlistshuffle: 0, // Shuffle the playlist + playlistclear: 0, // Clear the playlist + pollctl: 0, // Open/close polls + pollvote: -1, // Vote in polls + viewhiddenpoll: 1.5, // View results of hidden polls + voteskip: -1, // Vote to skip the current video + playlistlock: 2, // Lock/unlock the playlist + leaderctl: 0, // Give/take leader + drink: 0, // Use the /d command + chat: 0 // Send chat messages + }; + this.sendAll("setPermissions", this.permissions); +} + module.exports = Channel; diff --git a/lib/database/channels.js b/lib/database/channels.js index 42c7542e..2a806c09 100644 --- a/lib/database/channels.js +++ b/lib/database/channels.js @@ -264,7 +264,6 @@ module.exports = { err = e4; } - console.log(path.join(__dirname, "..", "..", "chandump", name)); fs.unlink(path.join(__dirname, "..", "..", "chandump", name), function (err) { if (err) { diff --git a/lib/server.js b/lib/server.js index 59de565d..8f64193d 100644 --- a/lib/server.js +++ b/lib/server.js @@ -127,7 +127,7 @@ Server.prototype.getSocketIP = function (socket) { Server.prototype.isChannelLoaded = function (name) { name = name.toLowerCase(); for (var i = 0; i < this.channels.length; i++) { - if (this.channels[i].canonical_name == name) + if (this.channels[i].uniqueName == name) return true; } return false; @@ -150,6 +150,10 @@ Server.prototype.getChannel = function (name) { }; Server.prototype.unloadChannel = function (chan) { + if (chan.dead) { + return; + } + if (chan.registered) { chan.saveState(); } diff --git a/lib/userplaylists.js b/lib/userplaylists.js index 9f9f3822..ad38b15b 100644 --- a/lib/userplaylists.js +++ b/lib/userplaylists.js @@ -57,11 +57,14 @@ function deletePlaylist(user, data) { } module.exports.init = function (user) { - console.log('Initializing playlists for ' + user.name); + if (user.userPlInited) { + return; + } + var s = user.socket; var wrap = function (cb) { return function (data) { - if (!user.loggedIn || user.rank < 1) { + if (!user.loggedIn || user.global_rank < 1) { s.emit("errorMsg", { msg: "You must be logged in to manage playlists" }); @@ -74,4 +77,5 @@ module.exports.init = function (user) { s.on("listPlaylists", wrap(listPlaylists)); s.on("clonePlaylist", wrap(clonePlaylist)); s.on("deletePlaylist", wrap(deletePlaylist)); + user.userPlInited = true; }; diff --git a/lib/web/account.js b/lib/web/account.js index 67289acd..9c664678 100644 --- a/lib/web/account.js +++ b/lib/web/account.js @@ -11,6 +11,7 @@ var Logger = require("../logger"); var db = require("../database"); var $util = require("../utilities"); var Config = require("../config"); +var Server = require("../server"); /** * Handles a GET request for /account/edit @@ -255,7 +256,19 @@ function handleNewChannel(req, res) { Logger.eventlog.log("[channel] " + user.name + "@" + webserver.ipForRequest(req) + " registered channel " + name); + var sv = Server.getServer(); + if (sv.isChannelLoaded(name)) { + var chan = sv.getChannel(name); + chan.users.forEach(function (u) { + u.kick("Channel reloading"); + }); + + if (!chan.dead) { + chan.emit("empty"); + } + } } + db.channels.listUserChannels(loginName, function (err2, channels) { sendJade(res, "account-channels", { loggedIn: true, diff --git a/www/assets/js/callbacks.js b/www/assets/js/callbacks.js index 98b87be9..23319eef 100644 --- a/www/assets/js/callbacks.js +++ b/www/assets/js/callbacks.js @@ -388,6 +388,9 @@ Callbacks = { /* REGION Rank Stuff */ rank: function(r) { + if (r >= 1) { + socket.emit("listPlaylists"); + } if(r >= 255) SUPERADMIN = true; CLIENT.rank = r; @@ -438,7 +441,6 @@ Callbacks = { if (!CLIENT.guest) { socket.emit("initUserPLCallbacks"); - socket.emit("listPlaylists"); } } },