Skip to content

Commit efe511e

Browse files
authored
Merge pull request #5869 from matrix-org/poljar/event-cache/remove-timeline-redecrypion-logic
2 parents 4ae82dd + e9c8f10 commit efe511e

File tree

8 files changed

+174
-923
lines changed

8 files changed

+174
-923
lines changed

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

Lines changed: 72 additions & 425 deletions
Large diffs are not rendered by default.

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use std::{collections::BTreeSet, fmt, sync::Arc};
1616

1717
use as_variant::as_variant;
18-
use decryption_retry_task::DecryptionRetryTask;
1918
use eyeball_im::{VectorDiff, VectorSubscriberStream};
2019
use eyeball_im_util::vector::{FilterMap, VectorObserverExt};
2120
use futures_core::Stream;
@@ -24,7 +23,7 @@ use imbl::Vector;
2423
use matrix_sdk::Result;
2524
use matrix_sdk::{
2625
deserialized_responses::TimelineEvent,
27-
event_cache::{RoomEventCache, RoomPaginationStatus},
26+
event_cache::{DecryptionRetryRequest, RoomEventCache, RoomPaginationStatus},
2827
paginators::{PaginationResult, PaginationToken, Paginator},
2928
send_queue::{
3029
LocalEcho, LocalEchoContent, RoomSendQueueUpdate, SendHandle, SendReactionHandle,
@@ -73,6 +72,7 @@ use crate::{
7372
timeline::{
7473
MsgLikeContent, MsgLikeKind, Room, TimelineEventFilterFn,
7574
algorithms::rfind_event_by_item_id,
75+
controller::decryption_retry_task::compute_redecryption_candidates,
7676
date_dividers::DateDividerAdjuster,
7777
event_item::TimelineItemHandle,
7878
pinned_events_loader::{PinnedEventsLoader, PinnedEventsLoaderError},
@@ -261,10 +261,6 @@ pub(super) struct TimelineController<P: RoomDataProvider = Room> {
261261

262262
/// Settings applied to this timeline.
263263
pub(super) settings: TimelineSettings,
264-
265-
/// Long-running task used to retry decryption of timeline items without
266-
/// blocking main processing.
267-
decryption_retry_task: DecryptionRetryTask<P, P>,
268264
}
269265

270266
#[derive(Clone)]
@@ -426,10 +422,7 @@ impl<P: RoomDataProvider> TimelineController<P> {
426422
is_room_encrypted,
427423
)));
428424

429-
let decryption_retry_task =
430-
DecryptionRetryTask::new(state.clone(), room_data_provider.clone());
431-
432-
Self { state, focus, room_data_provider, settings, decryption_retry_task }
425+
Self { state, focus, room_data_provider, settings }
433426
}
434427

435428
/// Initializes the configured focus with appropriate data.
@@ -1267,10 +1260,11 @@ impl<P: RoomDataProvider> TimelineController<P> {
12671260
true
12681261
}
12691262

1270-
pub(crate) async fn retry_event_decryption_inner(&self, session_ids: Option<BTreeSet<String>>) {
1271-
self.decryption_retry_task
1272-
.decrypt(self.room_data_provider.clone(), session_ids, self.settings.clone())
1273-
.await;
1263+
pub(super) async fn compute_redecryption_candidates(
1264+
&self,
1265+
) -> (BTreeSet<String>, BTreeSet<String>) {
1266+
let state = self.state.read().await;
1267+
compute_redecryption_candidates(&state.items)
12741268
}
12751269

12761270
pub(super) async fn set_sender_profiles_pending(&self) {
@@ -1791,7 +1785,15 @@ impl TimelineController {
17911785

17921786
#[instrument(skip(self), fields(room_id = ?self.room().room_id()))]
17931787
pub(super) async fn retry_event_decryption(&self, session_ids: Option<BTreeSet<String>>) {
1794-
self.retry_event_decryption_inner(session_ids).await
1788+
let (utds, decrypted) = self.compute_redecryption_candidates().await;
1789+
1790+
let request = DecryptionRetryRequest {
1791+
room_id: self.room().room_id().to_owned(),
1792+
utd_session_ids: utds,
1793+
refresh_info_session_ids: decrypted,
1794+
};
1795+
1796+
self.room().client().event_cache().request_decryption(request);
17951797
}
17961798

17971799
/// Combine the global (event cache) pagination status with the local state

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

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use std::{future::Future, sync::Arc};
15+
use std::sync::Arc;
1616

1717
use eyeball_im::VectorDiff;
1818
use matrix_sdk::{deserialized_responses::TimelineEvent, send_queue::SendHandle};
@@ -28,11 +28,9 @@ use tracing::{instrument, trace, warn};
2828

2929
use super::{
3030
super::{
31-
Profile, TimelineItem,
31+
Profile,
3232
date_dividers::DateDividerAdjuster,
33-
event_handler::{
34-
Flow, TimelineAction, TimelineEventContext, TimelineEventHandler, TimelineItemPosition,
35-
},
33+
event_handler::{Flow, TimelineAction, TimelineEventContext, TimelineEventHandler},
3634
event_item::RemoteEventOrigin,
3735
traits::RoomDataProvider,
3836
},
@@ -199,53 +197,6 @@ impl<P: RoomDataProvider> TimelineState<P> {
199197
txn.commit();
200198
}
201199

202-
pub(super) async fn retry_event_decryption<Fut>(
203-
&mut self,
204-
retry_one: impl Fn(Arc<TimelineItem>) -> Fut,
205-
retry_indices: Vec<usize>,
206-
room_data_provider: &P,
207-
settings: &TimelineSettings,
208-
) where
209-
Fut: Future<Output = Option<TimelineEvent>>,
210-
{
211-
let mut txn = self.transaction();
212-
213-
let mut date_divider_adjuster =
214-
DateDividerAdjuster::new(settings.date_divider_mode.clone());
215-
216-
// Loop through all the indices, in order so we don't decrypt edits
217-
// before the event being edited, if both were UTD. Keep track of
218-
// index change as UTDs are removed instead of updated.
219-
let mut offset = 0;
220-
for idx in retry_indices {
221-
let idx = idx - offset;
222-
let Some(event) = retry_one(txn.items[idx].clone()).await else {
223-
continue;
224-
};
225-
226-
let removed_item = txn
227-
.handle_remote_event(
228-
event,
229-
TimelineItemPosition::UpdateAt { timeline_item_index: idx },
230-
room_data_provider,
231-
settings,
232-
&mut date_divider_adjuster,
233-
&mut Default::default(),
234-
)
235-
.await;
236-
237-
// If the UTD was removed rather than updated, offset all
238-
// subsequent loop iterations.
239-
if removed_item {
240-
offset += 1;
241-
}
242-
}
243-
244-
txn.adjust_date_dividers(date_divider_adjuster);
245-
246-
txn.commit();
247-
}
248-
249200
#[cfg(test)]
250201
pub(super) fn handle_read_receipts(
251202
&mut self,

crates/matrix-sdk-ui/src/timeline/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ mod subscriber;
8484
mod tasks;
8585
#[cfg(test)]
8686
mod tests;
87-
mod to_device;
8887
mod traits;
8988
mod virtual_item;
9089

0 commit comments

Comments
 (0)