diff --git a/src/channel/channel.js b/src/channel/channel.js index 519458fc..fa411e1e 100644 --- a/src/channel/channel.js +++ b/src/channel/channel.js @@ -417,6 +417,12 @@ Channel.prototype.acceptUser = function (user) { if (!this.is(Flags.C_REGISTERED)) { user.socket.emit("channelNotRegistered"); } + + user.on('afk', function(afk){ + self.sendUserMeta(self.users, user, -1); + // TODO: Drop legacy setAFK frame after a few months + self.broadcastAll("setAFK", { name: user.getName(), afk: afk }); + }) }; Channel.prototype.partUser = function (user) { diff --git a/src/user.js b/src/user.js index ebe71d67..75d65c93 100644 --- a/src/user.js +++ b/src/user.js @@ -226,10 +226,7 @@ User.prototype.setAFK = function (afk) { this.channel.modules.voteskip.update(); } - this.channel.broadcastAll("setAFK", { - name: this.getName(), - afk: afk - }); + this.emit('afk', afk); }; /* Automatically tag a user as AFK after a period of inactivity */ @@ -424,7 +421,7 @@ User.prototype.getFirstSeenTime = function getFirstSeenTime() { return this.socket.ipSessionFirstSeen.getTime(); } else { LOGGER.error(`User "${this.getName()}" (IP: ${this.realip}) has neither ` + - "an IP sesion first seen time nor a registered account."); + "an IP session first seen time nor a registered account."); return Date.now(); } }; diff --git a/www/js/callbacks.js b/www/js/callbacks.js index 5b981f02..239de08d 100644 --- a/www/js/callbacks.js +++ b/www/js/callbacks.js @@ -490,13 +490,12 @@ Callbacks = { div.data("leader", Boolean(data.leader)); div.data("profile", data.profile); div.data("meta", data.meta); - div.data("afk", data.meta.afk); if (data.meta.muted || data.meta.smuted) { div.data("icon", "glyphicon-volume-off"); } else { div.data("icon", false); } - formatUserlistItem(div, data); + formatUserlistItem(div); addUserDropdown(div, data); div.appendTo($("#userlist")); sortUserlist(); @@ -515,11 +514,24 @@ Callbacks = { user.data("icon", false); } + /* + * 2017-06-15 + * TODO: Remove this and the empty function below + * after script authors have had ample time to update + */ + socket.listeners('setAFK').forEach(function(listener){ + listener(data.meta.afk); + }); + formatUserlistItem(user, data); addUserDropdown(user, data); sortUserlist(); }, + setAFK: function() { + return true; + }, + setUserProfile: function (data) { var user = findUserlistItem(data.name); if (user === null) @@ -610,16 +622,6 @@ Callbacks = { formatUserlistItem(user); }, - setAFK: function (data) { - var user = findUserlistItem(data.name); - if(user === null) - return; - user.data("afk", data.afk); - formatUserlistItem(user); - if(USEROPTS.sort_afk) - sortUserlist(); - }, - userLeave: function(data) { var user = findUserlistItem(data.name); if(user !== null) diff --git a/www/js/util.js b/www/js/util.js index 25d3ee0d..a10ce0c9 100644 --- a/www/js/util.js +++ b/www/js/util.js @@ -87,7 +87,6 @@ function formatUserlistItem(div) { profile: div.data("profile") || { image: "", text: ""}, leader: div.data("leader") || false, icon: div.data("icon") || false, - afk: div.data("afk") || false }; var name = $(div.children()[1]); name.removeClass(); @@ -95,19 +94,20 @@ function formatUserlistItem(div) { name.addClass(getNameColor(data.rank)); div.find(".profile-box").remove(); - if (data.afk) { + var meta = div.data().meta || {}; // Not sure how this could happen. + if (meta.afk) { div.addClass("userlist_afk"); } else { div.removeClass("userlist_afk"); } - if (div.data("meta") && div.data("meta").muted) { + if (meta.muted) { div.addClass("userlist_muted"); } else { div.removeClass("userlist_muted"); } - if (div.data("meta") && div.data("meta").smuted) { + if (meta.smuted) { div.addClass("userlist_smuted"); } else { div.removeClass("userlist_smuted"); @@ -173,7 +173,7 @@ function formatUserlistItem(div) { if(data.leader) { $("").addClass("glyphicon glyphicon-star-empty").appendTo(icon); } - if(data.afk) { + if(div.data().meta.afk) { name.css("font-style", "italic"); $("").addClass("glyphicon glyphicon-time").appendTo(icon); } @@ -398,7 +398,7 @@ function calcUserBreakdown() { total++; - if($(item).data("afk")) + if($(item).data().meta.afk) breakdown["AFK"]++; });