From dac9f06611fe111dcb0a15346b2b0e1df4cee693 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 17 Oct 2024 21:34:42 +0100 Subject: [PATCH] refactor(timeline): retry_event_decryption: re-use utd cause Rather than calling `UtdCause::determine` again when an event is successfully decrypted on retry, re-use the cause we already determined. --- .../src/timeline/controller/mod.rs | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/crates/matrix-sdk-ui/src/timeline/controller/mod.rs b/crates/matrix-sdk-ui/src/timeline/controller/mod.rs index 6dbab04a5db..3a37135059e 100644 --- a/crates/matrix-sdk-ui/src/timeline/controller/mod.rs +++ b/crates/matrix-sdk-ui/src/timeline/controller/mod.rs @@ -989,8 +989,6 @@ impl TimelineController

{ decryptor: impl Decryptor, session_ids: Option>, ) { - use matrix_sdk::crypto::types::events::UtdCause; - use super::EncryptedMessage; let mut state = self.state.clone().write_owned().await; @@ -1038,16 +1036,17 @@ impl TimelineController

{ async move { let event_item = item.as_event()?; - let session_id = match event_item.content().as_unable_to_decrypt()? { - EncryptedMessage::MegolmV1AesSha2 { session_id, .. } - if should_retry(session_id) => - { - session_id - } - EncryptedMessage::MegolmV1AesSha2 { .. } - | EncryptedMessage::OlmV1Curve25519AesSha2 { .. } - | EncryptedMessage::Unknown => return None, - }; + let (session_id, utd_cause) = + match event_item.content().as_unable_to_decrypt()? { + EncryptedMessage::MegolmV1AesSha2 { session_id, cause, .. } + if should_retry(session_id) => + { + (session_id, cause) + } + EncryptedMessage::MegolmV1AesSha2 { .. } + | EncryptedMessage::OlmV1Curve25519AesSha2 { .. } + | EncryptedMessage::Unknown => return None, + }; tracing::Span::current().record("session_id", session_id); @@ -1069,11 +1068,9 @@ impl TimelineController

{ "Successfully decrypted event that previously failed to decrypt" ); - let cause = UtdCause::determine(Some(original_json)); - // Notify observers that we managed to eventually decrypt an event. if let Some(hook) = unable_to_decrypt_hook { - hook.on_late_decrypt(&remote_event.event_id, cause).await; + hook.on_late_decrypt(&remote_event.event_id, *utd_cause).await; } Some(event)