@@ -80,7 +80,7 @@ use crate::{
80
80
date_dividers:: DateDividerAdjuster ,
81
81
event_item:: EventTimelineItemKind ,
82
82
pinned_events_loader:: { PinnedEventsLoader , PinnedEventsLoaderError } ,
83
- TimelineEventFilterFn ,
83
+ EncryptedMessage , TimelineEventFilterFn ,
84
84
} ,
85
85
unable_to_decrypt_hook:: UtdHookManager ,
86
86
} ;
@@ -1062,8 +1062,6 @@ impl<P: RoomDataProvider> TimelineController<P> {
1062
1062
decryptor : impl Decryptor ,
1063
1063
session_ids : Option < BTreeSet < String > > ,
1064
1064
) {
1065
- use super :: EncryptedMessage ;
1066
-
1067
1065
let mut state = self . state . clone ( ) . write_owned ( ) . await ;
1068
1066
1069
1067
let should_retry = move |session_id : & str | {
@@ -1074,21 +1072,7 @@ impl<P: RoomDataProvider> TimelineController<P> {
1074
1072
}
1075
1073
} ;
1076
1074
1077
- let retry_indices: Vec < _ > = state
1078
- . items
1079
- . iter ( )
1080
- . enumerate ( )
1081
- . filter_map ( |( idx, item) | match item. as_event ( ) ?. content ( ) . as_unable_to_decrypt ( ) ? {
1082
- EncryptedMessage :: MegolmV1AesSha2 { session_id, .. }
1083
- if should_retry ( session_id) =>
1084
- {
1085
- Some ( idx)
1086
- }
1087
- EncryptedMessage :: MegolmV1AesSha2 { .. }
1088
- | EncryptedMessage :: OlmV1Curve25519AesSha2 { .. }
1089
- | EncryptedMessage :: Unknown => None ,
1090
- } )
1091
- . collect ( ) ;
1075
+ let retry_indices = event_indices_to_retry_decryption ( & state, & should_retry) ;
1092
1076
1093
1077
if retry_indices. is_empty ( ) {
1094
1078
return ;
@@ -1433,6 +1417,26 @@ impl<P: RoomDataProvider> TimelineController<P> {
1433
1417
}
1434
1418
}
1435
1419
1420
+ fn event_indices_to_retry_decryption (
1421
+ state : & tokio:: sync:: OwnedRwLockWriteGuard < TimelineState > ,
1422
+ should_retry : impl Fn ( & str ) -> bool ,
1423
+ ) -> Vec < usize > {
1424
+ let retry_indices: Vec < _ > = state
1425
+ . items
1426
+ . iter ( )
1427
+ . enumerate ( )
1428
+ . filter_map ( |( idx, item) | match item. as_event ( ) ?. content ( ) . as_unable_to_decrypt ( ) ? {
1429
+ EncryptedMessage :: MegolmV1AesSha2 { session_id, .. } if should_retry ( session_id) => {
1430
+ Some ( idx)
1431
+ }
1432
+ EncryptedMessage :: MegolmV1AesSha2 { .. }
1433
+ | EncryptedMessage :: OlmV1Curve25519AesSha2 { .. }
1434
+ | EncryptedMessage :: Unknown => None ,
1435
+ } )
1436
+ . collect ( ) ;
1437
+ retry_indices
1438
+ }
1439
+
1436
1440
impl TimelineController {
1437
1441
pub ( super ) fn room ( & self ) -> & Room {
1438
1442
& self . room_data_provider
0 commit comments