diff --git a/src/experiments.json b/src/experiments.json index 257f9b09..48ec0ae7 100644 --- a/src/experiments.json +++ b/src/experiments.json @@ -3,8 +3,8 @@ "name": "New API Stress Testing", "description": "Send duplicate requests to the new API server for load testing.", "groups": [ - {"value": true, "weight": 25}, - {"value": false, "weight": 75} + {"value": true, "weight": 35}, + {"value": false, "weight": 65} ] } } \ No newline at end of file diff --git a/src/main.js b/src/main.js index 74780add..ece76e1c 100644 --- a/src/main.js +++ b/src/main.js @@ -100,7 +100,7 @@ class FrankerFaceZ extends Module { FrankerFaceZ.Logger = Logger; const VER = FrankerFaceZ.version_info = { - major: 4, minor: 0, revision: 0, extra: '-rc12.10', + major: 4, minor: 0, revision: 0, extra: '-rc12.11', commit: __git_commit__, build: __webpack_hash__, toString: () => diff --git a/src/sites/twitch-twilight/modules/chat/emote_menu.jsx b/src/sites/twitch-twilight/modules/chat/emote_menu.jsx index 44a2b898..b80ed12c 100644 --- a/src/sites/twitch-twilight/modules/chat/emote_menu.jsx +++ b/src/sites/twitch-twilight/modules/chat/emote_menu.jsx @@ -550,6 +550,11 @@ export default class EmoteMenu extends Module { icon: 'crown', message: t.i18n.t('emote-menu.sub-prime', 'This is your free sub with Twitch Prime.\nIt ends in %{time}.', {time}) } + else if ( data.gift ) + calendar = { + icon: 'gift', + message: t.i18n.t('emote-menu.sub-gift-ends', 'This gifted sub ends in %{time}.', {time}) + } else calendar = { icon: 'calendar-empty', @@ -712,7 +717,7 @@ export default class EmoteMenu extends Module { } let timer; - const doClear = () => this.emit('tooltips:cleanup'), + const doClear = () => requestAnimationFrame(() => this.emit('tooltips:cleanup')), clearTooltips = () => { clearTimeout(timer); setTimeout(doClear, 100); @@ -768,6 +773,14 @@ export default class EmoteMenu extends Module { for(const element of this.observing.keys()) this.observer.observe(element); + + this.observeSoon(); + } + + observeSoon() { + requestAnimationFrame(() => { + this.handleObserve(this.observer.takeRecords()); + }); } destroyObserver() { @@ -807,6 +820,8 @@ export default class EmoteMenu extends Module { this.observing.set(element, inst); if ( this.observer ) this.observer.observe(element); + + this.observeSoon(); } stopObserving(element) { @@ -1204,7 +1219,8 @@ export default class EmoteMenu extends Module { emotes, renews: set_data.renews, ends: set_data.ends, - prime: set_data.prime + prime: set_data.prime, + gift: set_data.gift && set_data.gift.isGift } } @@ -1290,6 +1306,7 @@ export default class EmoteMenu extends Module { section.renews = set_data.renews; section.ends = set_data.ends; section.prime = set_data.prime; + section.gift = set_data.gift && set_data.gift.isGift; } // If the channel is locked, store data about that in the diff --git a/src/sites/twitch-twilight/modules/chat/sub_status.gql b/src/sites/twitch-twilight/modules/chat/sub_status.gql index 50ff1f70..08557d67 100644 --- a/src/sites/twitch-twilight/modules/chat/sub_status.gql +++ b/src/sites/twitch-twilight/modules/chat/sub_status.gql @@ -9,6 +9,9 @@ query FFZ_EmoteMenu_SubStatus($first: Int, $after: Cursor, $criteria: Subscripti cursor node { id + gift { + isGift + } purchasedWithPrime endsAt renewsAt