diff --git a/nyaa/backend.py b/nyaa/backend.py index 220e954..8655990 100644 --- a/nyaa/backend.py +++ b/nyaa/backend.py @@ -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 ? diff --git a/nyaa/forms.py b/nyaa/forms.py index 125f0d0..37e4909 100644 --- a/nyaa/forms.py +++ b/nyaa/forms.py @@ -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')