Rerender messages when disabling coloured text and fix jumbo Discord emoji in spoilers

This commit is contained in:
Samuel Elliott 2019-03-12 15:30:20 +00:00
parent 4aa38f4582
commit 648954d533
No known key found for this signature in database
GPG Key ID: 8420C7CDE43DC4D6
9 changed files with 41 additions and 26 deletions

View File

@ -21,7 +21,7 @@ export default new class BlockedMessages extends BuiltinModule {
async enabled(e) { async enabled(e) {
const MessageListComponents = Reflection.module.byProps('BlockedMessageGroup'); const MessageListComponents = Reflection.module.byProps('BlockedMessageGroup');
MessageListComponents.OriginalBlockedMessageGroup = MessageListComponents.BlockedMessageGroup; MessageListComponents.OriginalBlockedMessageGroup = MessageListComponents.BlockedMessageGroup;
MessageListComponents.BlockedMessageGroup = () => { return null; }; MessageListComponents.BlockedMessageGroup = () => null;
this.cancelBlockedMessages = () => { this.cancelBlockedMessages = () => {
MessageListComponents.BlockedMessageGroup = MessageListComponents.OriginalBlockedMessageGroup; MessageListComponents.BlockedMessageGroup = MessageListComponents.OriginalBlockedMessageGroup;
delete MessageListComponents.OriginalBlockedMessageGroup; delete MessageListComponents.OriginalBlockedMessageGroup;

View File

@ -39,15 +39,14 @@ export default class BuiltinModule {
} }
async _settingUpdated(e) { async _settingUpdated(e) {
const { value } = e; if (e.value) {
if (value === true) {
if (this.enabled) await this.enabled(e); if (this.enabled) await this.enabled(e);
if (this.applyPatches) this.applyPatches(); if (this.applyPatches) await this.applyPatches();
return; if (this.rerenderPatchedComponents) this.rerenderPatchedComponents();
} } else {
if (value === false) { if (this.disabled) await this.disabled(e);
if (this.disabled) this.disabled(e);
this.unpatch(); this.unpatch();
if (this.rerenderPatchedComponents) this.rerenderPatchedComponents();
} }
} }

View File

@ -42,6 +42,10 @@ export default new class ColoredText extends BuiltinModule {
this.intensitySetting.off('setting-updated', this._intensityUpdated); this.intensitySetting.off('setting-updated', this._intensityUpdated);
} }
rerenderPatchedComponents() {
if (this.MessageContent) this.MessageContent.forceUpdateAll();
}
/* Methods */ /* Methods */
_intensityUpdated() { _intensityUpdated() {
this.MessageContent.forceUpdateAll(); this.MessageContent.forceUpdateAll();
@ -52,14 +56,14 @@ export default new class ColoredText extends BuiltinModule {
if (this.patches.length) return; if (this.patches.length) return;
this.MessageContent = await ReactComponents.getComponent('MessageContent'); this.MessageContent = await ReactComponents.getComponent('MessageContent');
this.patch(this.MessageContent.component.prototype, 'render', this.injectColoredText); this.patch(this.MessageContent.component.prototype, 'render', this.injectColoredText);
this.MessageContent.forceUpdateAll();
} }
/** /**
* Set markup text colour to match role colour * Set markup text colour to match role colour
*/ */
injectColoredText(thisObject, args, originalReturn) { injectColoredText(thisObject, args, originalReturn) {
this.patch(originalReturn.props, 'children', function(obj, args, returnValue) { const unpatch = this.patch(originalReturn.props, 'children', (obj, args, returnValue) => {
unpatch();
const { TinyColor } = Reflection.modules; const { TinyColor } = Reflection.modules;
const markup = Utils.findInReactTree(returnValue, m => m && m.props && m.props.className && m.props.className.includes('da-markup')); const markup = Utils.findInReactTree(returnValue, m => m && m.props && m.props.className && m.props.className.includes('da-markup'));
const roleColor = thisObject.props.message.colorString; const roleColor = thisObject.props.message.colorString;

View File

@ -363,8 +363,8 @@ export default new class EmoteModule extends BuiltinModule {
for (const child of markup) { for (const child of markup) {
if (typeof child !== 'string') { if (typeof child !== 'string') {
if (typeof child === 'object') { if (typeof child === 'object') {
const isEmoji = Utils.findInReactTree(child, 'emojiName'); const isEmoji = Utils.findInReactTree(child, filter => filter && filter.emojiName);
if (isEmoji) child.props.children.props.jumboable = jumboable; if (isEmoji) isEmoji.jumboable = jumboable;
} }
newMarkup.push(child); newMarkup.push(child);
continue; continue;

View File

@ -1,15 +1,19 @@
import { EmoteModule, EmoteAc } from './Emotes'; import { EmoteModule, EmoteAc } from './Emotes';
import { default as ReactDevtoolsModule } from './ReactDevtoolsModule'; import ReactDevtoolsModule from './ReactDevtoolsModule';
import { default as VueDevtoolsModule } from './VueDevToolsModule'; import VueDevtoolsModule from './VueDevToolsModule';
import { default as TrackingProtection } from './TrackingProtection'; import TrackingProtection from './TrackingProtection';
import { default as E2EE } from './E2EE'; import E2EE from './E2EE';
import { default as ColoredText } from './ColoredText'; import ColoredText from './ColoredText';
import { default as TwentyFourHour } from './24Hour'; import TwentyFourHour from './24Hour';
import { default as KillClyde } from './KillClyde'; import KillClyde from './KillClyde';
import { default as BlockedMessages } from './BlockedMessages'; import BlockedMessages from './BlockedMessages';
import { default as VoiceDisconnect } from './VoiceDisconnect'; import VoiceDisconnect from './VoiceDisconnect';
export default class { export default class {
static get modules() {
return require('./builtin');
}
static initAll() { static initAll() {
EmoteModule.init(); EmoteModule.init();
ReactDevtoolsModule.init(); ReactDevtoolsModule.init();

View File

@ -12,7 +12,7 @@ import BuiltinModule from './BuiltinModule';
import { Reflection } from 'modules'; import { Reflection } from 'modules';
export default new class E2EE extends BuiltinModule { export default new class TrackingProtection extends BuiltinModule {
/* Getters */ /* Getters */
get moduleName() { return 'TrackingProtection' } get moduleName() { return 'TrackingProtection' }

View File

@ -34,7 +34,7 @@ class BetterDiscord {
Vendor, Vendor,
Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi, Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi,
EmoteModule, BuiltinManager, EmoteModule,
BdWebApi, BdWebApi,
Connectivity, Connectivity,
Cache, Cache,

View File

@ -173,9 +173,18 @@ class ReactComponent {
this.important = important; this.important = important;
} }
get elements() {
if (!this.important || !this.important.selector) return [];
return document.querySelectorAll(this.important.selector);
}
get stateNodes() {
return [...this.elements].map(e => Reflection.DOM(e).getComponentStateNode(this));
}
forceUpdateAll() { forceUpdateAll() {
if (!this.important || !this.important.selector) return; for (const e of this.elements) {
for (const e of document.querySelectorAll(this.important.selector)) {
Reflection.DOM(e).forceUpdate(this); Reflection.DOM(e).forceUpdate(this);
} }
} }

View File

@ -8,7 +8,6 @@
* LICENSE file in the root directory of this source tree. * LICENSE file in the root directory of this source tree.
*/ */
import Module from './modulebase'; import Module from './modulebase';
import { FileUtils } from './utils'; import { FileUtils } from './utils';
import semver from 'semver'; import semver from 'semver';