From e953a03dda8beb3b0e668b66f13a7ecfacac001a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Wed, 31 May 2017 16:51:04 +0100 Subject: [PATCH] Basic MUC plugin --- src/plugins/mod.rs | 1 + src/plugins/muc.rs | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/plugins/muc.rs diff --git a/src/plugins/mod.rs b/src/plugins/mod.rs index a6c8b7c..2a54781 100644 --- a/src/plugins/mod.rs +++ b/src/plugins/mod.rs @@ -8,3 +8,4 @@ pub mod ibb; pub mod stanza; pub mod stanza_debug; pub mod unhandled_iq; +pub mod muc; diff --git a/src/plugins/muc.rs b/src/plugins/muc.rs new file mode 100644 index 0000000..95b9aa7 --- /dev/null +++ b/src/plugins/muc.rs @@ -0,0 +1,53 @@ +use std::collections::BTreeMap; + +use jid::Jid; +use error::Error; +use plugin::PluginProxy; + +pub use xmpp_parsers::muc::Muc; +pub use xmpp_parsers::presence::{Presence, Type, Show}; + +pub struct MucPlugin { + proxy: PluginProxy, +} + +impl MucPlugin { + pub fn new() -> MucPlugin { + MucPlugin { + proxy: PluginProxy::new(), + } + } + + pub fn join_room(&self, room: Jid) -> Result<(), Error> { + let presence = Presence { + from: None, + to: Some(room), + id: None, + type_: Type::None, + show: Show::None, + priority: 0i8, + statuses: BTreeMap::new(), + payloads: vec![Muc.into()], + }; + self.proxy.send(presence.into()); + + Ok(()) + } + + pub fn leave_room(&self, room: Jid) -> Result<(), Error> { + let presence = Presence { + from: None, + to: Some(room), + id: None, + type_: Type::None, + show: Show::None, + priority: 0i8, + statuses: BTreeMap::new(), + payloads: vec![Muc.into()], + }; + self.proxy.send(presence.into()); + Ok(()) + } +} + +impl_plugin!(MucPlugin, proxy, []);