MSC3575: factor out ConnectionKey

This commit is contained in:
Lambda 2025-08-10 17:25:47 +00:00
parent 3bbee92db4
commit 991f1e2c0d
2 changed files with 50 additions and 85 deletions

View file

@ -25,7 +25,7 @@ use tracing::{debug, error};
use super::{load_timeline, share_encrypted_room};
use crate::{
service::{account_data, rooms::timeline::PduCount},
service::{account_data, rooms::timeline::PduCount, users::ConnectionKey},
services, Ar, Error, Ra, Result,
};
@ -76,22 +76,22 @@ pub(crate) async fn sync_events_v4_route(
let globalsince =
body.pos.as_ref().and_then(|string| string.parse().ok()).unwrap_or(0);
let connection_key = ConnectionKey {
user: sender_user.clone(),
device: sender_device.clone(),
connection: body.conn_id.clone(),
};
if globalsince == 0 {
if let Some(conn_id) = &body.conn_id {
services().users.forget_sync_request_connection(
sender_user.clone(),
sender_device.clone(),
conn_id.clone(),
);
if body.conn_id.is_some() {
services().users.forget_sync_request_connection(&connection_key);
}
}
// Get sticky parameters from cache
let known_rooms = services().users.update_sync_request_with_cache(
sender_user.clone(),
sender_device.clone(),
&mut body,
);
let known_rooms = services()
.users
.update_sync_request_with_cache(connection_key.clone(), &mut body);
let all_joined_rooms = services()
.rooms
@ -379,11 +379,9 @@ pub(crate) async fn sync_events_v4_route(
},
);
if let Some(conn_id) = &body.conn_id {
if body.conn_id.is_some() {
services().users.update_sync_known_rooms(
sender_user.clone(),
sender_device.clone(),
conn_id.clone(),
connection_key.clone(),
list_id,
new_known_rooms,
globalsince,
@ -410,24 +408,19 @@ pub(crate) async fn sync_events_v4_route(
body.room_subscriptions.remove(&r);
}
if let Some(conn_id) = &body.conn_id {
if body.conn_id.is_some() {
services().users.update_sync_known_rooms(
sender_user.clone(),
sender_device.clone(),
conn_id.clone(),
connection_key.clone(),
"subscriptions".to_owned(),
known_subscription_rooms,
globalsince,
);
}
if let Some(conn_id) = &body.conn_id {
services().users.update_sync_subscriptions(
sender_user.clone(),
sender_device.clone(),
conn_id.clone(),
body.room_subscriptions,
);
if body.conn_id.is_some() {
services()
.users
.update_sync_subscriptions(connection_key, body.room_subscriptions);
}
let mut rooms = BTreeMap::new();