diff --git a/crates/matrix-sdk-base/Changelog.md b/crates/matrix-sdk-base/Changelog.md index eb86722a8..152d680d2 100644 --- a/crates/matrix-sdk-base/Changelog.md +++ b/crates/matrix-sdk-base/Changelog.md @@ -20,6 +20,7 @@ - `can_send_message` - `can_send_state` - `can_trigger_room_notification` +- Move `StateStore::get_member_event` to `StateStoreExt` ## 0.5.1 diff --git a/crates/matrix-sdk-base/src/store/ambiguity_map.rs b/crates/matrix-sdk-base/src/store/ambiguity_map.rs index 7e8e225ae..d21016a69 100644 --- a/crates/matrix-sdk-base/src/store/ambiguity_map.rs +++ b/crates/matrix-sdk-base/src/store/ambiguity_map.rs @@ -27,7 +27,10 @@ use ruma::{ use tracing::trace; use super::{DynStateStore, Result, StateChanges}; -use crate::deserialized_responses::{AmbiguityChange, RawMemberEvent}; +use crate::{ + deserialized_responses::{AmbiguityChange, RawMemberEvent}, + store::StateStoreExt, +}; #[derive(Debug)] pub(crate) struct AmbiguityCache { diff --git a/crates/matrix-sdk-base/src/store/memory_store.rs b/crates/matrix-sdk-base/src/store/memory_store.rs index 7b1e5cd1c..7cc1852dc 100644 --- a/crates/matrix-sdk-base/src/store/memory_store.rs +++ b/crates/matrix-sdk-base/src/store/memory_store.rs @@ -37,9 +37,8 @@ use tracing::{debug, warn}; use super::{Result, RoomInfo, StateChanges, StateStore, StoreError}; use crate::{ - deserialized_responses::{RawAnySyncOrStrippedState, RawMemberEvent}, - media::MediaRequest, - MinimalRoomMemberEvent, RoomMemberships, StateStoreDataKey, StateStoreDataValue, + deserialized_responses::RawAnySyncOrStrippedState, media::MediaRequest, MinimalRoomMemberEvent, + RoomMemberships, StateStoreDataKey, StateStoreDataValue, }; /// In-Memory, non-persistent implementation of the `StateStore` @@ -429,16 +428,6 @@ impl MemoryStore { Ok(self.profiles.get(room_id).and_then(|p| p.get(user_id).map(|p| p.clone()))) } - async fn get_member_event( - &self, - room_id: &RoomId, - state_key: &UserId, - ) -> Result> { - self.get_state_event(room_id, StateEventType::RoomMember, state_key.as_str()) - .await - .map(|opt| opt.map(|raw| raw.cast())) - } - /// Get the user IDs for the given room with the given memberships and /// stripped state. /// @@ -616,14 +605,6 @@ impl StateStore for MemoryStore { self.get_profile(room_id, user_id).await } - async fn get_member_event( - &self, - room_id: &RoomId, - state_key: &UserId, - ) -> Result> { - self.get_member_event(room_id, state_key).await - } - async fn get_user_ids( &self, room_id: &RoomId, diff --git a/crates/matrix-sdk-base/src/store/traits.rs b/crates/matrix-sdk-base/src/store/traits.rs index a11e74bb6..86bc870e1 100644 --- a/crates/matrix-sdk-base/src/store/traits.rs +++ b/crates/matrix-sdk-base/src/store/traits.rs @@ -130,19 +130,6 @@ pub trait StateStore: AsyncTraitDeps { user_id: &UserId, ) -> Result, Self::Error>; - /// Get the `MemberEvent` for the given state key in the given room id. - /// - /// # Arguments - /// - /// * `room_id` - The room id the member event belongs to. - /// - /// * `state_key` - The user id that the member event defines the state for. - async fn get_member_event( - &self, - room_id: &RoomId, - state_key: &UserId, - ) -> Result, Self::Error>; - /// Get the user ids of members for a given room with the given memberships, /// for stripped and regular rooms alike. async fn get_user_ids( @@ -390,14 +377,6 @@ impl StateStore for EraseStateStoreError { self.0.get_profile(room_id, user_id).await.map_err(Into::into) } - async fn get_member_event( - &self, - room_id: &RoomId, - state_key: &UserId, - ) -> Result, Self::Error> { - self.0.get_member_event(room_id, state_key).await.map_err(Into::into) - } - async fn get_user_ids( &self, room_id: &RoomId, @@ -608,6 +587,21 @@ pub trait StateStoreExt: StateStore { { Ok(self.get_room_account_data_event(room_id, C::TYPE.into()).await?.map(Raw::cast)) } + + /// Get the `MemberEvent` for the given state key in the given room id. + /// + /// # Arguments + /// + /// * `room_id` - The room id the member event belongs to. + /// + /// * `state_key` - The user id that the member event defines the state for. + async fn get_member_event( + &self, + room_id: &RoomId, + state_key: &UserId, + ) -> Result, Self::Error> { + self.get_state_event_static_for_key(room_id, state_key).await + } } #[cfg_attr(target_arch = "wasm32", async_trait(?Send))] diff --git a/crates/matrix-sdk-indexeddb/src/state_store/migrations.rs b/crates/matrix-sdk-indexeddb/src/state_store/migrations.rs index c179145f8..505209a5e 100644 --- a/crates/matrix-sdk-indexeddb/src/state_store/migrations.rs +++ b/crates/matrix-sdk-indexeddb/src/state_store/migrations.rs @@ -604,8 +604,8 @@ mod tests { use assert_matches::assert_matches; use indexed_db_futures::prelude::*; use matrix_sdk_base::{ - deserialized_responses::RawMemberEvent, RoomInfo, RoomMemberships, RoomState, StateStore, - StateStoreDataKey, StoreError, + deserialized_responses::RawMemberEvent, store::StateStoreExt, RoomInfo, RoomMemberships, + RoomState, StateStore, StateStoreDataKey, StoreError, }; use matrix_sdk_test::{async_test, test_json}; use ruma::{ diff --git a/crates/matrix-sdk-indexeddb/src/state_store/mod.rs b/crates/matrix-sdk-indexeddb/src/state_store/mod.rs index b1d534207..3d62ff1c4 100644 --- a/crates/matrix-sdk-indexeddb/src/state_store/mod.rs +++ b/crates/matrix-sdk-indexeddb/src/state_store/mod.rs @@ -22,7 +22,7 @@ use async_trait::async_trait; use gloo_utils::format::JsValueSerdeExt; use indexed_db_futures::prelude::*; use matrix_sdk_base::{ - deserialized_responses::{RawAnySyncOrStrippedState, RawMemberEvent}, + deserialized_responses::RawAnySyncOrStrippedState, media::{MediaRequest, UniqueKey}, store::{StateChanges, StateStore, StoreError}, MinimalStateEvent, RoomInfo, RoomMemberships, StateStoreDataKey, StateStoreDataValue, @@ -891,42 +891,6 @@ impl_state_store!({ .transpose() } - async fn get_member_event( - &self, - room_id: &RoomId, - state_key: &UserId, - ) -> Result> { - if let Some(e) = self - .inner - .transaction_on_one_with_mode(keys::STRIPPED_ROOM_STATE, IdbTransactionMode::Readonly)? - .object_store(keys::STRIPPED_ROOM_STATE)? - .get(&self.encode_key( - keys::STRIPPED_ROOM_STATE, - (room_id, StateEventType::RoomMember, state_key), - ))? - .await? - .map(|f| self.deserialize_event(&f)) - .transpose()? - { - Ok(Some(RawMemberEvent::Stripped(e))) - } else if let Some(e) = self - .inner - .transaction_on_one_with_mode(keys::ROOM_STATE, IdbTransactionMode::Readonly)? - .object_store(keys::ROOM_STATE)? - .get( - &self - .encode_key(keys::ROOM_STATE, (room_id, StateEventType::RoomMember, state_key)), - )? - .await? - .map(|f| self.deserialize_event(&f)) - .transpose()? - { - Ok(Some(RawMemberEvent::Sync(e))) - } else { - Ok(None) - } - } - async fn get_room_infos(&self) -> Result> { let entries: Vec<_> = self .inner diff --git a/crates/matrix-sdk-sqlite/src/state_store.rs b/crates/matrix-sdk-sqlite/src/state_store.rs index 485efcde6..604082894 100644 --- a/crates/matrix-sdk-sqlite/src/state_store.rs +++ b/crates/matrix-sdk-sqlite/src/state_store.rs @@ -9,7 +9,7 @@ use std::{ use async_trait::async_trait; use deadpool_sqlite::{Object as SqliteConn, Pool as SqlitePool, Runtime}; use matrix_sdk_base::{ - deserialized_responses::{RawAnySyncOrStrippedState, RawMemberEvent}, + deserialized_responses::RawAnySyncOrStrippedState, media::{MediaRequest, UniqueKey}, RoomInfo, RoomMemberships, RoomState, StateChanges, StateStore, StateStoreDataKey, StateStoreDataValue, @@ -1129,29 +1129,6 @@ impl StateStore for SqliteStateStore { .transpose() } - async fn get_member_event( - &self, - room_id: &RoomId, - state_key: &UserId, - ) -> Result> { - let room_id = self.encode_key(keys::STATE_EVENT, room_id); - let event_type = self.encode_key(keys::STATE_EVENT, StateEventType::RoomMember.to_string()); - let state_key = self.encode_key(keys::STATE_EVENT, state_key); - - self.acquire() - .await? - .get_maybe_stripped_state_event(room_id, event_type, state_key) - .await? - .map(|(stripped, data)| { - Ok(if stripped { - RawMemberEvent::Stripped(self.deserialize_json(&data)?) - } else { - RawMemberEvent::Sync(self.deserialize_json(&data)?) - }) - }) - .transpose() - } - async fn get_user_ids( &self, room_id: &RoomId, diff --git a/testing/matrix-sdk-integration-testing/src/tests/repeated_join.rs b/testing/matrix-sdk-integration-testing/src/tests/repeated_join.rs index d51589d46..b521aaf25 100644 --- a/testing/matrix-sdk-integration-testing/src/tests/repeated_join.rs +++ b/testing/matrix-sdk-integration-testing/src/tests/repeated_join.rs @@ -9,7 +9,7 @@ use matrix_sdk::{ api::client::room::create_room::v3::Request as CreateRoomRequest, events::room::member::{MembershipState, StrippedRoomMemberEvent}, }, - Client, RoomMemberships, RoomState, + Client, RoomMemberships, RoomState, StateStoreExt, }; use tokio::sync::Notify;