diff --git a/src/channel/channel.js b/src/channel/channel.js index 64f49b9c..fa411e1e 100644 --- a/src/channel/channel.js +++ b/src/channel/channel.js @@ -418,8 +418,10 @@ Channel.prototype.acceptUser = function (user) { user.socket.emit("channelNotRegistered"); } - user.on('afk', function(){ + 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 }); }) }; diff --git a/www/js/callbacks.js b/www/js/callbacks.js index d2d1438e..e1c1723d 100644 --- a/www/js/callbacks.js +++ b/www/js/callbacks.js @@ -507,13 +507,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(); @@ -532,11 +531,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) @@ -627,16 +639,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..cc88d57a 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,7 +94,7 @@ function formatUserlistItem(div) { name.addClass(getNameColor(data.rank)); div.find(".profile-box").remove(); - if (data.afk) { + if (div.data("meta") && div.data().meta.afk) { div.addClass("userlist_afk"); } else { div.removeClass("userlist_afk"); @@ -173,7 +172,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 +397,7 @@ function calcUserBreakdown() { total++; - if($(item).data("afk")) + if($(item).data().meta.afk) breakdown["AFK"]++; });