diff --git a/package.json b/package.json index 5b5b4a8d..658a65d8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Calvin Montgomery", "name": "CyTube", "description": "Online media synchronizer and chat", - "version": "3.38.0", + "version": "3.38.1", "repository": { "url": "http://github.com/calzoneman/sync" }, diff --git a/src/channel/channel.js b/src/channel/channel.js index fa411e1e..6a9b400d 100644 --- a/src/channel/channel.js +++ b/src/channel/channel.js @@ -423,6 +423,9 @@ Channel.prototype.acceptUser = function (user) { // TODO: Drop legacy setAFK frame after a few months self.broadcastAll("setAFK", { name: user.getName(), afk: afk }); }) + user.on("effectiveRankChange", (newRank, oldRank) => { + this.maybeResendUserlist(user, newRank, oldRank); + }); }; Channel.prototype.partUser = function (user) { @@ -456,6 +459,15 @@ Channel.prototype.partUser = function (user) { user.die(); }; +Channel.prototype.maybeResendUserlist = function maybeResendUserlist(user, newRank, oldRank) { + if ((newRank >= 2 && oldRank < 2) + || (newRank < 2 && oldRank >= 2) + || (newRank >= 255 && oldRank < 255) + || (newRank < 255 && oldRank >= 255)) { + this.sendUserlist([user]); + } +}; + Channel.prototype.packUserData = function (user) { var base = { name: user.getName(), diff --git a/src/channel/playlist.js b/src/channel/playlist.js index 95b37f8a..2b58780f 100644 --- a/src/channel/playlist.js +++ b/src/channel/playlist.js @@ -754,7 +754,7 @@ PlaylistModule.prototype.handleAssignLeader = function (user, data) { this.leader = null; if (old.account.effectiveRank === 1.5) { old.account.effectiveRank = old.account.oldRank; - old.emit("effectiveRankChange", old.account.effectiveRank); + old.emit("effectiveRankChange", old.account.effectiveRank, 1.5); old.socket.emit("rank", old.account.effectiveRank); } @@ -781,7 +781,7 @@ PlaylistModule.prototype.handleAssignLeader = function (user, data) { if (this.leader.account.effectiveRank < 1.5) { this.leader.account.oldRank = this.leader.account.effectiveRank; this.leader.account.effectiveRank = 1.5; - this.leader.emit("effectiveRankChange", 1.5); + this.leader.emit("effectiveRankChange", 1.5, this.leader.account.oldRank); this.leader.socket.emit("rank", 1.5); } diff --git a/src/channel/ranks.js b/src/channel/ranks.js index b841516b..9d847a32 100644 --- a/src/channel/ranks.js +++ b/src/channel/ranks.js @@ -119,9 +119,10 @@ RankModule.prototype.handleRankChange = function (user, data) { return; } + const oldRank = receiver.account.effectiveRank; receiver.account.channelRank = rank; receiver.account.effectiveRank = Math.max(receiver.account.globalRank, rank); - receiver.emit("effectiveRankChange", receiver.account.effectiveRank); + receiver.emit("effectiveRankChange", receiver.account.effectiveRank, oldRank); receiver.socket.emit("rank", receiver.account.effectiveRank); this.channel.logger.log("[mod] " + user.getName() + " set " + name + "'s rank " + "to " + rank); diff --git a/src/user.js b/src/user.js index 75d65c93..efe33ef2 100644 --- a/src/user.js +++ b/src/user.js @@ -302,10 +302,11 @@ User.prototype.login = function (name, pw) { return; } + const oldRank = self.account.effectiveRank; self.account.user = user; self.account.update(); self.socket.emit("rank", self.account.effectiveRank); - self.emit("effectiveRankChange", self.account.effectiveRank); + self.emit("effectiveRankChange", self.account.effectiveRank, oldRank); self.registrationTime = new Date(user.time); self.setFlag(Flags.U_REGISTERED); self.socket.emit("login", { @@ -381,10 +382,11 @@ User.prototype.guestLogin = function (name) { // Login succeeded lastguestlogin[self.realip] = Date.now(); + const oldRank = self.account.effectiveRank; self.account.guestName = name; self.account.update(); self.socket.emit("rank", self.account.effectiveRank); - self.emit("effectiveRankChange", self.account.effectiveRank); + self.emit("effectiveRankChange", self.account.effectiveRank, oldRank); self.socket.emit("login", { success: true, name: name, @@ -427,12 +429,13 @@ User.prototype.getFirstSeenTime = function getFirstSeenTime() { }; User.prototype.setChannelRank = function setRank(rank) { - const changed = this.account.effectiveRank !== rank; + const oldRank = this.account.effectiveRank; + const changed = oldRank !== rank; this.account.channelRank = rank; this.account.update(); this.socket.emit("rank", this.account.effectiveRank); if (changed) { - this.emit("effectiveRankChange", this.account.effectiveRank); + this.emit("effectiveRankChange", this.account.effectiveRank, oldRank); } };