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.
This commit is contained in:
parent
a347cf625a
commit
8dcb441f44
1 changed files with 28 additions and 3 deletions
|
@ -167,8 +167,7 @@ class PluginManager(object):
|
||||||
self._plugins[name] = plugin
|
self._plugins[name] = plugin
|
||||||
for dep in plugin.dependencies:
|
for dep in plugin.dependencies:
|
||||||
self.enable(dep, enabled=enabled)
|
self.enable(dep, enabled=enabled)
|
||||||
plugin.plugin_init()
|
plugin._init()
|
||||||
log.debug("Loaded Plugin: %s", plugin.description)
|
|
||||||
|
|
||||||
if top_level:
|
if top_level:
|
||||||
for name in enabled:
|
for name in enabled:
|
||||||
|
@ -229,7 +228,7 @@ class PluginManager(object):
|
||||||
raise PluginNotFound(name)
|
raise PluginNotFound(name)
|
||||||
for dep in PLUGIN_DEPENDENTS[name]:
|
for dep in PLUGIN_DEPENDENTS[name]:
|
||||||
self.disable(dep, _disabled)
|
self.disable(dep, _disabled)
|
||||||
plugin.plugin_end()
|
plugin._end()
|
||||||
if name in self._enabled:
|
if name in self._enabled:
|
||||||
self._enabled.remove(name)
|
self._enabled.remove(name)
|
||||||
del self._plugins[name]
|
del self._plugins[name]
|
||||||
|
@ -282,6 +281,28 @@ class BasePlugin(object):
|
||||||
#: configuration settings will be provided as a dictionary.
|
#: configuration settings will be provided as a dictionary.
|
||||||
self.config = config if config is not None else {}
|
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):
|
def plugin_init(self):
|
||||||
"""Initialize plugin state, such as registering event handlers."""
|
"""Initialize plugin state, such as registering event handlers."""
|
||||||
pass
|
pass
|
||||||
|
@ -290,6 +311,10 @@ class BasePlugin(object):
|
||||||
"""Cleanup plugin state, and prepare for plugin removal."""
|
"""Cleanup plugin state, and prepare for plugin removal."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def session_bind(self, jid):
|
||||||
|
"""Initialize plugin state based on the bound JID."""
|
||||||
|
pass
|
||||||
|
|
||||||
def post_init(self):
|
def post_init(self):
|
||||||
"""Initialize any cross-plugin state.
|
"""Initialize any cross-plugin state.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue