diff --git a/xmpp/src/message/send.rs b/xmpp/src/message/send.rs index 36866855eb953524f4a7e7cb10f34b391927b004..e8c14cd22fd91e8b593979f93532ba79178347f3 100644 --- a/xmpp/src/message/send.rs +++ b/xmpp/src/message/send.rs @@ -37,6 +37,11 @@ impl<'a> RawMessageSettings<'a> { self } + pub fn with_lang_option(mut self, lang: Option<&'a str>) -> Self { + self.lang = lang; + self + } + pub fn with_payload(mut self, payload: impl MessagePayload) -> Self { self.payloads.push(payload.into()); self @@ -94,12 +99,11 @@ pub async fn send_message<'a>(agent: &mut Agent, settings: MessageSettings<'a>) lang, } = settings; - // TODO: check that recipient may receive normal chat message, eg is not a MUC chatroom - - let mut stanza = Message::new(Some(recipient.into())); - stanza.type_ = MessageType::Chat; - stanza - .bodies - .insert(lang.unwrap_or("").to_string(), Body(String::from(message))); - agent.client.send_stanza(stanza.into()).await.unwrap(); + // TODO: check that recipient is not in agent.joined_rooms + agent + .send_raw_message( + RawMessageSettings::new(recipient.into(), MessageType::Chat, message) + .with_lang_option(lang), + ) + .await; } diff --git a/xmpp/src/muc/private_message.rs b/xmpp/src/muc/private_message.rs index 1a329d161d9fdecffb0928a40f472ac6c9d9cd75..78908d088efab30b471db12699f72dc442ead58c 100644 --- a/xmpp/src/muc/private_message.rs +++ b/xmpp/src/muc/private_message.rs @@ -5,10 +5,8 @@ // file, You can obtain one at http://mozilla.org/MPL/2.0/. use crate::{ - parsers::{ - message::{Body, Message, MessageType}, - muc::user::MucUser, - }, + message::send::RawMessageSettings, + parsers::{message::MessageType, muc::user::MucUser}, tokio_xmpp::jid::{BareJid, Jid}, Agent, RoomNick, }; @@ -50,10 +48,11 @@ pub async fn send_room_private_message<'a>( // TODO: check that room is in agent.joined_rooms let recipient: Jid = room.with_resource(recipient.as_ref()).into(); - let mut stanza = Message::new(recipient).with_payload(MucUser::new()); - stanza.type_ = MessageType::Chat; - stanza - .bodies - .insert(lang.unwrap_or("").to_string(), Body(String::from(message))); - agent.client.send_stanza(stanza.into()).await.unwrap(); + agent + .send_raw_message( + RawMessageSettings::new(recipient, MessageType::Chat, message) + .with_payload(MucUser::new()) + .with_lang_option(lang), + ) + .await; } diff --git a/xmpp/src/muc/room.rs b/xmpp/src/muc/room.rs index 3ab88729bdd03034563895bff13429c9157f07b3..c9d4822608f7d3784d687d9d08e70b7825f1535b 100644 --- a/xmpp/src/muc/room.rs +++ b/xmpp/src/muc/room.rs @@ -8,12 +8,12 @@ use crate::parsers::message::MessageType; use tokio_xmpp::{ jid::{BareJid, ResourcePart, ResourceRef}, parsers::{ - message::{Body, Message}, muc::Muc, presence::{Presence, Type as PresenceType}, }, }; +use crate::message::send::RawMessageSettings; use crate::Agent; #[derive(Clone, Debug)] @@ -190,11 +190,10 @@ pub async fn send_room_message<'a>(agent: &mut Agent, settings: RoomMessageSetti } = settings; // TODO: check that room is in agent.joined_rooms - - let mut stanza = Message::new(Some(room.into())); - stanza.type_ = MessageType::Groupchat; - stanza - .bodies - .insert(lang.unwrap_or("").to_string(), Body(String::from(message))); - agent.client.send_stanza(stanza.into()).await.unwrap(); + agent + .send_raw_message( + RawMessageSettings::new(room.into(), MessageType::Groupchat, message) + .with_lang_option(lang), + ) + .await; }