From d34f166187bcf68fbe82754856631603f11ecacf Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 14 Aug 2020 13:22:52 +0100 Subject: [PATCH 1/4] Message Action Bar, subscribe to localEventIdReplaced events --- src/components/views/messages/MessageActionBar.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/views/messages/MessageActionBar.js b/src/components/views/messages/MessageActionBar.js index 513f21b8b7..fa722a1e06 100644 --- a/src/components/views/messages/MessageActionBar.js +++ b/src/components/views/messages/MessageActionBar.js @@ -116,11 +116,13 @@ export default class MessageActionBar extends React.PureComponent { componentDidMount() { this.props.mxEvent.on("Event.decrypted", this.onDecrypted); this.props.mxEvent.on("Event.beforeRedaction", this.onBeforeRedaction); + this.props.mxEvent.on("Event.localEventIdReplaced", this.onEcho); } componentWillUnmount() { this.props.mxEvent.removeListener("Event.decrypted", this.onDecrypted); this.props.mxEvent.removeListener("Event.beforeRedaction", this.onBeforeRedaction); + this.props.mxEvent.removeListener("Event.localEventIdReplaced", this.onEcho); } onDecrypted = () => { @@ -134,6 +136,11 @@ export default class MessageActionBar extends React.PureComponent { this.forceUpdate(); }; + onEcho = () => { + // When an event is sent and echoed the possible actions change. + this.forceUpdate(); + }; + onFocusChange = (focused) => { if (!this.props.onFocusChange) { return; From 1f6ec421f45eea48e9794e0348765fdd7806a589 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 14 Aug 2020 13:30:27 +0100 Subject: [PATCH 2/4] Make event subscriptions conditional when needed --- src/components/views/messages/MessageActionBar.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/views/messages/MessageActionBar.js b/src/components/views/messages/MessageActionBar.js index fa722a1e06..043fe1a985 100644 --- a/src/components/views/messages/MessageActionBar.js +++ b/src/components/views/messages/MessageActionBar.js @@ -114,15 +114,19 @@ export default class MessageActionBar extends React.PureComponent { static contextType = RoomContext; componentDidMount() { - this.props.mxEvent.on("Event.decrypted", this.onDecrypted); + if (this.props.mxEvent.isBeingDecrypted()) { + this.props.mxEvent.once("Event.decrypted", this.onDecrypted); + } this.props.mxEvent.on("Event.beforeRedaction", this.onBeforeRedaction); - this.props.mxEvent.on("Event.localEventIdReplaced", this.onEcho); + if (this.props.mxEvent.getId()[0] !== "!") { + this.props.mxEvent.once("Event.localEventIdReplaced", this.onEcho); + } } componentWillUnmount() { - this.props.mxEvent.removeListener("Event.decrypted", this.onDecrypted); - this.props.mxEvent.removeListener("Event.beforeRedaction", this.onBeforeRedaction); - this.props.mxEvent.removeListener("Event.localEventIdReplaced", this.onEcho); + this.props.mxEvent.off("Event.decrypted", this.onDecrypted); + this.props.mxEvent.off("Event.beforeRedaction", this.onBeforeRedaction); + this.props.mxEvent.off("Event.localEventIdReplaced", this.onEcho); } onDecrypted = () => { From cd8748008845c7d071661d19b10315a19a5b5f1b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 14 Aug 2020 13:37:11 +0100 Subject: [PATCH 3/4] Watch for Event.status instead as we can do some things in SENT --- src/components/views/messages/MessageActionBar.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/views/messages/MessageActionBar.js b/src/components/views/messages/MessageActionBar.js index 043fe1a985..4a6b3c39fb 100644 --- a/src/components/views/messages/MessageActionBar.js +++ b/src/components/views/messages/MessageActionBar.js @@ -18,6 +18,7 @@ limitations under the License. import React, {useEffect} from 'react'; import PropTypes from 'prop-types'; +import { EventStatus } from 'matrix-js-sdk'; import { _t } from '../../../languageHandler'; import * as sdk from '../../../index'; @@ -114,19 +115,19 @@ export default class MessageActionBar extends React.PureComponent { static contextType = RoomContext; componentDidMount() { + if (this.props.mxEvent.status && this.props.mxEvent !== EventStatus.SENT) { + this.props.mxEvent.on("Event.status", this.onSent); + } if (this.props.mxEvent.isBeingDecrypted()) { this.props.mxEvent.once("Event.decrypted", this.onDecrypted); } this.props.mxEvent.on("Event.beforeRedaction", this.onBeforeRedaction); - if (this.props.mxEvent.getId()[0] !== "!") { - this.props.mxEvent.once("Event.localEventIdReplaced", this.onEcho); - } } componentWillUnmount() { + this.props.mxEvent.off("Event.status", this.onSent); this.props.mxEvent.off("Event.decrypted", this.onDecrypted); this.props.mxEvent.off("Event.beforeRedaction", this.onBeforeRedaction); - this.props.mxEvent.off("Event.localEventIdReplaced", this.onEcho); } onDecrypted = () => { @@ -140,7 +141,7 @@ export default class MessageActionBar extends React.PureComponent { this.forceUpdate(); }; - onEcho = () => { + onSent = () => { // When an event is sent and echoed the possible actions change. this.forceUpdate(); }; From 57f15bb1dd91a761930a157e997ee9f46b62eb8d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 14 Aug 2020 13:37:28 +0100 Subject: [PATCH 4/4] fix typo --- src/components/views/messages/MessageActionBar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/messages/MessageActionBar.js b/src/components/views/messages/MessageActionBar.js index 4a6b3c39fb..c94f296eac 100644 --- a/src/components/views/messages/MessageActionBar.js +++ b/src/components/views/messages/MessageActionBar.js @@ -115,7 +115,7 @@ export default class MessageActionBar extends React.PureComponent { static contextType = RoomContext; componentDidMount() { - if (this.props.mxEvent.status && this.props.mxEvent !== EventStatus.SENT) { + if (this.props.mxEvent.status && this.props.mxEvent.status !== EventStatus.SENT) { this.props.mxEvent.on("Event.status", this.onSent); } if (this.props.mxEvent.isBeingDecrypted()) {