Add missing wildcard matching for sliding-sync required state.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
dff30e5924
commit
4d8d64f5c7
1 changed files with 19 additions and 4 deletions
|
|
@ -1,7 +1,7 @@
|
|||
use std::cmp::Ordering;
|
||||
|
||||
use futures::{
|
||||
FutureExt, StreamExt, TryFutureExt,
|
||||
FutureExt, StreamExt, TryFutureExt, TryStreamExt,
|
||||
future::{OptionFuture, join, join3, join4},
|
||||
};
|
||||
use ruma::{
|
||||
|
|
@ -99,16 +99,31 @@ pub(super) async fn handle(
|
|||
timeline_senders.dedup();
|
||||
let timeline_senders = timeline_senders
|
||||
.iter()
|
||||
.map(|sender| (StateEventType::RoomMember, StateKey::from_str(sender.as_str())));
|
||||
.map(|sender| (StateEventType::RoomMember, StateKey::from_str(sender.as_str())))
|
||||
.stream();
|
||||
|
||||
let wildcard_state = requested_state
|
||||
.iter()
|
||||
.filter(|(_, state_key)| state_key == "*")
|
||||
.map(|(event_type, _)| {
|
||||
services
|
||||
.state_accessor
|
||||
.room_state_keys(room_id, event_type)
|
||||
.map_ok(|state_key| (event_type.clone(), state_key))
|
||||
.ready_filter_map(Result::ok)
|
||||
})
|
||||
.stream()
|
||||
.flatten();
|
||||
|
||||
let required_state = requested_state
|
||||
.iter()
|
||||
.cloned()
|
||||
.chain(timeline_senders)
|
||||
.stream()
|
||||
.chain(wildcard_state)
|
||||
.chain(timeline_senders)
|
||||
.broad_filter_map(async |state| {
|
||||
let state_key: StateKey = match state.1.as_str() {
|
||||
| "$LAZY" => return None,
|
||||
| "$LAZY" | "*" => return None,
|
||||
| "$ME" => sender_user.as_str().into(),
|
||||
| _ => state.1.clone(),
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue