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))