mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-07 00:48:41 +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"""
|
"""Returns the payload download rate"""
|
||||||
return self.session.status().payload_download_rate
|
return self.session.status().payload_download_rate
|
||||||
|
|
||||||
|
|
||||||
@dbus.service.method(dbus_interface="org.deluge_torrent.Deluge",
|
@dbus.service.method(dbus_interface="org.deluge_torrent.Deluge",
|
||||||
out_signature="d")
|
out_signature="d")
|
||||||
def get_upload_rate(self):
|
def get_upload_rate(self):
|
||||||
"""Returns the payload upload rate"""
|
"""Returns the payload upload rate"""
|
||||||
return self.session.status().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
|
# Signals
|
||||||
@dbus.service.signal(dbus_interface="org.deluge_torrent.Deluge",
|
@dbus.service.signal(dbus_interface="org.deluge_torrent.Deluge",
|
||||||
signature="s")
|
signature="s")
|
||||||
|
|
|
@ -60,7 +60,7 @@ class PluginManagerBase:
|
||||||
|
|
||||||
# Load plugins that are enabled in the config.
|
# Load plugins that are enabled in the config.
|
||||||
for name in self.config["enabled_plugins"]:
|
for name in self.config["enabled_plugins"]:
|
||||||
self.load_plugin(name)
|
self.enable_plugin(name)
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
log.debug("PluginManager shutting down..")
|
log.debug("PluginManager shutting down..")
|
||||||
|
@ -72,9 +72,13 @@ class PluginManagerBase:
|
||||||
return self.plugins[key]
|
return self.plugins[key]
|
||||||
|
|
||||||
def get_available_plugins(self):
|
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
|
return self.available_plugins
|
||||||
|
|
||||||
|
def get_enabled_plugins(self):
|
||||||
|
"""Returns a list of enabled plugins"""
|
||||||
|
return self.plugins.key()
|
||||||
|
|
||||||
def scan_for_plugins(self):
|
def scan_for_plugins(self):
|
||||||
"""Scans for available plugins"""
|
"""Scans for available plugins"""
|
||||||
plugin_dir = os.path.join(os.path.dirname(__file__), "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)
|
log.debug("Found plugin: %s %s", pkg_name, pkg_version)
|
||||||
self.available_plugins.append(pkg_name)
|
self.available_plugins.append(pkg_name)
|
||||||
|
|
||||||
def load_plugin(self, name, version=None):
|
def enable_plugin(self, name):
|
||||||
"""Loads a plugin with optional version"""
|
"""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 = self.pkg_env[name][0]
|
||||||
egg.activate()
|
egg.activate()
|
||||||
for name in egg.get_entry_map(self.entry_name):
|
for name in egg.get_entry_map(self.entry_name):
|
||||||
|
@ -101,4 +109,13 @@ class PluginManagerBase:
|
||||||
cls = entry_point.load()
|
cls = entry_point.load()
|
||||||
instance = cls(self)
|
instance = cls(self)
|
||||||
self.plugins[name] = instance
|
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
Add a link
Reference in a new issue