[#3325|Core] Fix unable to remove magnet with delete_copies enabled
Users were encountering the following error while attempting to delete magnet torrents and had the config 'Delete copy of torrent file' enabled. This was due to removing a magnet before the metadata was downloaded and the torrent.filename was still set to None so raises exceptions when string operations are performed with it. File "/usr/lib/python3/dist-packages/deluge/core/torrent.py", line 1317, in delete_torrentfile os.path.join(self.config['torrentfiles_location'], self.filename) ... TypeError: join() argument must be str or bytes, not 'NoneType' Fixed by both setting a default empty string for self.filename and only deleting the torrent file copy if filename is set.
This commit is contained in:
parent
6d9dc9bd42
commit
da5d5bee20
|
@ -266,6 +266,9 @@ class Torrent(object):
|
|||
self.is_finished = False
|
||||
self.filename = filename
|
||||
|
||||
if not self.filename:
|
||||
self.filename = ''
|
||||
|
||||
self.forced_error = None
|
||||
self.statusmsg = None
|
||||
self.state = None
|
||||
|
@ -1316,7 +1319,7 @@ class Torrent(object):
|
|||
torrent_files = [
|
||||
os.path.join(get_config_dir(), 'state', self.torrent_id + '.torrent')
|
||||
]
|
||||
if delete_copies:
|
||||
if delete_copies and self.filename:
|
||||
torrent_files.append(
|
||||
os.path.join(self.config['torrentfiles_location'], self.filename)
|
||||
)
|
||||
|
|
|
@ -56,6 +56,16 @@ class TorrentmanagerTestCase(BaseTestCase):
|
|||
)
|
||||
self.assertTrue(self.tm.remove(torrent_id, False))
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def test_remove_magnet(self):
|
||||
"""Test remove magnet before received metadata and delete_copies is True"""
|
||||
magnet = 'magnet:?xt=urn:btih:ab570cdd5a17ea1b61e970bb72047de141bce173'
|
||||
options = {}
|
||||
self.core.config.config['copy_torrent_file'] = True
|
||||
self.core.config.config['del_copy_torrent_file'] = True
|
||||
torrent_id = yield self.core.add_torrent_magnet(magnet, options)
|
||||
self.assertTrue(self.tm.remove(torrent_id, False))
|
||||
|
||||
def test_prefetch_metadata(self):
|
||||
from deluge._libtorrent import lt
|
||||
|
||||
|
|
Loading…
Reference in New Issue