Use new functionality from eyeball-im-util 0.5

This commit is contained in:
Jonas Platte
2023-09-18 18:25:33 +02:00
committed by Jonas Platte
parent 0504eafc0a
commit 97c5acff7c
3 changed files with 9 additions and 13 deletions

View File

@@ -22,7 +22,7 @@ use async_rx::StreamExt as _;
use async_stream::stream;
use eyeball::{SharedObservable, Subscriber};
use eyeball_im::{Vector, VectorDiff};
use eyeball_im_util::vector::Limit;
use eyeball_im_util::vector::VectorObserverExt;
use futures_util::{pin_mut, stream, Stream, StreamExt as _};
use matrix_sdk::{
executor::{spawn, JoinHandle},
@@ -145,11 +145,12 @@ impl RoomList {
let stream = stream! {
loop {
let filter_fn = filter_fn_cell.take().await;
let (items, stream) = list.room_list_filtered_stream(filter_fn);
let (items, stream) = Limit::dynamic_with_initial_limit(items, stream, page_size, limit_stream.clone());
let (values, stream) = list
.room_list_filtered_stream(filter_fn)
.dynamic_limit_with_initial_value(page_size, limit_stream.clone());
// Clearing the stream before chaining with the real stream.
yield stream::once(ready(vec![VectorDiff::Reset { values: items }]))
yield stream::once(ready(vec![VectorDiff::Reset { values }]))
.chain(stream);
}
}

View File

@@ -18,7 +18,7 @@ use std::{fmt, sync::Arc};
use as_variant::as_variant;
use eyeball_im::{ObservableVectorEntry, VectorDiff};
use eyeball_im_util::vector;
use eyeball_im_util::vector::VectorObserverExt;
use futures_core::Stream;
use imbl::Vector;
use itertools::Itertools;
@@ -170,8 +170,7 @@ impl<P: RoomDataProvider> TimelineInner<P> {
F: Fn(Arc<TimelineItem>) -> Option<U>,
{
trace!("Creating timeline items signal");
let state = self.state.read().await;
vector::FilterMap::new(state.items.clone(), state.items.subscribe().into_stream(), f)
self.state.read().await.items.subscribe().filter_map(f)
}
pub(super) async fn toggle_reaction_local(

View File

@@ -14,7 +14,7 @@ use std::{
use eyeball::{Observable, Subscriber};
use eyeball_im::{ObservableVector, ObservableVectorTransaction, VectorDiff};
use eyeball_im_util::vector;
use eyeball_im_util::vector::{VectorObserverExt, VectorSubscriberExt};
use futures_core::Stream;
use imbl::Vector;
use ruma::{api::client::sync::sync_events::v4, assign, OwnedRoomId, TransactionId};
@@ -169,11 +169,7 @@ impl SlidingSyncList {
where
F: Fn(&RoomListEntry) -> bool,
{
let read_lock = self.inner.room_list.read().unwrap();
let values = (*read_lock).clone();
let subscriber = ObservableVector::subscribe(&read_lock);
vector::Filter::new(values, subscriber.into_batched_stream(), filter)
self.inner.room_list.read().unwrap().subscribe().batched().filter(filter)
}
/// Get the maximum number of rooms. See [`Self::maximum_number_of_rooms`]