show decryption errors in timeline

This commit is contained in:
Bruno Windels 2020-09-14 15:43:33 +02:00
parent a2f8731a23
commit 8c4d68def9
5 changed files with 24 additions and 2 deletions

View File

@ -28,7 +28,17 @@ export class EncryptedEventTile extends MessageTile {
} }
} }
get shape() {
return "message-status"
}
get text() { get text() {
return this.i18n`**Encrypted message**`; const decryptionError = this._entry.decryptionError;
const code = decryptionError?.code;
if (code === "MEGOLM_NO_SESSION") {
return this.i18n`The sender hasn't sent us the key for this message yet.`;
} else {
return decryptionError?.message || this.i18n`"Could not decrypt message because of unknown reason."`;
}
} }
} }

View File

@ -93,4 +93,8 @@ export class EventEntry extends BaseEntry {
setDecryptionError(err) { setDecryptionError(err) {
this._decryptionError = err; this._decryptionError = err;
} }
get decryptionError() {
return this._decryptionError;
}
} }

View File

@ -327,6 +327,11 @@ ul.Timeline > li.continuation time {
display: none; display: none;
} }
ul.Timeline > li.messageStatus .message-container > p {
font-style: italic;
color: #777;
}
.message-container { .message-container {
padding: 1px 10px 0px 10px; padding: 1px 10px 0px 10px;
margin: 5px 10px 0 10px; margin: 5px 10px 0 10px;

View File

@ -30,7 +30,9 @@ export class TimelineList extends ListView {
switch (entry.shape) { switch (entry.shape) {
case "gap": return new GapView(entry); case "gap": return new GapView(entry);
case "announcement": return new AnnouncementView(entry); case "announcement": return new AnnouncementView(entry);
case "message": return new TextMessageView(entry); case "message":
case "message-status":
return new TextMessageView(entry);
case "image": return new ImageView(entry); case "image": return new ImageView(entry);
} }
}); });

View File

@ -24,6 +24,7 @@ export function renderMessage(t, vm, children) {
pending: vm.isPending, pending: vm.isPending,
unverified: vm.isUnverified, unverified: vm.isUnverified,
continuation: vm => vm.isContinuation, continuation: vm => vm.isContinuation,
messageStatus: vm => vm.shape === "message-status",
}; };
const profile = t.div({className: "profile"}, [ const profile = t.div({className: "profile"}, [