2025-10-05 19:48:07 +00:00
|
|
|
use futures::StreamExt;
|
|
|
|
|
use ruma::api::client::sync::sync_events::v5::response;
|
|
|
|
|
use tuwunel_core::{self, Result};
|
|
|
|
|
|
2025-10-07 21:35:42 +00:00
|
|
|
use super::{Connection, SyncInfo};
|
2025-10-05 19:48:07 +00:00
|
|
|
|
2025-10-22 20:30:43 +00:00
|
|
|
#[tracing::instrument(name = "to_device", level = "trace", skip_all, ret)]
|
2025-10-05 19:48:07 +00:00
|
|
|
pub(super) async fn collect(
|
2025-10-07 21:35:42 +00:00
|
|
|
SyncInfo { services, sender_user, sender_device, .. }: SyncInfo<'_>,
|
|
|
|
|
conn: &Connection,
|
2025-10-05 19:48:07 +00:00
|
|
|
) -> Result<Option<response::ToDevice>> {
|
|
|
|
|
services
|
|
|
|
|
.users
|
2025-10-07 21:35:42 +00:00
|
|
|
.remove_to_device_events(sender_user, sender_device, conn.globalsince)
|
2025-10-05 19:48:07 +00:00
|
|
|
.await;
|
|
|
|
|
|
|
|
|
|
let events: Vec<_> = services
|
|
|
|
|
.users
|
2025-10-07 21:35:42 +00:00
|
|
|
.get_to_device_events(sender_user, sender_device, None, Some(conn.next_batch))
|
2025-10-05 19:48:07 +00:00
|
|
|
.collect()
|
|
|
|
|
.await;
|
|
|
|
|
|
|
|
|
|
let to_device = events
|
|
|
|
|
.is_empty()
|
|
|
|
|
.eq(&false)
|
|
|
|
|
.then(|| response::ToDevice {
|
2025-10-07 21:35:42 +00:00
|
|
|
next_batch: conn.next_batch.to_string().into(),
|
2025-10-05 19:48:07 +00:00
|
|
|
events,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Ok(to_device)
|
|
|
|
|
}
|