diff --git a/CHANGES.md b/CHANGES.md index beb29bb..15b11a9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -30,6 +30,13 @@ * Change remove deprecated `buildNameCache` +### 0.21.17 (2020-03-03 21:35:00 UTC) + +* Fix do not process magnet links in search results +* Fix saving media process settings +* Add handler for Emby user access 'Enable access to all libraries', specifying folder access rights operate as normal + + ### 0.21.16 (2020-02-26 15:10:00 UTC) * Change alert users of Python 3.8.1 or 3.7.6 to change Python version due to a known critical issue parsing URLs diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py index 5c1f7bf..4921d3f 100644 --- a/sickbeard/providers/generic.py +++ b/sickbeard/providers/generic.py @@ -860,13 +860,14 @@ class GenericProvider(object): pass title = title and re.sub(r'\s+', '.', u'%s' % title) - url = url and str(url).replace('&', '&') + if url and not re.match('(?i)magnet:', url): + url = str(url).replace('&', '&') return title, url def _link(self, url, url_tmpl=None, url_quote=None): - if url: + if url and not re.match('(?i)magnet:', url): if PY2: try: url = url.encode('utf-8') diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 089b346..703791d 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -22,6 +22,7 @@ try: except ImportError: from lib import simplejson as json +# noinspection PyProtectedMember from mimetypes import MimeTypes import base64 @@ -5928,22 +5929,26 @@ class History(MainHandler): mapped = 0 mapping = None maps = [x.split('=') for x in sickbeard.EMBY_PARENT_MAPS.split(',') if any(x)] + args = dict(params=dict(format='json'), timeout=10, parse_json=True) for i, cur_host in enumerate(hosts): - base_url = 'http://%s/emby/Users' % cur_host + base_url = 'http://%s/emby' % cur_host headers.update({'X-MediaBrowser-Token': keys[i]}) - users = helpers.get_url(base_url, headers=headers, - params=dict(format='json'), timeout=10, parse_json=True) + users = helpers.get_url(base_url + '/Users', headers=headers, **args) for user_id in users and [u.get('Id') for u in users if u.get('Id')] or []: - user_url = '%s/%s' % (base_url, user_id) - user = helpers.get_url(user_url, headers=headers, - params=dict(format='json'), timeout=10, parse_json=True) + user_url = '%s/Users/%s' % (base_url, user_id) + user = helpers.get_url(user_url, headers=headers, **args) - for folder_id in user.get('Policy', {}).get('EnabledFolders') or []: + folder_ids = user.get('Policy', {}).get('EnabledFolders') or [] + if not folder_ids and user.get('Policy', {}).get('EnableAllFolders'): + folders = helpers.get_url('%s/Library/MediaFolders' % base_url, headers=headers, **args) + folder_ids = [_f.get('Id') for _f in folders.get('Items', {}) if _f.get('IsFolder') + and 'tvshows' == _f.get('CollectionType', '') and _f.get('Id')] + + for folder_id in folder_ids: folder = helpers.get_url('%s/Items/%s' % (user_url, folder_id), headers=headers, - params=dict(format='json'), timeout=10, parse_json=True, - mute_http_error=True) + mute_http_error=True, **args) if not folder or 'tvshows' != folder.get('CollectionType', ''): continue @@ -6649,7 +6654,7 @@ class ConfigMediaProcess(Config): def save_post_processing(self, tv_download_dir=None, process_automatically=None, autopostprocesser_frequency=None, unpack=None, keep_processed_dir=None, process_method=None, - extra_scripts=None, sg_extra_scripts=None, + extra_scripts='', sg_extra_scripts='', rename_episodes=None, airdate_episodes=None, move_associated_files=None, postpone_if_sync_files=None, naming_custom_abd=None, naming_custom_sports=None, naming_custom_anime=None,