Register modules defined by plugins
This commit is contained in:
parent
3c492e92da
commit
931e3f60ba
|
@ -236,6 +236,9 @@ class AccountsWindow(Gtk.ApplicationWindow):
|
||||||
else:
|
else:
|
||||||
app.connections[account] = Connection(account)
|
app.connections[account] = Connection(account)
|
||||||
|
|
||||||
|
app.plugin_manager.register_modules_for_account(
|
||||||
|
app.connections[account])
|
||||||
|
|
||||||
# update variables
|
# update variables
|
||||||
app.interface.instances[account] = {
|
app.interface.instances[account] = {
|
||||||
'infos': {}, 'disco': {}, 'gc_config': {}, 'search': {},
|
'infos': {}, 'disco': {}, 'gc_config': {}, 'search': {},
|
||||||
|
|
|
@ -408,6 +408,9 @@ class ConnectionHandlers(ConnectionSocks5Bytestream,
|
||||||
|
|
||||||
self.continue_connect_info = None
|
self.continue_connect_info = None
|
||||||
|
|
||||||
|
# If handlers have been registered
|
||||||
|
self.handlers_registered = False
|
||||||
|
|
||||||
app.nec.register_incoming_event(StreamConflictReceivedEvent)
|
app.nec.register_incoming_event(StreamConflictReceivedEvent)
|
||||||
app.nec.register_incoming_event(NotificationEvent)
|
app.nec.register_incoming_event(NotificationEvent)
|
||||||
|
|
||||||
|
@ -655,9 +658,11 @@ class ConnectionHandlers(ConnectionSocks5Bytestream,
|
||||||
|
|
||||||
for handler in modules.get_handlers(self):
|
for handler in modules.get_handlers(self):
|
||||||
con.RegisterHandler(*handler)
|
con.RegisterHandler(*handler)
|
||||||
|
self.handlers_registered = True
|
||||||
|
|
||||||
def _unregister_handlers(self):
|
def _unregister_handlers(self):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
for handler in modules.get_handlers(self):
|
for handler in modules.get_handlers(self):
|
||||||
self.connection.UnregisterHandler(*handler)
|
self.connection.UnregisterHandler(*handler)
|
||||||
|
self.handlers_registered = False
|
||||||
|
|
|
@ -80,10 +80,27 @@ def register(con, *args, **kwargs):
|
||||||
_modules[con.name][name] = instance
|
_modules[con.name][name] = instance
|
||||||
|
|
||||||
|
|
||||||
|
def register_single(con, instance, name):
|
||||||
|
if con.name not in _modules:
|
||||||
|
raise ValueError('Unknown account name: %s' % con.name)
|
||||||
|
_modules[con.name][name] = instance
|
||||||
|
|
||||||
|
|
||||||
def unregister(con):
|
def unregister(con):
|
||||||
|
for instance in _modules[con.name].values():
|
||||||
|
if hasattr(instance, 'cleanup'):
|
||||||
|
instance.cleanup()
|
||||||
del _modules[con.name]
|
del _modules[con.name]
|
||||||
|
|
||||||
|
|
||||||
|
def unregister_single(con, name):
|
||||||
|
if con.name not in _modules:
|
||||||
|
return
|
||||||
|
if name not in _modules[con.name]:
|
||||||
|
return
|
||||||
|
del _modules[con.name][name]
|
||||||
|
|
||||||
|
|
||||||
def get(account, name):
|
def get(account, name):
|
||||||
try:
|
try:
|
||||||
return _modules[account][name]
|
return _modules[account][name]
|
||||||
|
|
|
@ -288,6 +288,7 @@ class AccountCreationWizard:
|
||||||
100, self.update_progressbar)
|
100, self.update_progressbar)
|
||||||
# Get form from serveur
|
# Get form from serveur
|
||||||
con = connection.Connection(self.account)
|
con = connection.Connection(self.account)
|
||||||
|
app.plugin_manager.register_modules_for_account(con)
|
||||||
app.connections[self.account] = con
|
app.connections[self.account] = con
|
||||||
con.new_account(self.account, config)
|
con.new_account(self.account, config)
|
||||||
elif cur_page == 3:
|
elif cur_page == 3:
|
||||||
|
|
|
@ -38,6 +38,7 @@ import gajim
|
||||||
from gajim.common import app
|
from gajim.common import app
|
||||||
from gajim.common import nec
|
from gajim.common import nec
|
||||||
from gajim.common import configpaths
|
from gajim.common import configpaths
|
||||||
|
from gajim.common import modules
|
||||||
from gajim.common.exceptions import PluginsystemError
|
from gajim.common.exceptions import PluginsystemError
|
||||||
|
|
||||||
from gajim.plugins.helpers import log, log_calls, Singleton
|
from gajim.plugins.helpers import log, log_calls, Singleton
|
||||||
|
@ -352,6 +353,38 @@ class PluginManager(metaclass=Singleton):
|
||||||
if plugin.encryption_name:
|
if plugin.encryption_name:
|
||||||
del self.encryption_plugins[plugin.encryption_name]
|
del self.encryption_plugins[plugin.encryption_name]
|
||||||
|
|
||||||
|
def _register_modules_with_handlers(self, plugin):
|
||||||
|
if not hasattr(plugin, 'modules'):
|
||||||
|
return
|
||||||
|
for con in app.connections.values():
|
||||||
|
for module in plugin.modules:
|
||||||
|
instance, name = module.get_instance(con)
|
||||||
|
if not module.zeroconf and con.name == 'Local':
|
||||||
|
continue
|
||||||
|
modules.register_single(con, instance, name)
|
||||||
|
|
||||||
|
# If handlers have been registered, register the
|
||||||
|
# plugin handlers. Otherwise this will be done
|
||||||
|
# automatically on connecting
|
||||||
|
# in connection_handlers._register_handlers()
|
||||||
|
if con.handlers_registered:
|
||||||
|
for handler in instance.handlers:
|
||||||
|
con.connection.RegisterHandler(*handler)
|
||||||
|
|
||||||
|
def _unregister_modules_with_handlers(self, plugin):
|
||||||
|
if not hasattr(plugin, 'modules'):
|
||||||
|
return
|
||||||
|
for con in app.connections.values():
|
||||||
|
for module in plugin.modules:
|
||||||
|
instance = con.get_module(module.name)
|
||||||
|
modules.unregister_single(con, module.name)
|
||||||
|
|
||||||
|
# Account is still connected and handlers are registered
|
||||||
|
# So just unregister the plugin handlers
|
||||||
|
if con.handlers_registered:
|
||||||
|
for handler in instance.handlers:
|
||||||
|
con.connection.UnregisterHandler(*handler)
|
||||||
|
|
||||||
@log_calls('PluginManager')
|
@log_calls('PluginManager')
|
||||||
def activate_plugin(self, plugin):
|
def activate_plugin(self, plugin):
|
||||||
'''
|
'''
|
||||||
|
@ -365,6 +398,7 @@ class PluginManager(metaclass=Singleton):
|
||||||
self._handle_all_gui_extension_points_with_plugin(plugin)
|
self._handle_all_gui_extension_points_with_plugin(plugin)
|
||||||
self._register_events_handlers_in_ged(plugin)
|
self._register_events_handlers_in_ged(plugin)
|
||||||
self._register_network_events_in_nec(plugin)
|
self._register_network_events_in_nec(plugin)
|
||||||
|
self._register_modules_with_handlers(plugin)
|
||||||
|
|
||||||
self.active_plugins.append(plugin)
|
self.active_plugins.append(plugin)
|
||||||
try:
|
try:
|
||||||
|
@ -402,6 +436,7 @@ class PluginManager(metaclass=Singleton):
|
||||||
self._remove_events_handler_from_ged(plugin)
|
self._remove_events_handler_from_ged(plugin)
|
||||||
self._remove_network_events_from_nec(plugin)
|
self._remove_network_events_from_nec(plugin)
|
||||||
self._remove_name_from_encryption_plugins(plugin)
|
self._remove_name_from_encryption_plugins(plugin)
|
||||||
|
self._unregister_modules_with_handlers(plugin)
|
||||||
|
|
||||||
# removing plug-in from active plug-ins list
|
# removing plug-in from active plug-ins list
|
||||||
plugin.deactivate()
|
plugin.deactivate()
|
||||||
|
@ -462,6 +497,24 @@ class PluginManager(metaclass=Singleton):
|
||||||
except GajimPluginActivateException:
|
except GajimPluginActivateException:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def register_modules_for_account(self, con):
|
||||||
|
'''
|
||||||
|
A new account has been added, register modules
|
||||||
|
of all active plugins
|
||||||
|
'''
|
||||||
|
for plugin in self.plugins:
|
||||||
|
if not plugin.active:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not hasattr(plugin, 'modules'):
|
||||||
|
return
|
||||||
|
|
||||||
|
for module in plugin.modules:
|
||||||
|
instance, name = module.get_instance(con)
|
||||||
|
if not module.zeroconf and con.name == 'Local':
|
||||||
|
continue
|
||||||
|
modules.register_single(con, instance, name)
|
||||||
|
|
||||||
def _plugin_is_active_in_global_config(self, plugin):
|
def _plugin_is_active_in_global_config(self, plugin):
|
||||||
return app.config.get_per('plugins', plugin.short_name, 'active')
|
return app.config.get_per('plugins', plugin.short_name, 'active')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue