From 8dcb441f440ea4c65b4f5d02ed682081f28af11c Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Tue, 10 Jul 2012 01:36:21 -0700 Subject: [PATCH] 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. --- sleekxmpp/plugins/base.py | 31 ++++++++++++++++++++++++++++--- 1 file 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.