use ruma::{
RoomId,
events::{
AnySyncMessageLikeEvent, AnySyncTimelineEvent, SyncMessageLikeEvent,
room::message::MessageType,
},
};
use super::e2ee::E2EE;
use crate::Result;
pub async fn process_if_relevant(
event: &AnySyncTimelineEvent,
e2ee: E2EE<'_>,
room_id: &RoomId,
) -> Result<()> {
if !e2ee.verification_is_allowed {
return Ok(());
}
let Some(olm) = e2ee.olm_machine else {
return Ok(());
};
let AnySyncTimelineEvent::MessageLike(event) = event else {
return Ok(());
};
match event {
AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent::Original(original_event))
if matches!(&original_event.content.msgtype, MessageType::VerificationRequest(_)) => {}
AnySyncMessageLikeEvent::KeyVerificationReady(_)
| AnySyncMessageLikeEvent::KeyVerificationStart(_)
| AnySyncMessageLikeEvent::KeyVerificationCancel(_)
| AnySyncMessageLikeEvent::KeyVerificationAccept(_)
| AnySyncMessageLikeEvent::KeyVerificationKey(_)
| AnySyncMessageLikeEvent::KeyVerificationMac(_)
| AnySyncMessageLikeEvent::KeyVerificationDone(_) => {}
_ => {
return Ok(());
}
}
Ok(olm.receive_verification_event(&event.clone().into_full_event(room_id.to_owned())).await?)
}