1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-07 06:40:54 +00:00
* Fixed: The Channel Title settings profile not working.
* Fixed: Remove an unnecessary import that VS Code *helpfully* forced into the channel module last commit.
* Changed: Only load the `safe-regex` module on demand, it's kind of hefty.
This commit is contained in:
SirStendec 2020-07-18 16:27:45 -04:00
parent 22c60050e0
commit 5b76e7c22a
6 changed files with 50 additions and 21 deletions

View file

@ -1,7 +1,7 @@
{ {
"name": "frankerfacez", "name": "frankerfacez",
"author": "Dan Salvato LLC", "author": "Dan Salvato LLC",
"version": "4.20.11", "version": "4.20.12",
"description": "FrankerFaceZ is a Twitch enhancement suite.", "description": "FrankerFaceZ is a Twitch enhancement suite.",
"license": "Apache-2.0", "license": "Apache-2.0",
"scripts": { "scripts": {

View file

@ -4,17 +4,25 @@
// Profile Filters for Settings // Profile Filters for Settings
// ============================================================================ // ============================================================================
import safety from 'safe-regex';
import {glob_to_regex, escape_regex} from 'utilities/object'; import {glob_to_regex, escape_regex} from 'utilities/object';
import {createTester} from 'utilities/filtering'; import {createTester} from 'utilities/filtering';
let safety = null;
function loadSafety(cb) {
import(/* webpackChunkName: 'regex' */ 'safe-regex').then(thing => {
safety = thing.default;
if ( cb )
cb();
})
}
// Logical Components // Logical Components
export const Invert = { export const Invert = {
createTest(config, rule_types) { createTest(config, rule_types, rebuild) {
return createTester(config, rule_types, true) return createTester(config, rule_types, true, false, rebuild)
}, },
maxRules: 1, maxRules: 1,
@ -29,8 +37,8 @@ export const Invert = {
}; };
export const Or = { export const Or = {
createTest(config, rule_types) { createTest(config, rule_types, rebuild) {
return createTester(config, rule_types, false, true); return createTester(config, rule_types, false, true, rebuild);
}, },
childRules: true, childRules: true,
@ -44,10 +52,10 @@ export const Or = {
}; };
export const If = { export const If = {
createTest(config, rule_types) { createTest(config, rule_types, rebuild) {
const cond = createTester(config[0], rule_types), const cond = createTester(config[0], rule_types, false, false, rebuild),
if_true = createTester(config[1], rule_types), if_true = createTester(config[1], rule_types, false, false, rebuild),
if_false = createTester(config[2], rule_types); if_false = createTester(config[2], rule_types, false, false, rebuild);
return ctx => cond(ctx) ? if_true(ctx) : if_false(ctx) return ctx => cond(ctx) ? if_true(ctx) : if_false(ctx)
}, },
@ -289,20 +297,30 @@ export const Category = {
} }
export const Title = { export const Title = {
createTest(config = {}) { createTest(config = {}, _, reload) {
const mode = config.mode; const mode = config.mode;
let title = config.title; let title = config.title,
need_safety = true;
if ( ! title || ! mode ) if ( ! title || ! mode )
return () => false; return () => false;
if ( mode === 'text' ) if ( mode === 'text' ) {
title = escape_regex(title); title = escape_regex(title);
else if ( mode === 'glob' ) need_safety = false;
} else if ( mode === 'glob' )
title = glob_to_regex(title); title = glob_to_regex(title);
else if ( mode !== 'raw' ) else if ( mode !== 'raw' )
return () => false; return () => false;
if ( need_safety ) {
if ( ! safety )
loadSafety(reload);
if ( ! safety || ! safety(title) )
return () => false;
}
if ( ! safety(title) ) if ( ! safety(title) )
return () => false; return () => false;

View file

@ -5,7 +5,7 @@
// ============================================================================ // ============================================================================
import Module from 'utilities/module'; import Module from 'utilities/module';
import {deep_equals, has} from 'utilities/object'; import {deep_equals, has, debounce} from 'utilities/object';
import {CloudStorageProvider, LocalStorageProvider} from './providers'; import {CloudStorageProvider, LocalStorageProvider} from './providers';
import SettingsProfile from './profile'; import SettingsProfile from './profile';
@ -32,6 +32,8 @@ export default class SettingsManager extends Module {
constructor(...args) { constructor(...args) {
super(...args); super(...args);
this.updateSoon = debounce(() => this.updateRoutes(), 50, false);
// State // State
this.__contexts = []; this.__contexts = [];
this.__profiles = []; this.__profiles = [];

View file

@ -58,7 +58,7 @@ export default class SettingsProfile extends EventEmitter {
matches(context) { matches(context) {
if ( ! this.matcher ) if ( ! this.matcher )
this.matcher = createTester(this.context, this.manager.filters); this.matcher = createTester(this.context, this.manager.filters, false, false, () => this.manager.updateSoon());
return this.matcher(context); return this.matcher(context);
} }

View file

@ -7,7 +7,6 @@
import Module from 'utilities/module'; import Module from 'utilities/module';
import { Color } from 'utilities/color'; import { Color } from 'utilities/color';
import {debounce} from 'utilities/object'; import {debounce} from 'utilities/object';
import { valueToNode } from 'C:/Users/Stendec/AppData/Local/Microsoft/TypeScript/3.8/node_modules/@babel/types/lib/index';
const USER_PAGES = ['user', 'video', 'user-video', 'user-clip', 'user-videos', 'user-clips', 'user-collections', 'user-events', 'user-followers', 'user-following']; const USER_PAGES = ['user', 'video', 'user-video', 'user-clip', 'user-videos', 'user-clips', 'user-collections', 'user-events', 'user-followers', 'user-following'];
@ -182,13 +181,23 @@ export default class Channel extends Module {
} }
const react = this.fine.getReactInstance(el), const react = this.fine.getReactInstance(el),
props = react?.memoizedProps?.children?.props; props = react?.child?.memoizedProps;
if ( ! el._ffz_cont || ! props?.channelID ) { if ( ! el._ffz_cont || ! props?.channelID ) {
this.updateSubscription(null); this.updateSubscription(null);
return; return;
} }
const other_props = react.child.child?.child?.child?.child?.child?.child?.child?.child?.memoizedProps,
title = other_props?.title;
if ( title !== el._ffz_title_cache ) {
el._ffz_title_cache = title;
this.settings.updateContext({
title
});
}
if ( ! this.settings.get('channel.hosting.enable') && props.hostLogin ) if ( ! this.settings.get('channel.hosting.enable') && props.hostLogin )
this.setHost(props.channelID, props.channelLogin, null, null); this.setHost(props.channelID, props.channelLogin, null, null);

View file

@ -4,7 +4,7 @@
// Advanced Filter System // Advanced Filter System
// ============================================================================ // ============================================================================
export function createTester(rules, filter_types, inverted = false, or = false) { export function createTester(rules, filter_types, inverted = false, or = false, rebuild) {
if ( ! Array.isArray(rules) || ! filter_types ) if ( ! Array.isArray(rules) || ! filter_types )
return inverted ? () => false : () => true; return inverted ? () => false : () => true;
@ -21,7 +21,7 @@ export function createTester(rules, filter_types, inverted = false, or = false)
continue; continue;
i++; i++;
tests.push(type.createTest(rule.data, filter_types)); tests.push(type.createTest(rule.data, filter_types, rebuild));
names.push(`f${i}`); names.push(`f${i}`);
} }