mirror of
https://git.deluge-torrent.org/deluge
synced 2025-04-22 04:24:51 +00:00
Implement plugin management api in the core.
This commit is contained in:
parent
cc7d7e8c62
commit
84cd2da8dd
2 changed files with 45 additions and 7 deletions
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue