//! Handling of updates and converting them into server2client stanzas use anyhow::Result; use quick_xml::events::Event; use lavina_core::player::Updates; use proto_xmpp::bind::{Jid, Name, Resource, Server}; use proto_xmpp::client::{Message, MessageType}; use proto_xmpp::xml::ToXml; use crate::XmppConnection; impl<'a> XmppConnection<'a> { pub async fn handle_update(&mut self, output: &mut Vec>, update: Updates) -> Result<()> { match update { Updates::NewMessage { room_id, author_id, body, } => { Message::<()> { to: Some(Jid { name: Some(self.user.xmpp_name.clone()), server: Server("localhost".into()), resource: Some(self.user.xmpp_resource.clone()), }), from: Some(Jid { name: Some(Name(room_id.into_inner().into())), server: Server("rooms.localhost".into()), resource: Some(Resource(author_id.into_inner().into())), }), id: None, r#type: MessageType::Groupchat, lang: None, subject: None, body: body.into(), custom: vec![], } .serialize(output); } _ => {} } Ok(()) } }