refactor(timeline): get rid of TimelineFocusKind \o/

This commit is contained in:
Benjamin Bouvier
2025-06-30 18:42:08 +02:00
parent 1624d798ee
commit 89d661ca8c
3 changed files with 24 additions and 58 deletions

View File

@@ -186,14 +186,6 @@ impl Default for TimelineSettings {
}
}
#[derive(Debug, Clone)]
pub(super) enum TimelineFocusKind {
Live { hide_threaded_events: bool },
Event { hide_threaded_events: bool },
Thread { root_event_id: OwnedEventId },
PinnedEvents,
}
/// The default event filter for
/// [`crate::timeline::TimelineBuilder::event_filter`].
///
@@ -283,53 +275,42 @@ impl<P: RoomDataProvider, D: Decryptor> TimelineController<P, D> {
unable_to_decrypt_hook: Option<Arc<UtdHookManager>>,
is_room_encrypted: bool,
) -> Self {
let (focus_data, focus_kind) = match focus {
TimelineFocus::Live { hide_threaded_events } => (
TimelineFocusData::Live { hide_threaded_events },
TimelineFocusKind::Live { hide_threaded_events },
),
let focus_data = match focus {
TimelineFocus::Live { hide_threaded_events } => {
TimelineFocusData::Live { hide_threaded_events }
}
TimelineFocus::Event { target, num_context_events, hide_threaded_events } => {
let paginator = Paginator::new(room_data_provider.clone());
(
TimelineFocusData::Event {
paginator,
event_id: target,
num_context_events,
hide_threaded_events,
},
TimelineFocusKind::Event { hide_threaded_events },
)
TimelineFocusData::Event {
paginator,
event_id: target,
num_context_events,
hide_threaded_events,
}
}
TimelineFocus::Thread { root_event_id, num_events } => (
TimelineFocusData::Thread {
loader: ThreadedEventsLoader::new(
room_data_provider.clone(),
root_event_id.clone(),
),
num_events,
// TODO: don't clone!
root_event_id: root_event_id.clone(),
},
TimelineFocusKind::Thread { root_event_id },
),
TimelineFocus::Thread { root_event_id, num_events } => TimelineFocusData::Thread {
loader: ThreadedEventsLoader::new(
room_data_provider.clone(),
root_event_id.clone(),
),
num_events,
root_event_id,
},
TimelineFocus::PinnedEvents { max_events_to_load, max_concurrent_requests } => (
TimelineFocus::PinnedEvents { max_events_to_load, max_concurrent_requests } => {
TimelineFocusData::PinnedEvents {
loader: PinnedEventsLoader::new(
Arc::new(room_data_provider.clone()),
max_events_to_load as usize,
max_concurrent_requests as usize,
),
},
TimelineFocusKind::PinnedEvents,
),
}
}
};
let focus_data = Arc::new(focus_data);
let state = Arc::new(RwLock::new(TimelineState::new(
focus_kind,
focus_data.clone(),
room_data_provider.own_user_id().to_owned(),
room_data_provider.room_version(),

View File

@@ -36,8 +36,7 @@ use super::{
Profile, TimelineItem,
},
observable_items::ObservableItems,
DateDividerMode, TimelineFocusKind, TimelineMetadata, TimelineSettings,
TimelineStateTransaction,
DateDividerMode, TimelineMetadata, TimelineSettings, TimelineStateTransaction,
};
use crate::{timeline::controller::TimelineFocusData, unable_to_decrypt_hook::UtdHookManager};
@@ -47,14 +46,11 @@ pub(in crate::timeline) struct TimelineState<P: RoomDataProvider> {
pub meta: TimelineMetadata,
/// The kind of focus of this timeline.
pub timeline_focus: TimelineFocusKind,
focus_data: Arc<TimelineFocusData<P>>,
}
impl<P: RoomDataProvider> TimelineState<P> {
pub(super) fn new(
timeline_focus: TimelineFocusKind,
focus_data: Arc<TimelineFocusData<P>>,
own_user_id: OwnedUserId,
room_version: RoomVersionId,
@@ -71,7 +67,6 @@ impl<P: RoomDataProvider> TimelineState<P> {
unable_to_decrypt_hook,
is_room_encrypted,
),
timeline_focus,
focus_data,
}
}
@@ -304,11 +299,6 @@ impl<P: RoomDataProvider> TimelineState<P> {
}
pub(super) fn transaction(&mut self) -> TimelineStateTransaction<'_, P> {
TimelineStateTransaction::new(
&mut self.items,
&mut self.meta,
self.timeline_focus.clone(),
&*self.focus_data,
)
TimelineStateTransaction::new(&mut self.items, &mut self.meta, &*self.focus_data)
}
}

View File

@@ -34,8 +34,7 @@ use super::{
traits::RoomDataProvider,
},
metadata::EventMeta,
ObservableItems, ObservableItemsTransaction, TimelineFocusKind, TimelineMetadata,
TimelineSettings,
ObservableItems, ObservableItemsTransaction, TimelineMetadata, TimelineSettings,
};
use crate::timeline::{
controller::TimelineFocusData,
@@ -60,8 +59,6 @@ pub(in crate::timeline) struct TimelineStateTransaction<'a, P: RoomDataProvider>
previous_meta: &'a mut TimelineMetadata,
/// The kind of focus of this timeline.
pub timeline_focus: TimelineFocusKind,
pub focus: &'a TimelineFocusData<P>,
}
@@ -70,7 +67,6 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
pub(super) fn new(
items: &'a mut ObservableItems,
meta: &'a mut TimelineMetadata,
timeline_focus: TimelineFocusKind,
focus: &'a TimelineFocusData<P>,
) -> Self {
let previous_meta = meta;
@@ -82,7 +78,6 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
items,
previous_meta,
meta,
timeline_focus,
focus,
}
}