Changeset 9821 for branches/plugin-system/src/plugins/pluginmanager.py
- Timestamp:
- 06/18/08 22:45:22 (6 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
branches/plugin-system/src/plugins/pluginmanager.py
r9803 r9821 20 20 21 21 :author: Mateusz Biliński <mateusz@bilinski.it> 22 :since: 05/30/200822 :since: 30th May 2008 23 23 :copyright: Copyright (2008) Mateusz Biliński <mateusz@bilinski.it> 24 24 :license: GPL … … 95 95 96 96 for path in gajim.PLUGINS_DIRS: 97 self. _add_plugins(PluginManager.scan_dir_for_plugins(path))97 self.add_plugins(PluginManager.scan_dir_for_plugins(path)) 98 98 99 99 log.debug('plugins: %s'%(self.plugins)) 100 100 101 self. activate_all_plugins()101 self._activate_all_plugins_from_global_config() 102 102 103 103 log.debug('active: %s'%(self.active_plugins)) 104 104 105 106 @log_calls('PluginManager') 107 def _add_plugin(self, plugin_class): 105 @log_calls('PluginManager') 106 def _plugin_has_entry_in_global_config(self, plugin): 107 if gajim.config.get_per('plugins', plugin.short_name) is None: 108 return False 109 else: 110 return True 111 112 @log_calls('PluginManager') 113 def _create_plugin_entry_in_global_config(self, plugin): 114 gajim.config.add_per('plugins', plugin.short_name) 115 116 @log_calls('PluginManager') 117 def add_plugin(self, plugin_class): 108 118 ''' 109 119 :todo: what about adding plug-ins that are already added? Module reload 110 120 and adding class from reloaded module or ignoring adding plug-in? 111 121 ''' 112 plugin_class._active = False 113 plugin_class._instance = None 114 self.plugins.append(plugin_class) 115 116 @log_calls('PluginManager') 117 def _add_plugins(self, plugin_classes): 122 plugin = plugin_class() 123 if not self._plugin_has_entry_in_global_config(plugin): 124 self._create_plugin_entry_in_global_config(plugin) 125 126 self.plugins.append(plugin) 127 plugin.active = False 128 129 @log_calls('PluginManager') 130 def add_plugins(self, plugin_classes): 118 131 for plugin_class in plugin_classes: 119 self. _add_plugin(plugin_class)132 self.add_plugin(plugin_class) 120 133 121 134 @log_calls('PluginManager') … … 157 170 158 171 @log_calls('PluginManager') 159 def activate_plugin(self, plugin _class):172 def activate_plugin(self, plugin): 160 173 ''' 161 174 :param plugin: plugin to be activated 162 175 :type plugin: class object of `GajimPlugin` subclass 163 ''' 164 165 plugin_object = plugin_class() 166 167 success = True 168 169 self._add_gui_extension_points_handlers_from_plugin(plugin_object) 170 self._handle_all_gui_extension_points_with_plugin(plugin_object) 171 172 if success: 173 self.active_plugins.append(plugin_object) 174 plugin_object.activate() 175 plugin_class._instance = plugin_object 176 plugin_class._active = True 176 177 :todo: success checks should be implemented using exceptions. Such 178 control should also be implemented in deactivation. 179 ''' 180 success = False 181 if not plugin.active: 182 183 self._add_gui_extension_points_handlers_from_plugin(plugin) 184 self._handle_all_gui_extension_points_with_plugin(plugin) 185 186 success = True 187 188 if success: 189 self.active_plugins.append(plugin) 190 plugin.activate() 191 self._set_plugin_active_in_global_config(plugin) 192 plugin.active = True 177 193 178 194 return success 179 195 180 def deactivate_plugin(self, plugin _object):196 def deactivate_plugin(self, plugin): 181 197 # detaching plug-in from handler GUI extension points (calling 182 198 # cleaning up method that must be provided by plug-in developer 183 199 # for each handled GUI extension point) 184 200 for gui_extpoint_name, gui_extpoint_handlers in \ 185 plugin _object.gui_extension_points.iteritems():201 plugin.gui_extension_points.iteritems(): 186 202 if gui_extpoint_name in self.gui_extension_points: 187 203 for gui_extension_point_args in self.gui_extension_points[gui_extpoint_name]: … … 191 207 # handlers list 192 208 for gui_extpoint_name, gui_extpoint_handlers in \ 193 plugin _object.gui_extension_points.iteritems():209 plugin.gui_extension_points.iteritems(): 194 210 self.gui_extension_points_handlers[gui_extpoint_name].remove(gui_extpoint_handlers) 195 211 196 212 # removing plug-in from active plug-ins list 197 plugin_object.deactivate() 198 self.active_plugins.remove(plugin_object) 199 plugin_object.__class__._active = False 200 plugin_object.__class__._instance = None 201 del plugin_object 202 203 def deactivate_all_plugins(self): 213 plugin.deactivate() 214 self.active_plugins.remove(plugin) 215 self._set_plugin_active_in_global_config(plugin, False) 216 plugin.active = False 217 218 def _deactivate_all_plugins(self): 204 219 for plugin_object in self.active_plugins: 205 220 self.deactivate_plugin(plugin_object) 206 221 207 222 @log_calls('PluginManager') 208 def _add_gui_extension_points_handlers_from_plugin(self, plugin _object):223 def _add_gui_extension_points_handlers_from_plugin(self, plugin): 209 224 for gui_extpoint_name, gui_extpoint_handlers in \ 210 plugin _object.gui_extension_points.iteritems():225 plugin.gui_extension_points.iteritems(): 211 226 self.gui_extension_points_handlers.setdefault(gui_extpoint_name, []).append( 212 227 gui_extpoint_handlers) 213 228 214 229 @log_calls('PluginManager') 215 def _handle_all_gui_extension_points_with_plugin(self, plugin _object):230 def _handle_all_gui_extension_points_with_plugin(self, plugin): 216 231 for gui_extpoint_name, gui_extpoint_handlers in \ 217 plugin _object.gui_extension_points.iteritems():232 plugin.gui_extension_points.iteritems(): 218 233 if gui_extpoint_name in self.gui_extension_points: 219 234 for gui_extension_point_args in self.gui_extension_points[gui_extpoint_name]: … … 221 236 222 237 @log_calls('PluginManager') 223 def activate_all_plugins(self):238 def _activate_all_plugins(self): 224 239 ''' 225 240 Activates all plugins in `plugins`. … … 227 242 Activated plugins are appended to `active_plugins` list. 228 243 ''' 229 self.active_plugins = []244 #self.active_plugins = [] 230 245 for plugin in self.plugins: 231 246 self.activate_plugin(plugin) 247 248 def _activate_all_plugins_from_global_config(self): 249 for plugin in self.plugins: 250 if self._plugin_is_active_in_global_config(plugin): 251 self.activate_plugin(plugin) 252 253 def _plugin_is_active_in_global_config(self, plugin): 254 return gajim.config.get_per('plugins', plugin.short_name, 'active') 255 256 def _set_plugin_active_in_global_config(self, plugin, active=True): 257 gajim.config.set_per('plugins', plugin.short_name, 'active', active) 232 258 233 259 @staticmethod
