mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-14 19:16:02 -04:00
refactor(sdk): Make TimelineInner fields private
This commit is contained in:
committed by
Jonas Platte
parent
b5450ee5ad
commit
e52af8a315
@@ -3,7 +3,7 @@ use std::{
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
use futures_signals::signal_vec::{MutableVec, MutableVecLockMut};
|
||||
use futures_signals::signal_vec::{MutableVec, MutableVecLockMut, MutableVecLockRef, SignalVec};
|
||||
use matrix_sdk_base::{
|
||||
crypto::OlmMachine,
|
||||
deserialized_responses::{EncryptionInfo, SyncTimelineEvent, TimelineEvent},
|
||||
@@ -33,8 +33,8 @@ use crate::events::SyncTimelineEventWithoutContent;
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub(super) struct TimelineInner {
|
||||
pub(super) items: MutableVec<Arc<TimelineItem>>,
|
||||
pub(super) metadata: Mutex<TimelineInnerMetadata>,
|
||||
items: MutableVec<Arc<TimelineItem>>,
|
||||
metadata: Mutex<TimelineInnerMetadata>,
|
||||
}
|
||||
|
||||
/// Non-signalling parts of `TimelineInner`.
|
||||
@@ -47,6 +47,14 @@ pub(super) struct TimelineInnerMetadata {
|
||||
}
|
||||
|
||||
impl TimelineInner {
|
||||
pub(super) fn items(&self) -> MutableVecLockRef<'_, Arc<TimelineItem>> {
|
||||
self.items.lock_ref()
|
||||
}
|
||||
|
||||
pub(super) fn items_signal(&self) -> impl SignalVec<Item = Arc<TimelineItem>> {
|
||||
self.items.signal_vec_cloned()
|
||||
}
|
||||
|
||||
pub(super) fn add_initial_events(
|
||||
&mut self,
|
||||
events: Vec<SyncTimelineEvent>,
|
||||
|
||||
@@ -178,7 +178,7 @@ impl Timeline {
|
||||
pub async fn paginate_backwards(&self, mut opts: PaginationOptions<'_>) -> Result<()> {
|
||||
let mut start_lock = self.start_token.lock().await;
|
||||
if start_lock.is_none()
|
||||
&& self.inner.items.lock_ref().first().map_or(false, |item| item.is_timeline_start())
|
||||
&& self.inner.items().first().map_or(false, |item| item.is_timeline_start())
|
||||
{
|
||||
warn!("Start of timeline reached, ignoring backwards-pagination request");
|
||||
return Ok(());
|
||||
@@ -282,7 +282,7 @@ impl Timeline {
|
||||
|
||||
/// Get the latest of the timeline's event items.
|
||||
pub fn latest_event(&self) -> Option<EventTimelineItem> {
|
||||
self.inner.items.lock_ref().last()?.as_event().cloned()
|
||||
self.inner.items().last()?.as_event().cloned()
|
||||
}
|
||||
|
||||
/// Get a signal of the timeline's items.
|
||||
@@ -293,7 +293,7 @@ impl Timeline {
|
||||
/// See [`SignalVecExt`](futures_signals::signal_vec::SignalVecExt) for a
|
||||
/// high-level API on top of [`SignalVec`].
|
||||
pub fn signal(&self) -> impl SignalVec<Item = Arc<TimelineItem>> {
|
||||
self.inner.items.signal_vec_cloned()
|
||||
self.inner.items_signal()
|
||||
}
|
||||
|
||||
/// Get a stream of timeline changes.
|
||||
|
||||
@@ -110,7 +110,7 @@ async fn invalid_edit() {
|
||||
|
||||
// Can't easily test the non-arrival of an item using the stream. Instead
|
||||
// just assert that there is still just a couple items in the timeline.
|
||||
assert_eq!(timeline.inner.items.lock_ref().len(), 2);
|
||||
assert_eq!(timeline.inner.items().len(), 2);
|
||||
}
|
||||
|
||||
#[async_test]
|
||||
@@ -151,7 +151,7 @@ async fn edit_redacted() {
|
||||
});
|
||||
timeline.handle_live_message_event(&ALICE, edit).await;
|
||||
|
||||
assert_eq!(timeline.inner.items.lock_ref().len(), 2);
|
||||
assert_eq!(timeline.inner.items().len(), 2);
|
||||
}
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
@@ -204,7 +204,7 @@ async fn unable_to_decrypt() {
|
||||
)
|
||||
.await;
|
||||
|
||||
assert_eq!(timeline.inner.items.lock_ref().len(), 2);
|
||||
assert_eq!(timeline.inner.items().len(), 2);
|
||||
|
||||
let _day_divider = assert_matches!(stream.next().await, Some(VecDiff::Push { value }) => value);
|
||||
let item = assert_matches!(stream.next().await, Some(VecDiff::Push { value }) => value);
|
||||
@@ -233,7 +233,7 @@ async fn unable_to_decrypt() {
|
||||
)
|
||||
.await;
|
||||
|
||||
assert_eq!(timeline.inner.items.lock_ref().len(), 2);
|
||||
assert_eq!(timeline.inner.items().len(), 2);
|
||||
|
||||
let item =
|
||||
assert_matches!(stream.next().await, Some(VecDiff::UpdateAt { index: 1, value }) => value);
|
||||
@@ -361,7 +361,7 @@ async fn invalid_event() {
|
||||
"type": "m.room.message",
|
||||
}))
|
||||
.await;
|
||||
assert_eq!(timeline.inner.items.lock_ref().len(), 0);
|
||||
assert_eq!(timeline.inner.items().len(), 0);
|
||||
}
|
||||
|
||||
#[async_test]
|
||||
@@ -568,7 +568,7 @@ impl TestTimeline {
|
||||
}
|
||||
|
||||
fn stream(&self) -> impl Stream<Item = VecDiff<Arc<TimelineItem>>> {
|
||||
self.inner.items.signal_vec_cloned().to_stream()
|
||||
self.inner.items_signal().to_stream()
|
||||
}
|
||||
|
||||
async fn handle_live_message_event<C>(&self, sender: &UserId, content: C)
|
||||
|
||||
Reference in New Issue
Block a user