add parallel query for current membership state
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
feefa43e65
commit
68582dd868
1 changed files with 19 additions and 1 deletions
|
@ -10,7 +10,7 @@ use conduit::{
|
|||
warn, Result,
|
||||
};
|
||||
use database::{serialize_to_vec, Deserialized, Ignore, Interfix, Json, Map};
|
||||
use futures::{stream::iter, Stream, StreamExt};
|
||||
use futures::{future::join4, stream::iter, Stream, StreamExt};
|
||||
use itertools::Itertools;
|
||||
use ruma::{
|
||||
events::{
|
||||
|
@ -566,6 +566,24 @@ impl Service {
|
|||
self.db.userroomid_leftstate.qry(&key).await.is_ok()
|
||||
}
|
||||
|
||||
pub async fn user_membership(&self, user_id: &UserId, room_id: &RoomId) -> Option<MembershipState> {
|
||||
let states = join4(
|
||||
self.is_joined(user_id, room_id),
|
||||
self.is_left(user_id, room_id),
|
||||
self.is_invited(user_id, room_id),
|
||||
self.once_joined(user_id, room_id),
|
||||
)
|
||||
.await;
|
||||
|
||||
match states {
|
||||
(true, ..) => Some(MembershipState::Join),
|
||||
(_, true, ..) => Some(MembershipState::Leave),
|
||||
(_, _, true, ..) => Some(MembershipState::Invite),
|
||||
(false, false, false, true) => Some(MembershipState::Ban),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
#[tracing::instrument(skip(self), level = "debug")]
|
||||
pub fn servers_invite_via<'a>(&'a self, room_id: &'a RoomId) -> impl Stream<Item = &ServerName> + Send + 'a {
|
||||
type KeyVal<'a> = (Ignore, Vec<&'a ServerName>);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue