mirror of
https://github.com/youwen5/iamb.git
synced 2025-06-20 05:39:52 -07:00
Show events that couldn't be decrypted (#57)
This commit is contained in:
parent
61897ea6f2
commit
7c1c62897a
4 changed files with 36 additions and 0 deletions
13
src/base.rs
13
src/base.rs
|
@ -14,6 +14,7 @@ use matrix_sdk::{
|
||||||
ruma::{
|
ruma::{
|
||||||
events::{
|
events::{
|
||||||
reaction::ReactionEvent,
|
reaction::ReactionEvent,
|
||||||
|
room::encrypted::RoomEncryptedEvent,
|
||||||
room::message::{
|
room::message::{
|
||||||
OriginalRoomMessageEvent,
|
OriginalRoomMessageEvent,
|
||||||
Relation,
|
Relation,
|
||||||
|
@ -484,6 +485,9 @@ impl RoomInfo {
|
||||||
};
|
};
|
||||||
|
|
||||||
match &mut msg.event {
|
match &mut msg.event {
|
||||||
|
MessageEvent::Encrypted(_) => {
|
||||||
|
return;
|
||||||
|
},
|
||||||
MessageEvent::Original(orig) => {
|
MessageEvent::Original(orig) => {
|
||||||
orig.content = *new_content;
|
orig.content = *new_content;
|
||||||
},
|
},
|
||||||
|
@ -498,6 +502,15 @@ impl RoomInfo {
|
||||||
msg.html = msg.event.html();
|
msg.html = msg.event.html();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Inserts events that couldn't be decrypted into the scrollback.
|
||||||
|
pub fn insert_encrypted(&mut self, msg: RoomEncryptedEvent) {
|
||||||
|
let event_id = msg.event_id().to_owned();
|
||||||
|
let key = (msg.origin_server_ts().into(), event_id.clone());
|
||||||
|
|
||||||
|
self.keys.insert(event_id, EventLocation::Message(key.clone()));
|
||||||
|
self.messages.insert(key, msg.into());
|
||||||
|
}
|
||||||
|
|
||||||
pub fn insert_message(&mut self, msg: RoomMessageEvent) {
|
pub fn insert_message(&mut self, msg: RoomMessageEvent) {
|
||||||
let event_id = msg.event_id().to_owned();
|
let event_id = msg.event_id().to_owned();
|
||||||
let key = (msg.origin_server_ts().into(), event_id.clone());
|
let key = (msg.origin_server_ts().into(), event_id.clone());
|
||||||
|
|
|
@ -12,6 +12,7 @@ use unicode_width::UnicodeWidthStr;
|
||||||
use matrix_sdk::ruma::{
|
use matrix_sdk::ruma::{
|
||||||
events::{
|
events::{
|
||||||
room::{
|
room::{
|
||||||
|
encrypted::RoomEncryptedEvent,
|
||||||
message::{
|
message::{
|
||||||
FormattedBody,
|
FormattedBody,
|
||||||
MessageFormat,
|
MessageFormat,
|
||||||
|
@ -318,6 +319,7 @@ impl PartialOrd for MessageCursor {
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub enum MessageEvent {
|
pub enum MessageEvent {
|
||||||
|
Encrypted(Box<RoomEncryptedEvent>),
|
||||||
Original(Box<OriginalRoomMessageEvent>),
|
Original(Box<OriginalRoomMessageEvent>),
|
||||||
Redacted(Box<RedactedRoomMessageEvent>),
|
Redacted(Box<RedactedRoomMessageEvent>),
|
||||||
Local(OwnedEventId, Box<RoomMessageEventContent>),
|
Local(OwnedEventId, Box<RoomMessageEventContent>),
|
||||||
|
@ -326,6 +328,7 @@ pub enum MessageEvent {
|
||||||
impl MessageEvent {
|
impl MessageEvent {
|
||||||
pub fn event_id(&self) -> &EventId {
|
pub fn event_id(&self) -> &EventId {
|
||||||
match self {
|
match self {
|
||||||
|
MessageEvent::Encrypted(msg) => msg.event_id(),
|
||||||
MessageEvent::Original(ev) => ev.event_id.as_ref(),
|
MessageEvent::Original(ev) => ev.event_id.as_ref(),
|
||||||
MessageEvent::Redacted(ev) => ev.event_id.as_ref(),
|
MessageEvent::Redacted(ev) => ev.event_id.as_ref(),
|
||||||
MessageEvent::Local(event_id, _) => event_id.as_ref(),
|
MessageEvent::Local(event_id, _) => event_id.as_ref(),
|
||||||
|
@ -334,6 +337,7 @@ impl MessageEvent {
|
||||||
|
|
||||||
pub fn body(&self) -> Cow<'_, str> {
|
pub fn body(&self) -> Cow<'_, str> {
|
||||||
match self {
|
match self {
|
||||||
|
MessageEvent::Encrypted(_) => "[Unable to decrypt message]".into(),
|
||||||
MessageEvent::Original(ev) => body_cow_content(&ev.content),
|
MessageEvent::Original(ev) => body_cow_content(&ev.content),
|
||||||
MessageEvent::Redacted(ev) => {
|
MessageEvent::Redacted(ev) => {
|
||||||
let reason = ev
|
let reason = ev
|
||||||
|
@ -355,6 +359,7 @@ impl MessageEvent {
|
||||||
|
|
||||||
pub fn html(&self) -> Option<StyleTree> {
|
pub fn html(&self) -> Option<StyleTree> {
|
||||||
let content = match self {
|
let content = match self {
|
||||||
|
MessageEvent::Encrypted(_) => return None,
|
||||||
MessageEvent::Original(ev) => &ev.content,
|
MessageEvent::Original(ev) => &ev.content,
|
||||||
MessageEvent::Redacted(_) => return None,
|
MessageEvent::Redacted(_) => return None,
|
||||||
MessageEvent::Local(_, content) => content,
|
MessageEvent::Local(_, content) => content,
|
||||||
|
@ -373,6 +378,7 @@ impl MessageEvent {
|
||||||
|
|
||||||
pub fn redact(&mut self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) {
|
pub fn redact(&mut self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) {
|
||||||
match self {
|
match self {
|
||||||
|
MessageEvent::Encrypted(_) => return,
|
||||||
MessageEvent::Redacted(_) => return,
|
MessageEvent::Redacted(_) => return,
|
||||||
MessageEvent::Local(_, _) => return,
|
MessageEvent::Local(_, _) => return,
|
||||||
MessageEvent::Original(ev) => {
|
MessageEvent::Original(ev) => {
|
||||||
|
@ -548,6 +554,7 @@ impl Message {
|
||||||
|
|
||||||
pub fn reply_to(&self) -> Option<OwnedEventId> {
|
pub fn reply_to(&self) -> Option<OwnedEventId> {
|
||||||
let content = match &self.event {
|
let content = match &self.event {
|
||||||
|
MessageEvent::Encrypted(_) => return None,
|
||||||
MessageEvent::Local(_, content) => content,
|
MessageEvent::Local(_, content) => content,
|
||||||
MessageEvent::Original(ev) => &ev.content,
|
MessageEvent::Original(ev) => &ev.content,
|
||||||
MessageEvent::Redacted(_) => return None,
|
MessageEvent::Redacted(_) => return None,
|
||||||
|
@ -771,6 +778,16 @@ impl Message {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<RoomEncryptedEvent> for Message {
|
||||||
|
fn from(event: RoomEncryptedEvent) -> Self {
|
||||||
|
let timestamp = event.origin_server_ts().into();
|
||||||
|
let user_id = event.sender().to_owned();
|
||||||
|
let content = MessageEvent::Encrypted(event.into());
|
||||||
|
|
||||||
|
Message::new(content, user_id, timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<OriginalRoomMessageEvent> for Message {
|
impl From<OriginalRoomMessageEvent> for Message {
|
||||||
fn from(event: OriginalRoomMessageEvent) -> Self {
|
fn from(event: OriginalRoomMessageEvent) -> Self {
|
||||||
let timestamp = event.origin_server_ts.into();
|
let timestamp = event.origin_server_ts.into();
|
||||||
|
|
|
@ -294,6 +294,7 @@ impl ChatState {
|
||||||
MessageAction::React(emoji) => {
|
MessageAction::React(emoji) => {
|
||||||
let room = self.get_joined(&store.application.worker)?;
|
let room = self.get_joined(&store.application.worker)?;
|
||||||
let event_id = match &msg.event {
|
let event_id = match &msg.event {
|
||||||
|
MessageEvent::Encrypted(msg) => msg.event_id().to_owned(),
|
||||||
MessageEvent::Original(ev) => ev.event_id.clone(),
|
MessageEvent::Original(ev) => ev.event_id.clone(),
|
||||||
MessageEvent::Local(event_id, _) => event_id.clone(),
|
MessageEvent::Local(event_id, _) => event_id.clone(),
|
||||||
MessageEvent::Redacted(_) => {
|
MessageEvent::Redacted(_) => {
|
||||||
|
@ -313,6 +314,7 @@ impl ChatState {
|
||||||
MessageAction::Redact(reason) => {
|
MessageAction::Redact(reason) => {
|
||||||
let room = self.get_joined(&store.application.worker)?;
|
let room = self.get_joined(&store.application.worker)?;
|
||||||
let event_id = match &msg.event {
|
let event_id = match &msg.event {
|
||||||
|
MessageEvent::Encrypted(msg) => msg.event_id().to_owned(),
|
||||||
MessageEvent::Original(ev) => ev.event_id.clone(),
|
MessageEvent::Original(ev) => ev.event_id.clone(),
|
||||||
MessageEvent::Local(event_id, _) => event_id.clone(),
|
MessageEvent::Local(event_id, _) => event_id.clone(),
|
||||||
MessageEvent::Redacted(_) => {
|
MessageEvent::Redacted(_) => {
|
||||||
|
@ -338,6 +340,7 @@ impl ChatState {
|
||||||
MessageAction::Unreact(emoji) => {
|
MessageAction::Unreact(emoji) => {
|
||||||
let room = self.get_joined(&store.application.worker)?;
|
let room = self.get_joined(&store.application.worker)?;
|
||||||
let event_id: &EventId = match &msg.event {
|
let event_id: &EventId = match &msg.event {
|
||||||
|
MessageEvent::Encrypted(msg) => msg.event_id(),
|
||||||
MessageEvent::Original(ev) => ev.event_id.as_ref(),
|
MessageEvent::Original(ev) => ev.event_id.as_ref(),
|
||||||
MessageEvent::Local(event_id, _) => event_id.as_ref(),
|
MessageEvent::Local(event_id, _) => event_id.as_ref(),
|
||||||
MessageEvent::Redacted(_) => {
|
MessageEvent::Redacted(_) => {
|
||||||
|
|
|
@ -234,6 +234,9 @@ async fn load_insert(room_id: OwnedRoomId, res: MessageFetchResult, store: Async
|
||||||
let _ = presences.get_or_default(sender);
|
let _ = presences.get_or_default(sender);
|
||||||
|
|
||||||
match msg {
|
match msg {
|
||||||
|
AnyMessageLikeEvent::RoomEncrypted(msg) => {
|
||||||
|
info.insert_encrypted(msg);
|
||||||
|
},
|
||||||
AnyMessageLikeEvent::RoomMessage(msg) => {
|
AnyMessageLikeEvent::RoomMessage(msg) => {
|
||||||
info.insert(msg);
|
info.insert(msg);
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue