From 84cd2da8dd467c9de496febbd4692e624306e9a7 Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Fri, 5 Oct 2007 00:58:26 +0000 Subject: [PATCH] Implement plugin management api in the core. --- deluge/core/core.py | 25 +++++++++++++++++++++++-- deluge/pluginmanagerbase.py | 27 ++++++++++++++++++++++----- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/deluge/core/core.py b/deluge/core/core.py index 9d6926d03..6e46be79e 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -349,13 +349,34 @@ class Core(dbus.service.Object): """Returns the payload download rate""" return self.session.status().payload_download_rate - @dbus.service.method(dbus_interface="org.deluge_torrent.Deluge", out_signature="d") def get_upload_rate(self): """Returns the payload upload rate""" return self.session.status().payload_upload_rate - + + @dbus.service.method(dbus_interface="org.deluge_torrent.Deluge", + out_signature="as") + def get_available_plugins(self): + """Returns a list of plugins available in the core""" + return self.plugins.get_available_plugins() + + @dbus.service.method(dbus_interface="org.deluge_torrent.Deluge", + out_signature="as") + def get_enabled_plugins(self): + """Returns a list of enabled plugins in the core""" + return self.plugins.get_enabled_plugins() + + @dbus.service.method(dbus_interface="org.deluge_torrent.Deluge", + in_signature="s") + def enable_plugin(self, plugin): + self.plugins.enable_plugin(plugin) + + @dbus.service.method(dbus_interface="org.deluge_torrent.Deluge", + in_signature="s") + def disable_plugin(self, plugin): + self.plugins.disable_plugin(plugin) + # Signals @dbus.service.signal(dbus_interface="org.deluge_torrent.Deluge", signature="s") diff --git a/deluge/pluginmanagerbase.py b/deluge/pluginmanagerbase.py index f65d7e263..2ed1b79f0 100644 --- a/deluge/pluginmanagerbase.py +++ b/deluge/pluginmanagerbase.py @@ -60,7 +60,7 @@ class PluginManagerBase: # Load plugins that are enabled in the config. for name in self.config["enabled_plugins"]: - self.load_plugin(name) + self.enable_plugin(name) def shutdown(self): log.debug("PluginManager shutting down..") @@ -72,9 +72,13 @@ class PluginManagerBase: return self.plugins[key] def get_available_plugins(self): - """Returns a list of the available plugins (name, version)""" + """Returns a list of the available plugins name""" return self.available_plugins + def get_enabled_plugins(self): + """Returns a list of enabled plugins""" + return self.plugins.key() + def scan_for_plugins(self): """Scans for available plugins""" plugin_dir = os.path.join(os.path.dirname(__file__), "plugins") @@ -92,8 +96,12 @@ class PluginManagerBase: log.debug("Found plugin: %s %s", pkg_name, pkg_version) self.available_plugins.append(pkg_name) - def load_plugin(self, name, version=None): - """Loads a plugin with optional version""" + def enable_plugin(self, name): + """Enables a plugin""" + if name not in self.available_plugins: + log.warning("Cannot enable non-existant plugin %s", name) + return + egg = self.pkg_env[name][0] egg.activate() for name in egg.get_entry_map(self.entry_name): @@ -101,4 +109,13 @@ class PluginManagerBase: cls = entry_point.load() instance = cls(self) self.plugins[name] = instance - log.info("Load plugin %s", name) + log.info("Plugin %s enabled..", name) + + def disable_plugin(self, name): + """Disables a plugin""" + try: + del self.plugins[name] + except: + log.warning("Unable to disable non-existant plugin %s", name) + + log.info("Plugin %s disabled..", name)