def initialize(self, plugin_name): """Init by reading from global settings and setting up callbacks""" setctl = settings.GetSettingsController() for key in self: value_type = self.setting_descriptions[key]["type"] value = setctl.get_plugin_config(plugin_name, key, value_type) if value is not None: self[key] = value elif _is_core_setting(key): default = self.setting_descriptions[key]["value"] setctl.set_plugin_config(plugin_name, key, default, value_type) setctl.connect("value-changed", self._value_changed, plugin_name) # register for unload notification if not plugin_name.startswith("core."): plugins.register_plugin_unimport_hook(plugin_name, self._disconnect_all, plugin_name)
def register_alternative(caller, category_key, id_, **kwargs): """ Register a new alternative for the category @category_key @caller: Must be the caller's plugin id (Plugin __name__ variable) @id_ is a string identifier for the object to register @kwargs are the keyed arguments for the alternative constructor Returns True with success """ caller = str(caller) category_key = str(category_key) id_ = str(id_) if category_key not in _available_alternatives: _plugin_configuration_error( caller, "Category '%s' does not exist" % category_key) return alt = _available_alternatives[category_key] id_ = caller + "." + id_ kw_set = set(kwargs) req_set = set(alt["required_keys"]) if not req_set.issubset(kw_set): _plugin_configuration_error( caller, "Configuration error for alternative '%s':" % category_key) _plugin_configuration_error(caller, "Missing keys: %s" % (req_set - kw_set)) return _alternatives[category_key][id_] = kwargs pretty.print_debug(__name__, "Registered alternative %s: %s" % (category_key, id_)) setctl = settings.GetSettingsController() setctl._update_alternatives(category_key, _alternatives[category_key], alt["filter"]) # register the alternative to be unloaded plugin_id = ".".join(caller.split(".")[2:]) if plugin_id and not plugin_id.startswith("core."): plugins.register_plugin_unimport_hook(plugin_id, _unregister_alternative, caller, category_key, id_) return True
def register_alternative(caller, category_key, id_, **kwargs): """ Register a new alternative for the category @category_key @caller: Must be the caller's plugin id (Plugin __name__ variable) @id_ is a string identifier for the object to register @kwargs are the keyed arguments for the alternative constructor Returns True with success """ caller = str(caller) category_key = str(category_key) id_ = str(id_) if category_key not in _available_alternatives: _plugin_configuration_error(caller, "Category '%s' does not exist" % category_key) return alt = _available_alternatives[category_key] id_ = caller + "." + id_ kw_set = set(kwargs) req_set = set(alt["required_keys"]) if not req_set.issubset(kw_set): _plugin_configuration_error(caller, "Configuration error for alternative '%s':" % category_key) _plugin_configuration_error(caller, "Missing keys: %s" % (req_set - kw_set)) return _alternatives[category_key][id_] = kwargs pretty.print_debug(__name__, "Registered alternative %s: %s" % (category_key, id_)) setctl = settings.GetSettingsController() setctl._update_alternatives(category_key, _alternatives[category_key], alt["filter"]) # register the alternative to be unloaded plugin_id = ".".join(caller.split(".")[2:]) if plugin_id and not plugin_id.startswith("core."): plugins.register_plugin_unimport_hook(plugin_id, _unregister_alternative, caller, category_key, id_) return True