summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/base.py
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-07-10 01:36:21 -0700
committerLance Stout <lancestout@gmail.com>2012-07-10 01:36:21 -0700
commit8dcb441f440ea4c65b4f5d02ed682081f28af11c (patch)
treed4887a09544747b9b523a6e788b4910c6cb6685b /sleekxmpp/plugins/base.py
parenta347cf625ade5b3cdea0a37ababebe754f580276 (diff)
downloadslixmpp-8dcb441f440ea4c65b4f5d02ed682081f28af11c.tar.gz
slixmpp-8dcb441f440ea4c65b4f5d02ed682081f28af11c.tar.bz2
slixmpp-8dcb441f440ea4c65b4f5d02ed682081f28af11c.tar.xz
slixmpp-8dcb441f440ea4c65b4f5d02ed682081f28af11c.zip
Add default plugin session_bind handler.
All plugins may now simply define a session_bind method where disco features and other actions which require the bound JID may be done.
Diffstat (limited to 'sleekxmpp/plugins/base.py')
-rw-r--r--sleekxmpp/plugins/base.py31
1 files changed, 28 insertions, 3 deletions
diff --git a/sleekxmpp/plugins/base.py b/sleekxmpp/plugins/base.py
index 337db2db..26f0c827 100644
--- a/sleekxmpp/plugins/base.py
+++ b/sleekxmpp/plugins/base.py
@@ -167,8 +167,7 @@ class PluginManager(object):
self._plugins[name] = plugin
for dep in plugin.dependencies:
self.enable(dep, enabled=enabled)
- plugin.plugin_init()
- log.debug("Loaded Plugin: %s", plugin.description)
+ plugin._init()
if top_level:
for name in enabled:
@@ -229,7 +228,7 @@ class PluginManager(object):
raise PluginNotFound(name)
for dep in PLUGIN_DEPENDENTS[name]:
self.disable(dep, _disabled)
- plugin.plugin_end()
+ plugin._end()
if name in self._enabled:
self._enabled.remove(name)
del self._plugins[name]
@@ -282,6 +281,28 @@ class BasePlugin(object):
#: configuration settings will be provided as a dictionary.
self.config = config if config is not None else {}
+ def _init(self):
+ """Initialize plugin state, such as registering event handlers.
+
+ Also sets up required event handlers.
+ """
+ if self.xmpp is not None:
+ self.xmpp.add_event_handler('session_bind', self.session_bind)
+ if self.xmpp.session_bind_event.is_set():
+ self.session_bind(self.xmpp.boundjid.full)
+ self.plugin_init()
+ log.debug('Loaded Plugin: %s', self.description)
+
+ def _end(self):
+ """Cleanup plugin state, and prepare for plugin removal.
+
+ Also removes required event handlers.
+ """
+ if self.xmpp is not None:
+ self.xmpp.del_event_handler('session_bind', self.session_bind)
+ self.plugin_end()
+ log.debug('Disabled Plugin: %s' % self.description)
+
def plugin_init(self):
"""Initialize plugin state, such as registering event handlers."""
pass
@@ -290,6 +311,10 @@ class BasePlugin(object):
"""Cleanup plugin state, and prepare for plugin removal."""
pass
+ def session_bind(self, jid):
+ """Initialize plugin state based on the bound JID."""
+ pass
+
def post_init(self):
"""Initialize any cross-plugin state.