From c793d08bb6ee1fd8c90d25f6743d10e3fe0d0a49 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sat, 23 Oct 2021 20:17:53 +0200 Subject: [PATCH] wait for our self-presence to consider the room joined The current code was only waiting until the first presence received from the room, while our self-presence is the very last one to be received. --- lib-gst-meet/src/conference.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib-gst-meet/src/conference.rs b/lib-gst-meet/src/conference.rs index 47ea0de..c52f8cc 100644 --- a/lib-gst-meet/src/conference.rs +++ b/lib-gst-meet/src/conference.rs @@ -20,7 +20,7 @@ use xmpp_parsers::{ iq::{Iq, IqType}, jingle::{Action, Jingle}, message::{Message, MessageType}, - muc::{Muc, MucUser}, + muc::{Muc, MucUser, user::Status as MucStatus}, nick::Nick, ns, presence::{self, Presence}, @@ -483,9 +483,12 @@ impl StanzaFilter for JitsiConference { }, JoiningMuc => { let presence = Presence::try_from(element)?; - if BareJid::from(presence.from.as_ref().unwrap().clone()) == self.config.muc { - debug!("Joined MUC: {}", self.config.muc); - self.inner.lock().await.state = Idle; + if let Some(payload) = presence.payloads.iter().find(|payload| payload.is("x", ns::MUC_USER)) { + let muc_user = MucUser::try_from(payload.clone())?; + if muc_user.status.contains(&MucStatus::SelfPresence) { + debug!("Joined MUC: {}", self.config.muc); + self.inner.lock().await.state = Idle; + } } }, Idle => {