Cleanup/improve other async queries in some client handlers.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-04-27 00:58:56 +00:00
parent 57c519bbb8
commit 778fbfdcb5
3 changed files with 64 additions and 65 deletions

View File

@@ -1,5 +1,5 @@
use axum::extract::State;
use futures::TryStreamExt;
use futures::{FutureExt, TryStreamExt, future::try_join4};
use ruma::api::client::room::initial_sync::v3::{PaginationChunk, Request, Response};
use tuwunel_core::{
Err, Event, Result, at,
@@ -25,22 +25,35 @@ pub(crate) async fn room_initial_sync_route(
return Err!(Request(Forbidden("No room preview available.")));
}
let limit = LIMIT_MAX;
let events: Vec<_> = services
let membership = services
.rooms
.timeline
.pdus_rev(None, room_id, None)
.try_take(limit)
.try_collect()
.await?;
.state_cache
.user_membership(body.sender_user(), room_id)
.map(Ok);
let state: Vec<_> = services
let visibility = services
.rooms
.directory
.visibility(room_id)
.map(Ok);
let state = services
.rooms
.state_accessor
.room_state_full_pdus(room_id)
.map_ok(Event::into_format)
.try_collect()
.await?;
.try_collect::<Vec<_>>();
let limit = LIMIT_MAX;
let events = services
.rooms
.timeline
.pdus_rev(None, room_id, None)
.try_take(limit)
.try_collect::<Vec<_>>();
let (membership, visibility, state, events) =
try_join4(membership, visibility, state, events).await?;
let messages = PaginationChunk {
start: events
@@ -68,16 +81,7 @@ pub(crate) async fn room_initial_sync_route(
account_data: None,
state: state.into(),
messages: messages.chunk.is_empty().or_some(messages),
visibility: services
.rooms
.directory
.visibility(room_id)
.await
.into(),
membership: services
.rooms
.state_cache
.user_membership(body.sender_user(), room_id)
.await,
visibility: visibility.into(),
membership,
})
}