changeset 5cb214f0c145 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=5cb214f0c145
description: show warning dialog when trying to enable a plugin that raise an
exception when activate is called.
diffstat:
src/plugins/gui.py | 7 ++++++-
src/plugins/helpers.py | 6 ++++++
src/plugins/pluginmanager.py | 34 +++++++++++++++++-----------------
3 files changed, 29 insertions(+), 18 deletions(-)
diffs (111 lines):
diff -r fc3ba8a03e40 -r 5cb214f0c145 src/plugins/gui.py
--- a/src/plugins/gui.py Mon Nov 01 17:32:27 2010 +0100
+++ b/src/plugins/gui.py Mon Nov 01 21:22:43 2010 +0100
@@ -33,6 +33,7 @@
from dialogs import WarningDialog, YesNoDialog, ArchiveChooserDialog
from common import gajim
from plugins.helpers import log_calls, log
+from plugins.helpers import GajimPluginActivateException
from common.exceptions import PluginsystemError
class PluginsWindow(object):
@@ -153,7 +154,11 @@
if is_active:
gajim.plugin_manager.deactivate_plugin(plugin)
else:
- gajim.plugin_manager.activate_plugin(plugin)
+ try:
+ gajim.plugin_manager.activate_plugin(plugin)
+ except GajimPluginActivateException, e:
+ WarningDialog(_('Plugin failed'), str(e))
+ return
self.installed_plugins_model[path][2] = not is_active
diff -r fc3ba8a03e40 -r 5cb214f0c145 src/plugins/helpers.py
--- a/src/plugins/helpers.py Mon Nov 01 17:32:27 2010 +0100
+++ b/src/plugins/helpers.py Mon Nov 01 21:22:43 2010 +0100
@@ -45,6 +45,12 @@
import functools
+class GajimPluginActivateException(Exception):
+ '''
+ Raised when activation failed
+ '''
+ pass
+
class log_calls(object):
'''
Decorator class for functions to easily log when they are entered and left.
diff -r fc3ba8a03e40 -r 5cb214f0c145 src/plugins/pluginmanager.py
--- a/src/plugins/pluginmanager.py Mon Nov 01 17:32:27 2010 +0100
+++ b/src/plugins/pluginmanager.py Mon Nov 01 21:22:43 2010 +0100
@@ -38,7 +38,8 @@
from common.exceptions import PluginsystemError
from plugins.helpers import log, log_calls, Singleton
-from plugins.plugin import GajimPlugin
+from plugins.helpers import GajimPluginActivateException
+from plugins.plugin import GajimPlugin, GajimPluginException
class PluginManager(object):
'''
@@ -279,13 +280,7 @@
'''
:param plugin: plugin to be activated
:type plugin: class object of `GajimPlugin` subclass
-
- :todo: success checks should be implemented using exceptions. Such
- control should also be implemented in deactivation. Exceptions
- should be shown to user inside popup dialog, so the reason
- for not activating plugin is known.
'''
- success = False
if not plugin.active:
self._add_gui_extension_points_handlers_from_plugin(plugin)
@@ -293,15 +288,14 @@
self._register_events_handlers_in_ged(plugin)
self._register_network_events_in_nec(plugin)
- success = True
-
- if success:
- self.active_plugins.append(plugin)
+ self.active_plugins.append(plugin)
+ try:
plugin.activate()
- self._set_plugin_active_in_global_config(plugin)
- plugin.active = True
-
- return success
+ except GajimPluginException, e:
+ self.deactivate_plugin(plugin)
+ raise GajimPluginActivateException(str(e))
+ self._set_plugin_active_in_global_config(plugin)
+ plugin.active = True
def deactivate_plugin(self, plugin):
# remove GUI extension points handlers (provided by plug-in) from
@@ -362,12 +356,18 @@
Activated plugins are appended to `active_plugins` list.
'''
for plugin in self.plugins:
- self.activate_plugin(plugin)
+ try:
+ self.activate_plugin(plugin)
+ except GajimPluginActivateException:
+ pass
def _activate_all_plugins_from_global_config(self):
for plugin in self.plugins:
if self._plugin_is_active_in_global_config(plugin):
- self.activate_plugin(plugin)
+ try:
+ self.activate_plugin(plugin)
+ except GajimPluginActivateException:
+ pass
def _plugin_is_active_in_global_config(self, plugin):
return gajim.config.get_per('plugins', plugin.short_name, 'active')
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits