diff --git a/matrix_sdk_base/src/client.rs b/matrix_sdk_base/src/client.rs index 54886aa1..2448156b 100644 --- a/matrix_sdk_base/src/client.rs +++ b/matrix_sdk_base/src/client.rs @@ -318,13 +318,13 @@ impl BaseClient { // hashmaps. if self.invited_rooms.write().await.remove(room_id).is_some() { if let Some(store) = self.state_store.read().await.as_ref() { - store.room_state_change(RoomState::Invited(room_id)).await?; + store.delete_room_state(RoomState::Invited(room_id)).await?; } } if self.left_rooms.write().await.remove(room_id).is_some() { if let Some(store) = self.state_store.read().await.as_ref() { - store.room_state_change(RoomState::Left(room_id)).await?; + store.delete_room_state(RoomState::Left(room_id)).await?; } } @@ -369,7 +369,7 @@ impl BaseClient { // spec can't happen. if self.left_rooms.write().await.remove(room_id).is_some() { if let Some(store) = self.state_store.read().await.as_ref() { - store.room_state_change(RoomState::Left(room_id)).await?; + store.delete_room_state(RoomState::Left(room_id)).await?; } } @@ -414,13 +414,13 @@ impl BaseClient { // hashmaps. if self.invited_rooms.write().await.remove(room_id).is_some() { if let Some(store) = self.state_store.read().await.as_ref() { - store.room_state_change(RoomState::Invited(room_id)).await?; + store.delete_room_state(RoomState::Invited(room_id)).await?; } } if self.joined_rooms.write().await.remove(room_id).is_some() { if let Some(store) = self.state_store.read().await.as_ref() { - store.room_state_change(RoomState::Joined(room_id)).await?; + store.delete_room_state(RoomState::Joined(room_id)).await?; } } diff --git a/matrix_sdk_base/src/state/json_store.rs b/matrix_sdk_base/src/state/json_store.rs index 2572caf1..c4005f8b 100644 --- a/matrix_sdk_base/src/state/json_store.rs +++ b/matrix_sdk_base/src/state/json_store.rs @@ -168,8 +168,8 @@ impl StateStore for JsonStore { file.write_all(json.as_bytes()).await.map_err(Error::from) } - async fn room_state_change(&self, previous_room: RoomState<&RoomId>) -> Result<()> { - let (room_id, room_state) = match &previous_room { + async fn delete_room_state(&self, room: RoomState<&RoomId>) -> Result<()> { + let (room_id, room_state) = match &room { RoomState::Joined(id) => (id, "joined"), RoomState::Invited(id) => (id, "invited"), RoomState::Left(id) => (id, "left"), @@ -315,7 +315,7 @@ mod test { .await .unwrap(); assert!(store - .room_state_change(RoomState::Joined(&id)) + .delete_room_state(RoomState::Joined(&id)) .await .is_ok()); let AllRooms { joined, .. } = store.load_all_rooms().await.unwrap(); @@ -339,7 +339,7 @@ mod test { .await .unwrap(); assert!(store - .room_state_change(RoomState::Invited(&id)) + .delete_room_state(RoomState::Invited(&id)) .await .is_ok()); let AllRooms { invited, .. } = store.load_all_rooms().await.unwrap(); diff --git a/matrix_sdk_base/src/state/mod.rs b/matrix_sdk_base/src/state/mod.rs index 3743fd02..abf3ed82 100644 --- a/matrix_sdk_base/src/state/mod.rs +++ b/matrix_sdk_base/src/state/mod.rs @@ -91,19 +91,22 @@ pub trait StateStore: Send + Sync { /// An `Option::None` should be returned only if the `StateStore` tries to /// load but no state has been stored. async fn load_client_state(&self, _: &Session) -> Result>; + /// Load the state of all `Room`s. /// /// This will be mapped over in the client in order to store `Room`s in an async safe way. async fn load_all_rooms(&self) -> Result; + /// Save the current state of the `BaseClient` using the `StateStore::Store` type. async fn store_client_state(&self, _: ClientState) -> Result<()>; + /// Save the state a single `Room`. async fn store_room_state(&self, _: RoomState<&Room>) -> Result<()>; - /// Signals to the `StateStore` a room has changed state. + + /// Remove state for a room. /// - /// This enables implementing types to update the database when `RoomState` changes. - /// A `RoomState` change is when a user joins, is invited, or leaves a room. - async fn room_state_change(&self, _previous: RoomState<&RoomId>) -> Result<()>; + /// This is used when a user leaves a room or rejects an invitation. + async fn delete_room_state(&self, _room: RoomState<&RoomId>) -> Result<()>; } #[cfg(test)]