Support redacting messages (#5)

This commit is contained in:
Ulyssa 2023-01-13 17:53:54 -08:00
parent d13d4b9f7f
commit 56ec90523c
No known key found for this signature in database
GPG key ID: 1B3965A3D18B9B64
6 changed files with 132 additions and 8 deletions

View file

@ -11,16 +11,23 @@ use unicode_segmentation::UnicodeSegmentation;
use unicode_width::UnicodeWidthStr;
use matrix_sdk::ruma::{
events::room::message::{
MessageType,
OriginalRoomMessageEvent,
RedactedRoomMessageEvent,
RoomMessageEvent,
RoomMessageEventContent,
events::{
room::{
message::{
MessageType,
OriginalRoomMessageEvent,
RedactedRoomMessageEvent,
RoomMessageEvent,
RoomMessageEventContent,
},
redaction::SyncRoomRedactionEvent,
},
Redact,
},
MilliSecondsSinceUnixEpoch,
OwnedEventId,
OwnedUserId,
RoomVersionId,
UInt,
};
@ -323,10 +330,34 @@ impl MessageEvent {
pub fn show(&self) -> Cow<'_, str> {
match self {
MessageEvent::Original(ev) => show_room_content(&ev.content),
MessageEvent::Redacted(_) => Cow::Borrowed("[redacted]"),
MessageEvent::Redacted(ev) => {
let reason = ev
.unsigned
.redacted_because
.as_ref()
.and_then(|e| e.as_original())
.and_then(|r| r.content.reason.as_ref());
if let Some(r) = reason {
Cow::Owned(format!("[Redacted: {:?}]", r))
} else {
Cow::Borrowed("[Redacted]")
}
},
MessageEvent::Local(content) => show_room_content(content),
}
}
pub fn redact(&mut self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) {
match self {
MessageEvent::Redacted(_) => return,
MessageEvent::Local(_) => return,
MessageEvent::Original(ev) => {
let redacted = ev.clone().redact(redaction, version);
*self = MessageEvent::Redacted(Box::new(redacted));
},
}
}
}
fn show_room_content(content: &RoomMessageEventContent) -> Cow<'_, str> {