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

Reply via email to