From b98c2ae25e57bf79140aaf1faec599f658982f5a Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Thu, 15 Sep 2016 19:25:53 +0100 Subject: [PATCH] update crypto state of the room in realtime when turned on --- .../views/dialogs/EncryptedEventDialog.js | 6 +++--- src/components/views/rooms/EventTile.js | 7 ++++++- src/components/views/rooms/MessageComposer.js | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/components/views/dialogs/EncryptedEventDialog.js b/src/components/views/dialogs/EncryptedEventDialog.js index d84376cc26..149512bc40 100644 --- a/src/components/views/dialogs/EncryptedEventDialog.js +++ b/src/components/views/dialogs/EncryptedEventDialog.js @@ -92,11 +92,11 @@ module.exports = React.createClass({ Sender device curve25519 olm key - { event.getWireContent().sender_key } + { event.getWireContent().sender_key || none } Algorithm - { event.getWireContent().algorithm } + { event.getWireContent().algorithm || unencrypted } { event.getContent().msgtype === 'm.bad.encrypted' ? ( @@ -108,7 +108,7 @@ module.exports = React.createClass({ } Session ID - { event.getWireContent().session_id } + { event.getWireContent().session_id || none } diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 907b28d9a5..a50edb8ba9 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -467,7 +467,12 @@ module.exports = React.createClass({ ); var e2e; - if (this.props.mxEvent.isEncrypted() || (e2eEnabled && this.props.eventSendStatus)) { + // cosmetic padlocks: + if ((e2eEnabled && this.props.eventSendStatus) || this.props.mxEvent.getType() === 'm.room.encryption') { + e2e = ; + } + // real padlocks + else if (this.props.mxEvent.isEncrypted() || (e2eEnabled && this.props.eventSendStatus)) { if (this.props.mxEvent.getContent().msgtype === 'm.bad.encrypted') { e2e = ; } diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 404db6a780..395141aa15 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -42,6 +42,7 @@ export default class MessageComposer extends React.Component { this.onToggleFormattingClicked = this.onToggleFormattingClicked.bind(this); this.onToggleMarkdownClicked = this.onToggleMarkdownClicked.bind(this); this.onInputStateChanged = this.onInputStateChanged.bind(this); + this.onEvent = this.onEvent.bind(this); this.state = { autocompleteQuery: '', @@ -57,6 +58,24 @@ export default class MessageComposer extends React.Component { } + componentDidMount() { + // N.B. using 'event' rather than 'RoomEvents' otherwise the crypto handler + // for 'event' fires *after* 'RoomEvent', and our room won't have yet been + // marked as encrypted. + // XXX: fragile as all hell - fixme somehow, perhaps with a dedicated Room.encryption event or something. + MatrixClientPeg.get().on("event", this.onEvent); + } + + componentWillUnmount() { + MatrixClientPeg.get().removeListener("event", this.onEvent); + } + + onEvent(event) { + if (event.getType() !== 'm.room.encryption') return; + if (event.getRoomId() !== this.props.room.roomId) return; + this.forceUpdate(); + } + onUploadClick(ev) { if (MatrixClientPeg.get().isGuest()) { let NeedToRegisterDialog = sdk.getComponent("dialogs.NeedToRegisterDialog");