use matrix_sdk_common::deserialized_responses::TimelineEvent;
use matrix_sdk_crypto::RoomEventDecryptionResult;
use ruma::RoomId;
use super::{super::verification, E2EE};
use crate::Result;
pub async fn sync_timeline_event(
e2ee: E2EE<'_>,
event: &TimelineEvent,
room_id: &RoomId,
) -> Result<Option<TimelineEvent>> {
let Some(olm) = e2ee.olm_machine else { return Ok(None) };
Ok(Some(
match olm
.try_decrypt_room_event(
event.raw().cast_ref_unchecked(),
room_id,
e2ee.decryption_settings,
)
.await?
{
RoomEventDecryptionResult::Decrypted(decrypted) => {
let timeline_event = event.to_decrypted(decrypted, None);
if let Ok(sync_timeline_event) = timeline_event.raw().deserialize() {
verification::process_if_relevant(&sync_timeline_event, e2ee, room_id).await?;
}
timeline_event
}
RoomEventDecryptionResult::UnableToDecrypt(utd_info) => event.to_utd(utd_info),
},
))
}