Merge branch 'get_own_jid' into 'master'

lumi created

Add a get_own_jid method to plugins

See merge request !17

Change summary

src/client.rs    |  4 ++--
src/component.rs |  4 ++--
src/plugin.rs    | 13 ++++++++++++-
3 files changed, 16 insertions(+), 5 deletions(-)

Detailed changes

src/client.rs 🔗

@@ -81,9 +81,9 @@ impl ClientBuilder {
         let transport = Arc::new(Mutex::new(transport));
         let plugin_container = Arc::new(PluginContainer::new());
         let mut client = Client {
-            jid: self.jid,
+            jid: self.jid.clone(),
             transport: transport.clone(),
-            binding: PluginProxyBinding::new(dispatcher.clone(), plugin_container.clone()),
+            binding: PluginProxyBinding::new(dispatcher.clone(), plugin_container.clone(), self.jid),
             plugin_container: plugin_container,
             dispatcher: dispatcher,
         };

src/component.rs 🔗

@@ -61,9 +61,9 @@ impl ComponentBuilder {
         let transport = Arc::new(Mutex::new(transport));
         let plugin_container = Arc::new(PluginContainer::new());
         let mut component = Component {
-            jid: self.jid,
+            jid: self.jid.clone(),
             transport: transport.clone(),
-            binding: PluginProxyBinding::new(dispatcher.clone(), plugin_container.clone()),
+            binding: PluginProxyBinding::new(dispatcher.clone(), plugin_container.clone(), self.jid),
             plugin_container: plugin_container,
             dispatcher: dispatcher,
         };

src/plugin.rs 🔗

@@ -18,6 +18,8 @@ use std::mem;
 
 use minidom::Element;
 
+use jid::Jid;
+
 pub struct PluginContainer {
     plugins: RwLock<HashMap<TypeId, Arc<Plugin>>>,
 }
@@ -70,13 +72,15 @@ impl<P: Plugin> AsRef<P> for PluginRef<P> {
 pub struct PluginProxyBinding {
     dispatcher: Arc<Dispatcher>,
     plugin_container: Arc<PluginContainer>,
+    jid: Jid,
 }
 
 impl PluginProxyBinding {
-    pub fn new(dispatcher: Arc<Dispatcher>, plugin_container: Arc<PluginContainer>) -> PluginProxyBinding {
+    pub fn new(dispatcher: Arc<Dispatcher>, plugin_container: Arc<PluginContainer>, jid: Jid) -> PluginProxyBinding {
         PluginProxyBinding {
             dispatcher: dispatcher,
             plugin_container: plugin_container,
+            jid: jid,
         }
     }
 }
@@ -141,6 +145,13 @@ impl PluginProxy {
     pub fn send(&self, elem: Element) {
         self.dispatch(SendElement(elem));
     }
+
+    /// Get our own JID.
+    pub fn get_own_jid(&self) -> Jid {
+        self.with_binding(|binding| {
+            binding.jid.clone()
+        })
+    }
 }
 
 /// A trait whch all plugins should implement.