diff --git a/src/main.js b/src/main.js index d0975a6e..5f6b1534 100644 --- a/src/main.js +++ b/src/main.js @@ -149,7 +149,7 @@ ${typeof x[1] === 'string' ? x[1] : JSON.stringify(x[1], null, 4)}` FrankerFaceZ.Logger = Logger; const VER = FrankerFaceZ.version_info = { - major: 4, minor: 0, revision: 0, extra: '-rc20.3', + major: 4, minor: 0, revision: 0, extra: '-rc20.4', commit: __git_commit__, build: __webpack_hash__, toString: () => diff --git a/src/modules/chat/badges.jsx b/src/modules/chat/badges.jsx index f2f5860c..a2f03b5b 100644 --- a/src/modules/chat/badges.jsx +++ b/src/modules/chat/badges.jsx @@ -277,7 +277,7 @@ export default class Badges extends Module { const p = d.provider; if ( p === 'twitch' ) { const bd = this.getTwitchBadge(d.badge, d.version, room_id, room_login), - global_badge = this.getTwitchBadge(d.badge, d.version) || {}; + global_badge = this.getTwitchBadge(d.badge, d.version, null, null, true) || {}; if ( ! bd ) continue; @@ -628,16 +628,10 @@ export default class Badges extends Module { // Twitch Badges // ======================================================================== - getTwitchBadge(badge, version, room_id, room_login) { + getTwitchBadge(badge, version, room_id, room_login, retried = false) { const room = this.parent.getRoom(room_id, room_login, true); let b; - if ( (room && ! room.badges) || ! this.twitch_badges ) { - const chat = this.resolve('site.chat'); - if ( chat && chat.tryUpdateBadges ) - chat.tryUpdateBadges(); - } - if ( room ) { const versions = room.badges && room.badges[badge]; b = versions && versions[version]; @@ -648,14 +642,21 @@ export default class Badges extends Module { b = versions && versions[version]; } + if ( ! b && ! retried ) { + const chat = this.resolve('site.chat'); + if ( chat && chat.tryUpdateBadges ) + chat.tryUpdateBadges(); + } + return b; } - hasTwitchBadges() { - return !! this.twitch_badges + getTwitchBadgeCount() { + return this.twitch_badge_count || 0; } updateTwitchBadges(badges) { + this.twitch_badge_count = 0; if ( ! Array.isArray(badges) ) this.twitch_badges = badges; else { @@ -666,6 +667,7 @@ export default class Badges extends Module { const sid = data.setID, bs = b[sid] = b[sid] || {__game: /_\d+$/.test(sid)}; + this.twitch_badge_count++; bs[data.version] = data; } } diff --git a/src/modules/chat/room.js b/src/modules/chat/room.js index a963734f..163f34fa 100644 --- a/src/modules/chat/room.js +++ b/src/modules/chat/room.js @@ -380,23 +380,23 @@ export default class Room { // Badge Data // ======================================================================== - hasBadges() { - return !! this.badges + badgeCount() { + return this.badge_count || 0; } updateBadges(badges) { + this.badge_count = 0; if ( ! Array.isArray(badges) ) this.badges = badges; else { - let b = null; - if ( badges.length ) { - b = {}; - for(const data of badges) { - const sid = data.setID, - bs = b[sid] = b[sid] || {}; + // Rooms can have no badges, so we want to allow that. + const b = {}; + for(const data of badges) { + const sid = data.setID, + bs = b[sid] = b[sid] || {}; - bs[data.version] = data; - } + bs[data.version] = data; + this.badge_count++; } this.badges = b; diff --git a/src/modules/main_menu/components/chat-actions.vue b/src/modules/main_menu/components/chat-actions.vue index edc5da91..7406273e 100644 --- a/src/modules/main_menu/components/chat-actions.vue +++ b/src/modules/main_menu/components/chat-actions.vue @@ -27,7 +27,7 @@ -