diff --git a/matrix_sdk/src/client.rs b/matrix_sdk/src/client.rs index 2a17a423..12748bdb 100644 --- a/matrix_sdk/src/client.rs +++ b/matrix_sdk/src/client.rs @@ -550,20 +550,32 @@ impl Client { self.base_client.add_event_emitter(emitter).await; } - // /// Returns the joined rooms this client knows about. - // pub fn joined_rooms(&self) -> Arc>>>> { - // self.base_client.joined_rooms() - // } + /// Returns the joined rooms this client knows about. + pub fn joined_rooms(&self) -> Vec { + self.store() + .get_rooms() + .into_iter() + .filter_map(|r| r.joined()) + .collect() + } - // /// Returns the invited rooms this client knows about. - // pub fn invited_rooms(&self) -> Arc>>>> { - // self.base_client.invited_rooms() - // } + /// Returns the invited rooms this client knows about. + pub fn invited_rooms(&self) -> Vec { + self.store() + .get_rooms() + .into_iter() + .filter_map(|r| r.invited()) + .collect() + } - // /// Returns the left rooms this client knows about. - // pub fn left_rooms(&self) -> Arc>>>> { - // self.base_client.left_rooms() - // } + /// Returns the left rooms this client knows about. + pub fn left_rooms(&self) -> Vec { + self.store() + .get_rooms() + .into_iter() + .filter_map(|r| r.left()) + .collect() + } /// Get a joined room with the given room id. /// diff --git a/matrix_sdk_base/src/store.rs b/matrix_sdk_base/src/store.rs index 25b6f160..abeb712c 100644 --- a/matrix_sdk_base/src/store.rs +++ b/matrix_sdk_base/src/store.rs @@ -76,6 +76,13 @@ impl Store { self.rooms.get(room_id).map(|r| r.clone()) } + pub fn get_rooms(&self) -> Vec { + self.rooms + .iter() + .filter_map(|r| self.get_room(r.key())) + .collect() + } + pub fn get_joined_room(&self, room_id: &RoomId) -> Option { self.get_room(room_id).map(|r| r.joined()).flatten() }