refactor(sdk): Make TimelineInner fields private

This commit is contained in:
Jonas Platte
2023-01-10 19:02:27 +01:00
committed by Jonas Platte
parent b5450ee5ad
commit e52af8a315
3 changed files with 20 additions and 12 deletions

View File

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

View File

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

View File

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