Fix redacted media thread showing "message removed" for every media item.

This commit is contained in:
N-Pex 2024-07-11 15:52:45 +02:00
parent 6a00a334b5
commit 4c8bd07e8a
7 changed files with 27 additions and 21 deletions

View file

@ -1635,10 +1635,10 @@ export default {
// If this is a thread message, make sure to redact all children as well. // 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)); const children = this.timelineSet.relations.getAllChildEventsForEvent(event.getId()).filter(e => util.downloadableTypes().includes(e.getContent().msgtype));
promises = children.map((c) => { 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) Promise.allSettled(promises)
.then(() => { .then(() => {
console.log("Message redacted"); console.log("Message redacted");

View file

@ -125,13 +125,6 @@ export default {
}, },
componentForEvent(event, isForExport = false) { 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()) { switch (event.getType()) {
case "m.room.member": case "m.room.member":
if (event.getContent().membership == "join") { if (event.getContent().membership == "join") {
@ -161,11 +154,14 @@ export default {
case "m.room.message": case "m.room.message":
if (event.getSender() != this.$matrix.currentUserId) { if (event.getSender() != this.$matrix.currentUserId) {
if (event.isMxThread) { if (event.isRedacted()) {
// If redacted, use a text message (will show "This message was deleted") // Redacted thread, show as text (and hide all media)!
if (event.isRedacted()) { if (event.getUnsigned().redacted_because.content.reason == "redactedThread") {
return MessageIncomingText; return MessageIncomingText;
} }
return null;
}
if (event.isMxThread) {
// Incoming thread, e.g. a file drop! // Incoming thread, e.g. a file drop!
return isForExport ? MessageIncomingThreadExport : MessageIncomingThread; return isForExport ? MessageIncomingThreadExport : MessageIncomingThread;
} }
@ -205,13 +201,14 @@ export default {
} }
return MessageIncomingText; return MessageIncomingText;
} else { } else {
if (event.isMxThread) { if (event.isRedacted()) {
// Redacted thread, show as text (and hide all media)!
// If redacted, use a text message (will show "This message was deleted") if (event.getUnsigned().redacted_because.content.reason == "redactedThread") {
if (event.isRedacted()) {
return MessageOutgoingText; return MessageOutgoingText;
} }
return null;
}
if (event.isMxThread) {
// Outgoing thread // Outgoing thread
return isForExport ? MessageOutgoingThreadExport : MessageOutgoingThread; return isForExport ? MessageOutgoingThreadExport : MessageOutgoingThread;
} }

View file

@ -12,7 +12,7 @@
<div class="message"> <div class="message">
<i v-if="event.isRedacted()" class="deleted-text"> <i v-if="event.isRedacted()" class="deleted-text">
<v-icon :color="this.senderIsAdminOrModerator(this.event)?'white':''" size="small">block</v-icon> <v-icon :color="this.senderIsAdminOrModerator(this.event)?'white':''" size="small">block</v-icon>
{{ $t('message.incoming_message_deleted_text')}} {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}}
</i> </i>
<span v-html="linkify($sanitize(messageText))" v-else/> <span v-html="linkify($sanitize(messageText))" v-else/>
<span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()"> <span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()">

View file

@ -19,7 +19,7 @@
</v-container> </v-container>
<i v-if="event.isRedacted()" class="deleted-text"> <i v-if="event.isRedacted()" class="deleted-text">
<v-icon :color="this.senderIsAdminOrModerator(this.event) ? 'white' : ''" size="small">block</v-icon> <v-icon :color="this.senderIsAdminOrModerator(this.event) ? 'white' : ''" size="small">block</v-icon>
{{ $t('message.incoming_message_deleted_text') }} {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}}
</i> </i>
<span v-html="linkify($sanitize(messageText))" v-else /> <span v-html="linkify($sanitize(messageText))" v-else />
<span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()"> <span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()">

View file

@ -12,7 +12,7 @@
<div class="message"> <div class="message">
<i v-if="event.isRedacted()" class="deleted-text"> <i v-if="event.isRedacted()" class="deleted-text">
<v-icon size="small">block</v-icon> <v-icon size="small">block</v-icon>
{{ $t('message.outgoing_message_deleted_text')}} {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}}
</i> </i>
<span v-html="linkify($sanitize(messageText))" v-else/> <span v-html="linkify($sanitize(messageText))" v-else/>
<span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()"> <span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()">

View file

@ -20,7 +20,7 @@
</v-container> </v-container>
<i v-if="event.isRedacted()" class="deleted-text"> <i v-if="event.isRedacted()" class="deleted-text">
<v-icon size="small">block</v-icon> <v-icon size="small">block</v-icon>
{{ $t('message.outgoing_message_deleted_text') }} {{ redactedBySomeoneElse(event) ? $t('message.incoming_message_deleted_text') : $t('message.outgoing_message_deleted_text')}}
</i> </i>
<span v-html="linkify($sanitize(messageText))" v-else /> <span v-html="linkify($sanitize(messageText))" v-else />
<span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()"> <span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()">

View file

@ -279,6 +279,15 @@ export default {
return false; 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) { formatTimeAgo(time) {
const date = new Date(); const date = new Date();
date.setTime(time); date.setTime(time);