mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-11 01:13:14 -04:00
refactor(timeline): get rid of HandleEventResult
This commit is contained in:
@@ -204,7 +204,7 @@ impl TimelineState {
|
||||
continue;
|
||||
};
|
||||
|
||||
let handle_one_res = txn
|
||||
let removed_item = txn
|
||||
.handle_remote_event(
|
||||
event,
|
||||
TimelineItemPosition::UpdateAt { timeline_item_index: idx },
|
||||
@@ -216,7 +216,7 @@ impl TimelineState {
|
||||
|
||||
// If the UTD was removed rather than updated, offset all
|
||||
// subsequent loop iterations.
|
||||
if handle_one_res.item_removed {
|
||||
if removed_item {
|
||||
offset += 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,10 +24,7 @@ use super::{
|
||||
super::{
|
||||
controller::{FullEventMeta, ObservableItemsTransactionEntry},
|
||||
date_dividers::DateDividerAdjuster,
|
||||
event_handler::{
|
||||
Flow, HandleEventResult, TimelineEventContext, TimelineEventHandler,
|
||||
TimelineItemPosition,
|
||||
},
|
||||
event_handler::{Flow, TimelineEventContext, TimelineEventHandler, TimelineItemPosition},
|
||||
event_item::RemoteEventOrigin,
|
||||
traits::RoomDataProvider,
|
||||
},
|
||||
@@ -36,7 +33,10 @@ use super::{
|
||||
};
|
||||
use crate::{
|
||||
events::SyncTimelineEventWithoutContent,
|
||||
timeline::{event_handler::TimelineAction, VirtualTimelineItem},
|
||||
timeline::{
|
||||
event_handler::{RemovedItem, TimelineAction},
|
||||
VirtualTimelineItem,
|
||||
},
|
||||
};
|
||||
|
||||
pub(in crate::timeline) struct TimelineStateTransaction<'a> {
|
||||
@@ -231,7 +231,7 @@ impl<'a> TimelineStateTransaction<'a> {
|
||||
|
||||
/// Handle a remote event.
|
||||
///
|
||||
/// Returns the number of timeline updates that were made.
|
||||
/// Returns whether an item has been removed from the timeline.
|
||||
pub(super) async fn handle_remote_event<P: RoomDataProvider>(
|
||||
&mut self,
|
||||
event: TimelineEvent,
|
||||
@@ -239,7 +239,7 @@ impl<'a> TimelineStateTransaction<'a> {
|
||||
room_data_provider: &P,
|
||||
settings: &TimelineSettings,
|
||||
date_divider_adjuster: &mut DateDividerAdjuster,
|
||||
) -> HandleEventResult {
|
||||
) -> RemovedItem {
|
||||
let TimelineEvent { push_actions, kind } = event;
|
||||
let encryption_info = kind.encryption_info().cloned();
|
||||
|
||||
@@ -365,7 +365,8 @@ impl<'a> TimelineStateTransaction<'a> {
|
||||
)
|
||||
.await;
|
||||
|
||||
return HandleEventResult::default();
|
||||
// No item has been removed.
|
||||
return false;
|
||||
}
|
||||
|
||||
// The event can NOT be partially deserialized, it seems really broken.
|
||||
@@ -402,7 +403,8 @@ impl<'a> TimelineStateTransaction<'a> {
|
||||
.await;
|
||||
}
|
||||
|
||||
return HandleEventResult::default();
|
||||
// No item has been removed.
|
||||
return false;
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -451,7 +453,8 @@ impl<'a> TimelineStateTransaction<'a> {
|
||||
.handle_event(date_divider_adjuster, timeline_action)
|
||||
.await
|
||||
} else {
|
||||
HandleEventResult::default()
|
||||
// No item has been removed from the timeline.
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -569,16 +569,8 @@ pub(super) enum TimelineItemPosition {
|
||||
},
|
||||
}
|
||||
|
||||
/// The outcome of handling a single event with
|
||||
/// [`TimelineEventHandler::handle_event`].
|
||||
#[derive(Default)]
|
||||
pub(super) struct HandleEventResult {
|
||||
/// Was some timeline item removed?
|
||||
///
|
||||
/// This can happen only if there was a UTD item that has been decrypted
|
||||
/// into an item that was filtered out with the event filter.
|
||||
pub(super) item_removed: bool,
|
||||
}
|
||||
/// Whether an item was removed or not.
|
||||
pub(super) type RemovedItem = bool;
|
||||
|
||||
/// Data necessary to update the timeline, given a single event to handle.
|
||||
///
|
||||
@@ -590,7 +582,6 @@ pub(super) struct TimelineEventHandler<'a, 'o> {
|
||||
items: &'a mut ObservableItemsTransaction<'o>,
|
||||
meta: &'a mut TimelineMetadata,
|
||||
ctx: TimelineEventContext,
|
||||
result: HandleEventResult,
|
||||
}
|
||||
|
||||
impl<'a, 'o> TimelineEventHandler<'a, 'o> {
|
||||
@@ -599,7 +590,7 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
|
||||
ctx: TimelineEventContext,
|
||||
) -> Self {
|
||||
let TimelineStateTransaction { items, meta, .. } = state;
|
||||
Self { items, meta, ctx, result: HandleEventResult::default() }
|
||||
Self { items, meta, ctx }
|
||||
}
|
||||
|
||||
/// Handle an event.
|
||||
@@ -613,7 +604,7 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
|
||||
mut self,
|
||||
date_divider_adjuster: &mut DateDividerAdjuster,
|
||||
timeline_action: TimelineAction,
|
||||
) -> HandleEventResult {
|
||||
) -> RemovedItem {
|
||||
let span = tracing::Span::current();
|
||||
|
||||
date_divider_adjuster.mark_used();
|
||||
@@ -666,6 +657,8 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
|
||||
},
|
||||
}
|
||||
|
||||
let mut removed_item = false;
|
||||
|
||||
if !added_item {
|
||||
trace!("No new item added");
|
||||
|
||||
@@ -678,12 +671,11 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
|
||||
// wouldn't normally be visible. Remove it.
|
||||
trace!("Removing UTD that was successfully retried");
|
||||
self.items.remove(timeline_item_index);
|
||||
|
||||
self.result.item_removed = true;
|
||||
removed_item = true;
|
||||
}
|
||||
}
|
||||
|
||||
self.result
|
||||
removed_item
|
||||
}
|
||||
|
||||
#[instrument(skip_all, fields(replacement_event_id = ?replacement.event_id))]
|
||||
|
||||
Reference in New Issue
Block a user