From 080f50bf26767547f88dc8b64d359fa4677bc0bc Mon Sep 17 00:00:00 2001 From: styppo Date: Thu, 26 Jan 2023 18:02:13 +0000 Subject: [PATCH] * Fix duplicated private messages * Fix minor message styling issues --- src/components/Message/ChatMessage.vue | 51 +++++++++++++++++++++ src/components/Message/EncryptedMessage.vue | 31 +++++++++---- src/pages/messages/Conversation.vue | 32 +++++++------ src/pages/messages/Messages.vue | 2 +- 4 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 src/components/Message/ChatMessage.vue diff --git a/src/components/Message/ChatMessage.vue b/src/components/Message/ChatMessage.vue new file mode 100644 index 0000000..e481ffb --- /dev/null +++ b/src/components/Message/ChatMessage.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/components/Message/EncryptedMessage.vue b/src/components/Message/EncryptedMessage.vue index 396c669..f58c8e1 100644 --- a/src/components/Message/EncryptedMessage.vue +++ b/src/components/Message/EncryptedMessage.vue @@ -1,6 +1,6 @@ @@ -17,6 +17,10 @@ export default { type: Object, required: true, }, + clickToDecrypt: { + type: Boolean, + default: false, + } }, setup() { return { @@ -25,26 +29,30 @@ export default { }, data() { return { - plaintext: null, decryptFailed: false, } }, computed: { note() { - if (!this.message) return + if (!this.message?.plaintext) return const note = new Note(this.message.id, this.message) - note.content = this.message.plaintext || this.plaintext + note.content = this.message.plaintext return note } }, methods: { async decrypt() { + if (this.message.plaintext) return try { + const messageId = this.message.id const counterparty = this.message.author === this.app.myPubkey ? this.message.recipient : this.message.author - this.plaintext = await this.app.decryptMessage(counterparty, this.message.content) - this.message.cachePlaintext(this.plaintext) + const plaintext = await this.app.decryptMessage(counterparty, this.message.content) + // The message can change while we are decrypting it, so we need to make sure not to cache the wrong message. + if (this.message.id === messageId) { + this.message.cachePlaintext(plaintext) + } } catch (e) { console.error('Failed to decrypt message', e) this.decryptFailed = true @@ -52,9 +60,16 @@ export default { } }, async mounted() { - if (!this.message.plaintext && this.app.activeAccount.canDecrypt()) { + if (this.app.activeAccount.canDecrypt()) { await this.decrypt() } + }, + watch: { + async message() { + if (this.app.activeAccount.canDecrypt()) { + await this.decrypt() + } + } } } diff --git a/src/pages/messages/Conversation.vue b/src/pages/messages/Conversation.vue index 31cac47..d3c46a2 100644 --- a/src/pages/messages/Conversation.vue +++ b/src/pages/messages/Conversation.vue @@ -5,15 +5,11 @@
- - - + :message="message" + />