diff options
author | Lance Stout <lancestout@gmail.com> | 2012-07-10 01:36:21 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2012-07-10 01:36:21 -0700 |
commit | 8dcb441f440ea4c65b4f5d02ed682081f28af11c (patch) | |
tree | d4887a09544747b9b523a6e788b4910c6cb6685b /sleekxmpp | |
parent | a347cf625ade5b3cdea0a37ababebe754f580276 (diff) | |
download | slixmpp-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')
-rw-r--r-- | sleekxmpp/plugins/base.py | 31 |
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. |