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,
|
warn, Result,
|
||||||
};
|
};
|
||||||
use database::{serialize_to_vec, Deserialized, Ignore, Interfix, Json, Map};
|
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 itertools::Itertools;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
events::{
|
events::{
|
||||||
|
@ -566,6 +566,24 @@ impl Service {
|
||||||
self.db.userroomid_leftstate.qry(&key).await.is_ok()
|
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")]
|
#[tracing::instrument(skip(self), level = "debug")]
|
||||||
pub fn servers_invite_via<'a>(&'a self, room_id: &'a RoomId) -> impl Stream<Item = &ServerName> + Send + 'a {
|
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>);
|
type KeyVal<'a> = (Ignore, Vec<&'a ServerName>);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue