From d6b2c283e9b27556eb72bdc5150f2a7c77e8c566 Mon Sep 17 00:00:00 2001 From: Lordmau5 Date: Wed, 24 Jun 2020 04:34:05 +0200 Subject: [PATCH] WIP Set-Hiding Suggestions are created every time more than 2 letters are typed after the colon, after which it updates on every new or removed letter. Optimally we'd want some caching on the very first time we "hydrate" the emotes and attach their owner information back on afterwards. As for filtering... That still needs to be done on the fly for obvious reasons. --- src/modules/chat/emotes.js | 4 + .../twitch-twilight/modules/chat/input.jsx | 78 +++++++++++-------- 2 files changed, 48 insertions(+), 34 deletions(-) diff --git a/src/modules/chat/emotes.js b/src/modules/chat/emotes.js index 7e18cbaa..71e4f103 100644 --- a/src/modules/chat/emotes.js +++ b/src/modules/chat/emotes.js @@ -227,6 +227,10 @@ export default class Emotes extends Module { return this.getHidden(source).includes(id); } + isSetHidden(source, id) { + return this.settings.provider.get('emote-menu.hidden-sets').includes(`${source}-${id}`); + } + getHidden(source) { return this.settings.provider.get(`hidden-emotes.${source}`, []); } diff --git a/src/sites/twitch-twilight/modules/chat/input.jsx b/src/sites/twitch-twilight/modules/chat/input.jsx index 3fe87aa5..95cd60a7 100644 --- a/src/sites/twitch-twilight/modules/chat/input.jsx +++ b/src/sites/twitch-twilight/modules/chat/input.jsx @@ -478,6 +478,13 @@ export default class Input extends Module { return []; } + for (let i = 0; i < hydratedEmotes.length; i++) { + const owner = inst.props.emotes[i].owner; + if (owner) { + hydratedEmotes[i].owner = owner; + } + } + const usageResults = [], startingResults = [], otherResults = [], @@ -487,27 +494,29 @@ export default class Input extends Module { for (const set of hydratedEmotes) { if (set && Array.isArray(set.emotes)) { - for (const emote of set.emotes) { - if (inst.doesEmoteMatchTerm(emote, search) && ! hidden.includes(emote.id)) { - const favorite = favorites.includes(emote.id); - const element = { - current: input, - replacement: emote.token, - element: inst.renderEmoteSuggestion({ - ...emote, + if ( ! this.emotes.isSetHidden('twitch', set.owner?.id)) { + for (const emote of set.emotes) { + if (inst.doesEmoteMatchTerm(emote, search) && ! hidden.includes(emote.id)) { + const favorite = favorites.includes(emote.id); + const element = { + current: input, + replacement: emote.token, + element: inst.renderEmoteSuggestion({ + ...emote, + favorite + }), favorite - }), - favorite - }; + }; - if (this.EmoteUsageCount[emote.token]) { - usageResults.push(element); - } - else if (emote.token.toLowerCase().startsWith(search)) { - startingResults.push(element); - } - else { - otherResults.push(element); + if (this.EmoteUsageCount[emote.token]) { + usageResults.push(element); + } + else if (emote.token.toLowerCase().startsWith(search)) { + startingResults.push(element); + } + else { + otherResults.push(element); + } } } } @@ -590,22 +599,23 @@ export default class Input extends Module { for(const set of sets) { if ( set && set.emotes ) - for(const emote of Object.values(set.emotes)) - if ( inst.doesEmoteMatchTerm(emote, search) && !added_emotes.has(emote.name) && ! this.emotes.isHidden(set.source || 'ffz', emote.id) ) { - const favorite = this.emotes.isFavorite(set.source || 'ffz', emote.id); - results.push({ - current: input, - replacement: emote.name, - element: inst.renderEmoteSuggestion({ - token: emote.name, - id: `${set.source}-${emote.id}`, - srcSet: emote.srcSet, + if ( ! this.emotes.isSetHidden(set.source || 'ffz', set.id)) + for(const emote of Object.values(set.emotes)) + if ( inst.doesEmoteMatchTerm(emote, search) && !added_emotes.has(emote.name) && ! this.emotes.isHidden(set.source || 'ffz', emote.id) ) { + const favorite = this.emotes.isFavorite(set.source || 'ffz', emote.id); + results.push({ + current: input, + replacement: emote.name, + element: inst.renderEmoteSuggestion({ + token: emote.name, + id: `${set.source}-${emote.id}`, + srcSet: emote.srcSet, + favorite + }), favorite - }), - favorite - }); - added_emotes.add(emote.name); - } + }); + added_emotes.add(emote.name); + } } return results;