From 4c8bd07e8a70a603c2744f6b697ac4059979d2af Mon Sep 17 00:00:00 2001 From: N-Pex Date: Thu, 11 Jul 2024 15:52:45 +0200 Subject: [PATCH] Fix redacted media thread showing "message removed" for every media item. --- src/components/Chat.vue | 4 +-- src/components/chatMixin.js | 27 +++++++++---------- .../messages/MessageIncomingText.vue | 2 +- .../messages/MessageIncomingThread.vue | 2 +- .../messages/MessageOutgoingText.vue | 2 +- .../messages/MessageOutgoingThread.vue | 2 +- src/components/messages/messageMixin.js | 9 +++++++ 7 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 99364cf..133caa5 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -1635,10 +1635,10 @@ export default { // If this is a thread message, make sure to redact all children as well. const children = this.timelineSet.relations.getAllChildEventsForEvent(event.getId()).filter(e => util.downloadableTypes().includes(e.getContent().msgtype)); promises = children.map((c) => { - return this.$matrix.matrixClient.redactEvent(c.getRoomId(), c.getId()); + return this.$matrix.matrixClient.redactEvent(c.getRoomId(), c.getId(), undefined, { reason: "redactedMedia"}); }); } - promises.push(this.$matrix.matrixClient.redactEvent(event.getRoomId(), event.getId())); + promises.push(this.$matrix.matrixClient.redactEvent(event.getRoomId(), event.getId(), undefined, { reason: "redactedThread"})); Promise.allSettled(promises) .then(() => { console.log("Message redacted"); diff --git a/src/components/chatMixin.js b/src/components/chatMixin.js index 4c524ba..076b48c 100644 --- a/src/components/chatMixin.js +++ b/src/components/chatMixin.js @@ -125,13 +125,6 @@ export default { }, componentForEvent(event, isForExport = false) { - if (!event.isRelation() && !event.isRedaction() && event.isRedacted()) { - const redaction = event.getRedactionEvent(); - if (redaction && redaction.content && redaction.content.reason === "cancel") { - return null; // Show nothing, it was canceled! - } - } - switch (event.getType()) { case "m.room.member": if (event.getContent().membership == "join") { @@ -161,11 +154,14 @@ export default { case "m.room.message": if (event.getSender() != this.$matrix.currentUserId) { - if (event.isMxThread) { - // If redacted, use a text message (will show "This message was deleted") - if (event.isRedacted()) { + if (event.isRedacted()) { + // Redacted thread, show as text (and hide all media)! + if (event.getUnsigned().redacted_because.content.reason == "redactedThread") { return MessageIncomingText; } + return null; + } + if (event.isMxThread) { // Incoming thread, e.g. a file drop! return isForExport ? MessageIncomingThreadExport : MessageIncomingThread; } @@ -205,13 +201,14 @@ export default { } return MessageIncomingText; } else { - if (event.isMxThread) { - - // If redacted, use a text message (will show "This message was deleted") - if (event.isRedacted()) { + if (event.isRedacted()) { + // Redacted thread, show as text (and hide all media)! + if (event.getUnsigned().redacted_because.content.reason == "redactedThread") { return MessageOutgoingText; } - + return null; + } + if (event.isMxThread) { // Outgoing thread return isForExport ? MessageOutgoingThreadExport : MessageOutgoingThread; } diff --git a/src/components/messages/MessageIncomingText.vue b/src/components/messages/MessageIncomingText.vue index 2de19cd..1e30c2b 100644 --- a/src/components/messages/MessageIncomingText.vue +++ b/src/components/messages/MessageIncomingText.vue @@ -12,7 +12,7 @@
block - {{ $t('message.incoming_message_deleted_text')}} + {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}} diff --git a/src/components/messages/MessageIncomingThread.vue b/src/components/messages/MessageIncomingThread.vue index d428a8f..0b17928 100644 --- a/src/components/messages/MessageIncomingThread.vue +++ b/src/components/messages/MessageIncomingThread.vue @@ -19,7 +19,7 @@ block - {{ $t('message.incoming_message_deleted_text') }} + {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}} diff --git a/src/components/messages/MessageOutgoingText.vue b/src/components/messages/MessageOutgoingText.vue index a361d65..0267983 100644 --- a/src/components/messages/MessageOutgoingText.vue +++ b/src/components/messages/MessageOutgoingText.vue @@ -12,7 +12,7 @@
block - {{ $t('message.outgoing_message_deleted_text')}} + {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}} diff --git a/src/components/messages/MessageOutgoingThread.vue b/src/components/messages/MessageOutgoingThread.vue index 372ed33..0c1b9a7 100644 --- a/src/components/messages/MessageOutgoingThread.vue +++ b/src/components/messages/MessageOutgoingThread.vue @@ -20,7 +20,7 @@ block - {{ $t('message.outgoing_message_deleted_text') }} + {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}} diff --git a/src/components/messages/messageMixin.js b/src/components/messages/messageMixin.js index ad64d8d..274589d 100644 --- a/src/components/messages/messageMixin.js +++ b/src/components/messages/messageMixin.js @@ -279,6 +279,15 @@ export default { return false; }, + redactedBySomeoneElse(event) { + if (!event.isRedacted()) return false; + const redactionEvent = event.getUnsigned().redacted_because; + if (redactionEvent) { + return redactionEvent.sender !== this.$matrix.currentUserId; + } + return false; + }, + formatTimeAgo(time) { const date = new Date(); date.setTime(time);