base: Move StateStore::get_member_event to StateStoreExt

It is a wrapper around get_state_event_static_for_key

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
This commit is contained in:
Kévin Commaille 2023-06-06 09:51:02 +02:00 committed by Jonas Platte
parent b690bcfbaf
commit 407375ad17
8 changed files with 27 additions and 107 deletions

View File

@ -20,6 +20,7 @@
- `can_send_message`
- `can_send_state`
- `can_trigger_room_notification`
- Move `StateStore::get_member_event` to `StateStoreExt`
## 0.5.1

View File

@ -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 {

View File

@ -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<Option<RawMemberEvent>> {
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<Option<RawMemberEvent>> {
self.get_member_event(room_id, state_key).await
}
async fn get_user_ids(
&self,
room_id: &RoomId,

View File

@ -130,19 +130,6 @@ pub trait StateStore: AsyncTraitDeps {
user_id: &UserId,
) -> Result<Option<MinimalRoomMemberEvent>, 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<Option<RawMemberEvent>, 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<T: StateStore> StateStore for EraseStateStoreError<T> {
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<Option<RawMemberEvent>, 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<Option<RawMemberEvent>, Self::Error> {
self.get_state_event_static_for_key(room_id, state_key).await
}
}
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]

View File

@ -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::{

View File

@ -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<Option<RawMemberEvent>> {
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<Vec<RoomInfo>> {
let entries: Vec<_> = self
.inner

View File

@ -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<Option<RawMemberEvent>> {
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,

View File

@ -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;