From 0d0d8fca2dfc9b4d79d02180a276ed6cdb45e8e5 Mon Sep 17 00:00:00 2001 From: Devin R Date: Sat, 9 May 2020 07:33:57 -0400 Subject: [PATCH] client: add store_room_state method --- matrix_sdk/src/client.rs | 11 +++++++++++ matrix_sdk_base/src/client.rs | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/matrix_sdk/src/client.rs b/matrix_sdk/src/client.rs index e3caff7b..cef10e24 100644 --- a/matrix_sdk/src/client.rs +++ b/matrix_sdk/src/client.rs @@ -394,6 +394,17 @@ impl Client { Ok(self.base_client.sync_with_state_store().await?) } + /// This allows `AsyncClient` to manually store `Room` + /// state with the provided `StateStore`. + /// + /// Returns Ok when a successful `Room` store occurs. + pub async fn store_room_state(&self, room_id: &RoomId) -> Result<()> { + self.base_client + .store_room_state(room_id) + .await + .map_err(Into::into) + } + /// Login to the server. /// /// # Arguments diff --git a/matrix_sdk_base/src/client.rs b/matrix_sdk_base/src/client.rs index 621b0d80..842eabad 100644 --- a/matrix_sdk_base/src/client.rs +++ b/matrix_sdk_base/src/client.rs @@ -241,6 +241,19 @@ impl Client { Ok(!self.needs_state_store_sync.load(Ordering::Relaxed)) } + /// When a client is provided the state store will load state from the `StateStore`. + /// + /// Returns `true` when a state store sync has successfully completed. + pub async fn store_room_state(&self, room_id: &RoomId) -> Result<()> { + if let Some(store) = self.state_store.read().await.as_ref() { + if let Some(room) = self.get_joined_room(room_id).await { + let room = room.read().await; + store.store_room_state(room.deref()).await?; + } + } + Ok(()) + } + /// Receive a login response and update the session of the client. /// /// # Arguments @@ -619,7 +632,7 @@ impl Client { // TODO do we want to move the rooms to the appropriate HashMaps when the corresponding // event comes in e.g. move a joined room to a left room when leave event comes? - // when events change state, updated signals to StateStore to update database + // when events change state, updated_* signals to StateStore to update database let updated_joined = self.iter_joined_rooms(response).await?; let updated_invited = self.iter_invited_rooms(&response).await?; let updated_left = self.iter_left_rooms(response).await?;