def load(self, ignore_blacklist=False): """ Attempt to load the plugin we represent. """ if self.is_loaded: log.warning('Trying to load already loaded plugin %r.' % self.data['name']) return if not ignore_blacklist and self.is_blacklisted: raise addons.DependencyError('Plugin %r is blacklisted.' % self.data['name']) # Check our dependencies for safety. addons.check_dependencies(self) # Load our dependencies. for name in self.requires.iterkeys(): if name == '__app__' or (':' in name and not name.startswith('plugin:')): continue dep = addons.get('plugin', name) # Make sure we're needed. if not self.name in dep.needed_by: dep.needed_by.append(self.name) # If it's loaded, just continue. if dep.is_loaded: continue dep.load() # Okay, now load! self._do_load()
def is_active(self, val): """ Enable or disable the plugin. """ val = bool(val) if val == self._is_active: return # Don't set _is_active just yet. if val: # Check our dependencies first. addons.check_dependencies(self._info) # Make sure those dependencies are loaded. self._activate_dependencies() # Connect our signals. self._connect_signals() # Finally, set ourselves active and update any UI elements for # this plugin. self._is_active = True self._info.update_ui() log.info('Activated plugin %r.' % self._info.data['name']) else: # If we're already on, we can assume we don't need to check our # dependencies. We *do* have to deactivate the plugins that depend # on us though. self._deactivate_dependants() # Disconnect the signals and slots. self._disconnect_signals() # And finally, set us as inactive and update UI. self._is_active = False self._info.update_ui() log.info('Deactivated plugin %r.' % self._info.data['name'])