SpaceRoomList

Struct SpaceRoomList 

Source
pub struct SpaceRoomList { /* private fields */ }
Expand description

The SpaceRoomListrepresents a paginated list of direct rooms that belong to a particular space.

It can be used to paginate through the list (and have live updates on the pagination state) as well as subscribe to changes as rooms are joined or left.

The SpaceRoomList also automatically subscribes to client room changes and updates the list accordingly as rooms are joined or left.

§Examples

use futures_util::StreamExt;
use matrix_sdk::Client;
use matrix_sdk_ui::spaces::{
    SpaceService, room_list::SpaceRoomListPaginationState,
};
use ruma::owned_room_id;

let space_service = SpaceService::new(client.clone());

// Get a list of all the rooms in a particular space
let room_list = space_service
    .space_room_list(owned_room_id!("!some_space:example.org"));

// Start off with an empty and idle list
room_list.rooms().is_empty();

assert_eq!(
    room_list.pagination_state(),
    SpaceRoomListPaginationState::Idle { end_reached: false }
);

// Subscribe to pagination state updates
let pagination_state_stream =
    room_list.subscribe_to_pagination_state_updates();

// And to room list updates
let (_, room_stream) = room_list.subscribe_to_room_updates();

// Run this in a background task so it doesn't block
while let Some(pagination_state) = pagination_state_stream.next().await {
    println!("Received pagination state update: {pagination_state:?}");
}

// Run this in a background task so it doesn't block
while let Some(diffs) = room_stream.next().await {
    println!("Received room list update: {diffs:?}");
}

// Ask the room to load the next page
room_list.paginate().await.unwrap();

// And, if successful, rooms are available
let rooms = room_list.rooms();

Implementations§

Source§

impl SpaceRoomList

Source

pub fn new(client: Client, parent_space_id: OwnedRoomId) -> Self

Creates a new SpaceRoomList for the given space identifier.

Source

pub fn pagination_state(&self) -> SpaceRoomListPaginationState

Returns if the room list is currently paginating or not.

Source

pub fn subscribe_to_pagination_state_updates( &self, ) -> Subscriber<SpaceRoomListPaginationState>

Subscribe to pagination updates.

Source

pub fn rooms(&self) -> Vec<SpaceRoom>

Return the current list of rooms.

Source

pub fn subscribe_to_room_updates( &self, ) -> (Vector<SpaceRoom>, VectorSubscriberBatchedStream<SpaceRoom>)

Subscribes to room list updates.

Source

pub async fn paginate(&self) -> Result<(), Error>

Ask the list to retrieve the next page if the end hasn’t been reached yet. Otherwise it no-ops.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Any for T
where T: Any,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> JsonCastable<CanonicalJsonValue> for T

Source§

impl<T> JsonCastable<Value> for T

Source§

impl<T> SendOutsideWasm for T
where T: Send,

Source§

impl<T> SyncOutsideWasm for T
where T: Sync,