refactor(timeline): get rid of HandleEventResult

This commit is contained in:
Benjamin Bouvier
2025-05-13 14:28:42 +02:00
parent 277eae75d9
commit b1f088277d
3 changed files with 23 additions and 28 deletions

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -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))]