diff options
author | Calum Lind <calumlind+deluge@gmail.com> | 2021-08-24 00:19:36 +0200 |
---|---|---|
committer | Calum Lind <calumlind+deluge@gmail.com> | 2021-08-29 16:58:48 +0200 |
commit | 4b6c7d01b2d1d7e0e7a5e47d18cae4ec17b67bda (patch) | |
tree | 98f67a68c5a7699ebe83b82f22585a007f71752b | |
parent | [Console] Fix using windows-curses on Windows (diff) | |
download | deluge-4b6c7d01b2d1d7e0e7a5e47d18cae4ec17b67bda.tar.xz deluge-4b6c7d01b2d1d7e0e7a5e47d18cae4ec17b67bda.zip |
[#3478|Core] Fix loading magnet with resume_data and no metadata
Since libtorrent 1.2.10 magnets save resume_data even with metadata not
yet downloaded. Unfortunately when using the deprecated
add_torrent_params key resume_data results in an error "missing
info-hash from URI"
The problem is due to lt session requiring an info_hash in
add_torrent_params but resume_data does not set or override this key and
resume_data overrides the add_torrent_params.url with an empty string.
The workaround is to specify the info_hash in add_torrent_params. We
require sha1_hash object or bytes and use of bytearray to maintain
python2 compatability.
https://dev.deluge-torrent.org/ticket/3478
-rw-r--r-- | deluge/core/torrentmanager.py | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index 7ad837bbe..174a92dae 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -441,6 +441,11 @@ class TorrentManager(component.Component): add_torrent_params['url'] = magnet.strip().encode('utf8') add_torrent_params['name'] = magnet_info['name'] torrent_id = magnet_info['info_hash'] + # Workaround lt 1.2 bug for magnet resume data with no metadata + if resume_data and VersionSplit(LT_VERSION) >= VersionSplit('1.2.10.0'): + add_torrent_params['info_hash'] = bytes( + bytearray.fromhex(torrent_id) + ) else: raise AddTorrentError( 'Unable to add magnet, invalid magnet info: %s' % magnet @@ -1250,7 +1255,7 @@ class TorrentManager(component.Component): def on_alert_add_torrent(self, alert): """Alert handler for libtorrent add_torrent_alert""" if not alert.handle.is_valid(): - log.warning('Torrent handle is invalid!') + log.warning('Torrent handle is invalid: %s', alert.error.message()) return try: |