@@ -22,11 +22,10 @@ use futures_util::pin_mut;
2222use imbl:: Vector ;
2323use itertools:: { Either , Itertools as _} ;
2424use matrix_sdk:: {
25- Client , Room ,
25+ Room ,
2626 deserialized_responses:: TimelineEventKind as SdkTimelineEventKind ,
2727 encryption:: backups:: BackupState ,
28- event_cache:: { self , RedecryptorReport } ,
29- event_handler:: EventHandlerHandle ,
28+ event_cache:: RedecryptorReport ,
3029 executor:: { JoinHandle , spawn} ,
3130} ;
3231use matrix_sdk_base:: crypto:: store:: types:: RoomKeyInfo ;
@@ -41,30 +40,21 @@ use crate::timeline::{
4140 EncryptedMessage , EventTimelineItem , TimelineController , TimelineItem , TimelineItemKind ,
4241 controller:: { TimelineSettings , TimelineState } ,
4342 event_item:: EventTimelineItemKind ,
44- to_device:: { handle_forwarded_room_key_event, handle_room_key_event} ,
4543 traits:: { Decryptor , RoomDataProvider } ,
4644} ;
4745
4846/// All the drop handles for the tasks used for crypto, namely message
4947/// re-decryption, in the timeline.
5048#[ derive( Debug ) ]
5149pub ( in crate :: timeline) struct CryptoDropHandles {
52- client : Client ,
53- event_handler_handles : Vec < EventHandlerHandle > ,
54- room_key_from_backups_join_handle : JoinHandle < ( ) > ,
55- room_keys_received_join_handle : JoinHandle < ( ) > ,
50+ redecryption_report_join_handle : JoinHandle < ( ) > ,
5651 room_key_backup_enabled_join_handle : JoinHandle < ( ) > ,
5752 encryption_changes_handle : JoinHandle < ( ) > ,
5853}
5954
6055impl Drop for CryptoDropHandles {
6156 fn drop ( & mut self ) {
62- for handle in self . event_handler_handles . drain ( ..) {
63- self . client . remove_event_handler ( handle) ;
64- }
65-
66- self . room_key_from_backups_join_handle . abort ( ) ;
67- self . room_keys_received_join_handle . abort ( ) ;
57+ self . redecryption_report_join_handle . abort ( ) ;
6858 self . room_key_backup_enabled_join_handle . abort ( ) ;
6959 self . encryption_changes_handle . abort ( ) ;
7060 }
@@ -232,49 +222,15 @@ pub(in crate::timeline) async fn spawn_crypto_tasks(
232222 room : Room ,
233223 controller : TimelineController ,
234224) -> CryptoDropHandles {
235- let room_key_handle = room
236- . client ( )
237- . add_event_handler ( handle_room_key_event ( controller. clone ( ) , room. room_id ( ) . to_owned ( ) ) ) ;
238-
239225 let client = room. client ( ) ;
240- let forwarded_room_key_handle = client. add_event_handler ( handle_forwarded_room_key_event (
241- controller. clone ( ) ,
242- room. room_id ( ) . to_owned ( ) ,
243- ) ) ;
244-
245- let event_handlers = vec ! [ room_key_handle, forwarded_room_key_handle] ;
246-
247- // Not using room.add_event_handler here because RoomKey events are
248- // to-device events that are not received in the context of a room.
249-
250- let room_key_from_backups_join_handle = spawn ( room_keys_from_backups_task (
251- client. encryption ( ) . backups ( ) . room_keys_for_room_stream ( controller. room ( ) . room_id ( ) ) ,
252- controller. clone ( ) ,
253- ) ) ;
254226
255227 let room_key_backup_enabled_join_handle =
256228 spawn ( backup_states_task ( client. encryption ( ) . backups ( ) . state_stream ( ) , controller. clone ( ) ) ) ;
257229
258- // TODO: Technically, this should be the only stream we need to listen to get
259- // notified when we should retry to decrypt an event. We sadly can't do that,
260- // since the cross-process support kills the `OlmMachine` which then in
261- // turn kills this stream. Once this is solved remove all the other ways we
262- // listen for room keys.
263- let room_keys_received_join_handle = {
264- spawn ( room_key_received_task (
265- client. encryption ( ) . room_keys_received_stream ( ) . await . expect (
266- "We should be logged in by now, so we should have access to an `OlmMachine` \
267- to be able to listen to this stream",
268- ) ,
269- controller. clone ( ) ,
270- ) )
271- } ;
230+ let redecryption_report_join_handle = spawn ( redecryption_report_task ( controller. clone ( ) ) ) ;
272231
273232 CryptoDropHandles {
274- client,
275- event_handler_handles : event_handlers,
276- room_key_from_backups_join_handle,
277- room_keys_received_join_handle,
233+ redecryption_report_join_handle,
278234 room_key_backup_enabled_join_handle,
279235 encryption_changes_handle : spawn ( async move {
280236 controller. handle_encryption_state_changes ( ) . await
0 commit comments