diff --git a/src/matrix.rs b/src/matrix.rs index 307c439ad04c11bd6fae0c09ccd1dd201743d397..f0b31ce99f98257fc19291f1e2415d46aa7804b9 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -1,4 +1,5 @@ use crate::config::Config; +use futures::{join, future::join_all}; use log::{error, info, warn}; use matrix_sdk::{ deserialized_responses::EncryptionInfo, @@ -16,7 +17,6 @@ use matrix_sdk::{ Client, Result, SyncSettings, }; use std::convert::TryFrom; -use futures::join; use tokio::time::{sleep, Duration}; async fn join_room(room: &Invited) { @@ -118,13 +118,13 @@ async fn startup_and_log_rooms(client: &Client) { for room in client.joined_rooms() { info!("Got joined room: <{}>", room.name().unwrap()); } - for room in client.invited_rooms() { - warn!( - "Got pending invitation on room <{}>, try to join it", - room.name().unwrap() - ); - join_room(&room).await; - } + + let invited_rooms = client.invited_rooms(); + let list_to_wait_for = invited_rooms.iter().map(|room| { + warn!("Pending invit on room {}, joining it", room.name().unwrap()); + return join_room(&room); + }); + join_all(list_to_wait_for).await; } pub async fn connect_and_handle(config: Config) -> Result<()> { @@ -143,10 +143,10 @@ pub async fn connect_and_handle(config: Config) -> Result<()> { client.sync_once(SyncSettings::default()).await?; - let startup_rooms = startup_and_log_rooms(&client); + startup_and_log_rooms(&client).await; let register_handle_state = client.register_event_handler(on_state_member); let register_handle_message = client.register_event_handler(on_room_message); - join!(startup_rooms, register_handle_message, register_handle_state); + join!(register_handle_message, register_handle_state); info!("Entering sync loop"); let token = client.sync_token().await.unwrap();