mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-07 23:44:53 -04:00
refactor(timeline): get rid of TimelineFocusKind \o/
This commit is contained in:
@@ -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(),
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user