From 4b6c7d01b2d1d7e0e7a5e47d18cae4ec17b67bda Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Mon, 23 Aug 2021 23:19:36 +0100 Subject: [PATCH] [#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 --- deluge/core/torrentmanager.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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: