Completely handle qBittorrent webseeds

Fixes #319

Zero webseeds: empty bytestring
One webseed: bytestring
More than one: a list of bytestrings (as the spec asks for!)
This commit is contained in:
TheAMM 2017-07-30 11:49:13 +03:00
parent 987103b213
commit 1dae331156
2 changed files with 11 additions and 1 deletions

View File

@ -142,6 +142,8 @@ def handle_torrent_upload(upload_form, uploading_user=None, fromAPI=False):
# Store webseeds
# qBittorrent doesn't omit url-list but sets it as '' even when there are no webseeds
webseed_list = torrent_data.torrent_dict.get('url-list') or []
if isinstance(webseed_list, bytes):
webseed_list = [webseed_list] # qB doesn't contain a sole url in a list
webseeds = OrderedSet(webseed.decode('utf-8') for webseed in webseed_list)
# Remove our trackers, maybe? TODO ?

View File

@ -346,7 +346,15 @@ def _validate_trackers(torrent_dict, tracker_to_check_for=None):
# http://www.bittorrent.org/beps/bep_0019.html
def _validate_webseeds(torrent_dict):
webseed_list = torrent_dict.get('url-list')
# qBittorrent has an empty field instead of omitting the key, so just check for truthiness
if isinstance(webseed_list, bytes):
# url-list should be omitted in case of no webseeds. However.
# qBittorrent has an empty bytestring for no webseeds,
# a bytestring for one and a list for multiple, so:
# In case of a empty, keep as-is for next if.
# In case of one, wrap it in a list.
webseed_list = webseed_list and [webseed_list]
# Merely check for truthiness ([], '' or a list with items)
if webseed_list:
_validate_list(webseed_list, 'url-list')