Skip to content

Commit 6e97607

Browse files
committed
refactor(timeline): Replace the various decryption tasks with one R2D2 task
1 parent 4e71b7c commit 6e97607

File tree

1 file changed

+6
-50
lines changed

1 file changed

+6
-50
lines changed

crates/matrix-sdk-ui/src/timeline/controller/decryption_retry_task.rs

Lines changed: 6 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,10 @@ use futures_util::pin_mut;
2222
use imbl::Vector;
2323
use itertools::{Either, Itertools as _};
2424
use 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
};
3231
use 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)]
5149
pub(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

6055
impl 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

Comments
 (0)