From d58dda6f509f460b709d4a3453ccc85856c702da Mon Sep 17 00:00:00 2001 From: Samuel Elliott Date: Tue, 12 Mar 2019 16:35:12 +0000 Subject: [PATCH] Fix E2EE message button patch --- client/src/builtin/BuiltinModule.js | 2 +- client/src/builtin/E2EE/E2EE.js | 14 ++++++++++---- client/src/builtin/Emotes/EmoteModule.js | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/client/src/builtin/BuiltinModule.js b/client/src/builtin/BuiltinModule.js index 922a46c5..115c9be0 100644 --- a/client/src/builtin/BuiltinModule.js +++ b/client/src/builtin/BuiltinModule.js @@ -81,7 +81,7 @@ export default class BuiltinModule { const last = child.pop(); this.patch(module, fnName, (component, args, retVal) => { - const unpatch = this.patch(child.reduce((obj, key) => obj[key], retVal), last, function() {unpatch(); return cb.apply(this, arguments);}, when); + const unpatch = this.patch(child.reduce((obj, key) => obj[key], retVal), last, function(...args) {unpatch(); return cb.call(this, component, ...args);}, when); }); } diff --git a/client/src/builtin/E2EE/E2EE.js b/client/src/builtin/E2EE/E2EE.js index 682f1bf7..ea6a4aae 100644 --- a/client/src/builtin/E2EE/E2EE.js +++ b/client/src/builtin/E2EE/E2EE.js @@ -10,7 +10,7 @@ import { Settings, Cache, Events } from 'modules'; import BuiltinModule from '../BuiltinModule'; -import { Reflection, ReactComponents, MonkeyPatch, Patcher, DiscordApi, Security } from 'modules'; +import { Reflection, ReactComponents, DiscordApi, Security } from 'modules'; import { VueInjector, Modals, Toasts } from 'ui'; import { ClientLogger as Logger, ClientIPC } from 'common'; import { request } from 'vendor'; @@ -238,7 +238,7 @@ export default new class E2EE extends BuiltinModule { async patchMessageContent() { const MessageContent = await ReactComponents.getComponent('MessageContent'); this.patch(MessageContent.component.prototype, 'render', this.beforeRenderMessageContent, 'before'); - this.patch(MessageContent.component.prototype, 'render', this.afterRenderMessageContent); + this.childPatch(MessageContent.component.prototype, 'render', ['props', 'children'], this.afterRenderMessageContent); MessageContent.forceUpdateAll(); const ImageWrapper = await ReactComponents.getComponent('ImageWrapper'); @@ -287,10 +287,16 @@ export default new class E2EE extends BuiltinModule { component.props.message.contentParsed = create.contentParsed; } - afterRenderMessageContent(component, args, retVal) { + afterRenderMessageContent(component, _childrenObject, args, retVal) { if (!component.props.message.bd_encrypted) return; - const buttons = Utils.findInReactTree(retVal, m => Array.isArray(m) && m[1].props && m[1].props.currentUserId); + + const { className } = Reflection.resolve('buttonContainer', 'avatar', 'username'); + const buttonContainer = Utils.findInReactTree(retVal, m => m && m.className && m.className.indexOf(className) !== -1); + if (!buttonContainer) return; + + const buttons = buttonContainer.children.props.children; if (!buttons) return; + try { buttons.unshift(VueInjector.createReactElement(E2EEMessageButton)); } catch (err) { diff --git a/client/src/builtin/Emotes/EmoteModule.js b/client/src/builtin/Emotes/EmoteModule.js index 6ca3941b..48523523 100644 --- a/client/src/builtin/Emotes/EmoteModule.js +++ b/client/src/builtin/Emotes/EmoteModule.js @@ -248,7 +248,7 @@ export default new class EmoteModule extends BuiltinModule { Spoiler.forceUpdateAll(); } - afterRenderSpoiler(component, args, retVal) { + afterRenderSpoiler(component, _childrenObject, args, retVal) { const markup = Utils.findInReactTree(retVal, filter => filter && filter.className && @@ -261,7 +261,7 @@ export default new class EmoteModule extends BuiltinModule { /** * Handle message render */ - afterRenderMessageContent(component, args, retVal) { + afterRenderMessageContent(component, _childrenObject, args, retVal) { const markup = Utils.findInReactTree(retVal, filter => filter && filter.className &&