From 214e1de972d6f84aa423d9469085f6ba01f12839 Mon Sep 17 00:00:00 2001 From: "Brian J. Tarricone" Date: Wed, 30 Jul 2025 01:56:17 -0700 Subject: [PATCH] Try to sync up to 4 times after joining a room It seems like sometimes one sync isn't enough after sending the join request. --- src/matrix.rs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/matrix.rs b/src/matrix.rs index eb5195f..02fe026 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -23,6 +23,7 @@ use matrix_sdk::{ BaseRoom, Client, }; use serde::de; +use tokio::time::sleep; use crate::config::Config; @@ -81,17 +82,26 @@ pub async fn ensure_room_joined(matrix_client: &Client, room_id: &OwnedRoomOrAli .iter() .find(|a_room| room_matches(a_room, room_id)) { + info!("Accepting invitation to room {room_id}"); invited.join().await?; } else { + info!("Joining room {room_id}"); matrix_client.join_room_by_id_or_alias(room_id, &[]).await?; } - let settings = build_sync_settings().await; - matrix_client.sync_once(settings).await?; - room = matrix_client - .joined_rooms() - .iter() - .find(|a_room| room_matches(a_room, room_id)) - .cloned(); + + for _ in 0..4 { + let settings = build_sync_settings().await; + matrix_client.sync_once(settings).await?; + room = matrix_client + .joined_rooms() + .iter() + .find(|a_room| room_matches(a_room, room_id)) + .cloned(); + if room.is_some() { + break; + } + sleep(Duration::from_millis(500)).await; + } } room.ok_or_else(|| anyhow!("Unable to join room {}", room_id))