Fix issue where port was not opened before attempting to add torrents.
All config 'set functions' will apply automatically when they are registered unless otherwise specified.
This commit is contained in:
parent
4401c8f238
commit
936df09c60
|
@ -138,10 +138,13 @@ class Config:
|
|||
"""Returns the entire configuration as a dictionary."""
|
||||
return self.config
|
||||
|
||||
def register_set_function(self, key, function):
|
||||
def register_set_function(self, key, function, apply_now=True):
|
||||
"""Register a function to be run when a config value changes."""
|
||||
log.debug("Registering function for %s key..", key)
|
||||
self.set_functions[key] = function
|
||||
# Run the function now if apply_now is set
|
||||
if apply_now:
|
||||
self.set_functions[key](key, self.config[key])
|
||||
return
|
||||
|
||||
def apply_all(self):
|
||||
|
|
|
@ -101,21 +101,6 @@ class Core(dbus.service.Object):
|
|||
# Load metadata extension
|
||||
self.session.add_extension(lt.create_metadata_plugin)
|
||||
|
||||
# Start the TorrentManager
|
||||
self.torrents = TorrentManager(self.session)
|
||||
|
||||
# Load plugins
|
||||
self.plugins = PluginManager()
|
||||
|
||||
# Start the AlertManager
|
||||
self.alerts = AlertManager(self.session)
|
||||
|
||||
# Register alert functions
|
||||
self.alerts.register_handler("torrent_finished_alert",
|
||||
self.on_alert_torrent_finished)
|
||||
self.alerts.register_handler("torrent_paused_alert",
|
||||
self.on_alert_torrent_paused)
|
||||
|
||||
# Register set functions in the Config
|
||||
self.config.register_set_function("listen_ports",
|
||||
self.on_set_listen_ports)
|
||||
|
@ -141,13 +126,21 @@ class Core(dbus.service.Object):
|
|||
self.on_set_max_download_speed)
|
||||
self.config.register_set_function("max_upload_slots_global",
|
||||
self.on_set_max_upload_slots_global)
|
||||
self.config.register_set_function("max_connections_per_torrent",
|
||||
self.on_set_max_connections_per_torrent)
|
||||
self.config.register_set_function("max_upload_slots_per_torrent",
|
||||
self.on_set_max_upload_slots_per_torrent)
|
||||
|
||||
# Run all the set functions now to set the config for the session
|
||||
self.config.apply_all()
|
||||
# Start the TorrentManager
|
||||
self.torrents = TorrentManager(self.session)
|
||||
|
||||
# Load plugins
|
||||
self.plugins = PluginManager()
|
||||
|
||||
# Start the AlertManager
|
||||
self.alerts = AlertManager(self.session)
|
||||
|
||||
# Register alert functions
|
||||
self.alerts.register_handler("torrent_finished_alert",
|
||||
self.on_alert_torrent_finished)
|
||||
self.alerts.register_handler("torrent_paused_alert",
|
||||
self.on_alert_torrent_paused)
|
||||
|
||||
log.debug("Starting main loop..")
|
||||
self.loop = gobject.MainLoop()
|
||||
|
@ -479,14 +472,6 @@ class Core(dbus.service.Object):
|
|||
log.debug("max_upload_slots_global set to %s..", value)
|
||||
self.session.set_max_uploads(value)
|
||||
|
||||
def on_set_max_connections_per_torrent(self, key, value):
|
||||
log.debug("max_connections_per_torrent set to %s..", value)
|
||||
self.torrents.set_max_connections(value)
|
||||
|
||||
def on_set_max_upload_slots_per_torrent(self, key, value):
|
||||
log.debug("max_upload_slots_per_torrent set to %s..", value)
|
||||
self.torrents.set_max_uploads(value)
|
||||
|
||||
## Alert handlers ##
|
||||
def on_alert_torrent_finished(self, alert):
|
||||
log.debug("on_alert_torrent_finished")
|
||||
|
|
|
@ -73,6 +73,12 @@ class TorrentManager:
|
|||
# Try to load the state from file
|
||||
self.load_state()
|
||||
|
||||
# Register set functions
|
||||
self.config.register_set_function("max_connections_per_torrent",
|
||||
self.on_set_max_connections_per_torrent)
|
||||
self.config.register_set_function("max_upload_slots_per_torrent",
|
||||
self.on_set_max_upload_slots_per_torrent)
|
||||
|
||||
def __del__(self):
|
||||
log.debug("TorrentManager shutting down..")
|
||||
# Save state on shutdown
|
||||
|
@ -107,9 +113,11 @@ class TorrentManager:
|
|||
# Get the data from the file
|
||||
try:
|
||||
log.debug("Attempting to open %s for add.", filename)
|
||||
filedump = open(
|
||||
os.path.join(self.config["torrentfiles_location"],
|
||||
filename), "rb").read()
|
||||
_file = open(
|
||||
os.path.join(
|
||||
self.config["torrentfiles_location"], filename), "rb")
|
||||
filedump = _file.read()
|
||||
_file.close()
|
||||
except IOError:
|
||||
log.warning("Unable to open %s", filename)
|
||||
return None
|
||||
|
@ -154,7 +162,7 @@ class TorrentManager:
|
|||
save_file = open(os.path.join(self.config["torrentfiles_location"],
|
||||
filename),
|
||||
"wb")
|
||||
save_file.write(filedump)
|
||||
save_file.write(lt.bencode(torrent_filedump))
|
||||
save_file.close()
|
||||
except IOError:
|
||||
log.warning("Unable to save torrent file: %s", filename)
|
||||
|
@ -303,14 +311,17 @@ class TorrentManager:
|
|||
except IOError:
|
||||
log.warning("Error trying to save fastresume file")
|
||||
|
||||
def set_max_connections(self, value):
|
||||
def on_set_max_connections_per_torrent(self, key, value):
|
||||
"""Sets the per-torrent connection limit"""
|
||||
log.debug("max_connections_per_torrent set to %s..", value)
|
||||
self.max_connections = value
|
||||
for key in self.torrents.keys():
|
||||
self.torrents[key].handle.set_max_connections(value)
|
||||
|
||||
def set_max_uploads(self, value):
|
||||
def on_set_max_upload_slots_per_torrent(self, key, value):
|
||||
"""Sets the per-torrent upload slot limit"""
|
||||
log.debug("max_upload_slots_per_torrent set to %s..", value)
|
||||
self.max_uploads = value
|
||||
for key in self.torrents.keys():
|
||||
self.torrents[key].handle.set_max_uploads(value)
|
||||
|
||||
|
|
Loading…
Reference in New Issue