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");