mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-08 09:28:41 +00:00
[#2161] Save magnet torrent_info to 'copy of' location
When magnet metadata is received a torrent file will also be written to 'copy of' location if requested. Modified the code for saving torrent file to state in Torrent class for use by TorrentManager.
This commit is contained in:
parent
e30e2ef2c3
commit
c82164c522
2 changed files with 29 additions and 25 deletions
|
@ -1109,21 +1109,38 @@ class Torrent(object):
|
||||||
flags = lt.save_resume_flags_t.flush_disk_cache if flush_disk_cache else 0
|
flags = lt.save_resume_flags_t.flush_disk_cache if flush_disk_cache else 0
|
||||||
self.handle.save_resume_data(flags)
|
self.handle.save_resume_data(flags)
|
||||||
|
|
||||||
def write_torrentfile(self):
|
def write_torrentfile(self, filename=None, filedump=None):
|
||||||
"""Writes the torrent file to the state directory in config"""
|
"""Writes the torrent file to the state dir and optional 'copy of' dir.
|
||||||
path = os.path.join(get_config_dir(), "state", self.torrent_id + ".torrent")
|
|
||||||
log.debug("Writing torrent file: %s", path)
|
|
||||||
|
|
||||||
|
Args:
|
||||||
|
filename (str, optional): The filename of the torrent file.
|
||||||
|
filedump (str, optional): bencoded filedump of a torrent file.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def write_file(filepath, filedump):
|
||||||
|
log.debug("Writing torrent file to: %s", filepath)
|
||||||
|
try:
|
||||||
|
with open(filepath, "wb") as save_file:
|
||||||
|
save_file.write(filedump)
|
||||||
|
except IOError as ex:
|
||||||
|
log.error("Unable to save torrent file to: %s", ex)
|
||||||
|
|
||||||
|
filepath = os.path.join(get_config_dir(), "state", self.torrent_id + ".torrent")
|
||||||
# Regenerate the file priorities
|
# Regenerate the file priorities
|
||||||
self.set_file_priorities([])
|
self.set_file_priorities([])
|
||||||
|
if filedump is None:
|
||||||
metadata = lt.bdecode(self.torrent_info.metadata())
|
metadata = lt.bdecode(self.torrent_info.metadata())
|
||||||
torrent_file = {"info": metadata}
|
torrent_file = {"info": metadata}
|
||||||
try:
|
filedump = lt.bencode(torrent_file)
|
||||||
with open(path, "wb") as _file:
|
write_file(filepath, filedump)
|
||||||
_file.write(lt.bencode(torrent_file))
|
|
||||||
except IOError, ex:
|
# If the user has requested a copy of the torrent be saved elsewhere we need to do that.
|
||||||
log.warning("Unable to save torrent file: %s", ex)
|
if self.config["copy_torrent_file"]:
|
||||||
|
if filename is None:
|
||||||
|
filename = self.get_status(["name"])["name"] + ".torrent"
|
||||||
|
filepath = os.path.join(self.config["torrentfiles_location"], filename)
|
||||||
|
write_file(filepath, filedump)
|
||||||
|
|
||||||
def delete_torrentfile(self):
|
def delete_torrentfile(self):
|
||||||
"""Deletes the .torrent file in the state directory in config"""
|
"""Deletes the .torrent file in the state directory in config"""
|
||||||
|
|
|
@ -530,20 +530,7 @@ class TorrentManager(component.Component):
|
||||||
|
|
||||||
# Write the .torrent file to the state directory
|
# Write the .torrent file to the state directory
|
||||||
if filedump:
|
if filedump:
|
||||||
try:
|
torrent.write_torrentfile(filename, filedump)
|
||||||
with open(os.path.join(self.state_dir, torrent.torrent_id + ".torrent"), "wb") as save_file:
|
|
||||||
save_file.write(filedump)
|
|
||||||
except IOError as ex:
|
|
||||||
log.warning("Unable to save torrent file: %s", ex)
|
|
||||||
|
|
||||||
# If the user has requested a copy of the torrent be saved elsewhere
|
|
||||||
# we need to do that.
|
|
||||||
if self.config["copy_torrent_file"] and filename is not None:
|
|
||||||
try:
|
|
||||||
with open(os.path.join(self.config["torrentfiles_location"], filename), "wb") as save_file:
|
|
||||||
save_file.write(filedump)
|
|
||||||
except IOError as ex:
|
|
||||||
log.warning("Unable to save torrent file: %s", ex)
|
|
||||||
|
|
||||||
if save_state:
|
if save_state:
|
||||||
# Save the session state
|
# Save the session state
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue