From 96b8b5ccce9c45c44daf2c3a11ddb41506f369a3 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Sun, 25 Jul 2021 09:11:10 -0400 Subject: [PATCH] Improved Sonarr versions prior to 3.x detection. --- bazarr/filesystem.py | 2 +- bazarr/get_episodes.py | 12 ++++++------ bazarr/get_rootfolder.py | 2 +- bazarr/get_series.py | 11 ++++++----- bazarr/main.py | 2 +- bazarr/signalr_client.py | 2 +- bazarr/utils.py | 6 ++++-- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/bazarr/filesystem.py b/bazarr/filesystem.py index 47e09c8cb..1c439afc0 100644 --- a/bazarr/filesystem.py +++ b/bazarr/filesystem.py @@ -49,7 +49,7 @@ def browse_sonarr_filesystem(path='#'): sonarr_version = get_sonarr_version() if path == '#': path = '' - if sonarr_version.startswith('2'): + if sonarr_version.startswith(('0.', '2.')): url_sonarr_api_filesystem = url_sonarr() + "/api/filesystem?path=" + path + \ "&allowFoldersWithoutTrailingSlashes=true&includeFiles=false&apikey=" + \ settings.sonarr.apikey diff --git a/bazarr/get_episodes.py b/bazarr/get_episodes.py index 55d436f46..d5328f346 100644 --- a/bazarr/get_episodes.py +++ b/bazarr/get_episodes.py @@ -63,7 +63,7 @@ def sync_episodes(series_id=None, send_event=True): continue else: # For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results - if sonarr_version.startswith('3'): + if not sonarr_version.startswith(('0.', '2.')): episodeFiles = get_episodesFiles_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr, series_id=seriesId['sonarrSeriesId']) for episode in episodes: @@ -187,7 +187,7 @@ def sync_one_episode(episode_id): else: # For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results - if sonarr_version.startswith('3'): + if not sonarr_version.startswith(('0.', '2.')): episodeFile = get_episodesFiles_from_sonarr_api(url=url, apikey_sonarr=apikey_sonarr, episode_file_id=existing_episode['episode_file_id']) if episode_data['hasFile']: @@ -339,10 +339,10 @@ def episodeParser(episode): def get_series_from_sonarr_api(series_id, url, apikey_sonarr, sonarr_version): if series_id: url_sonarr_api_series = url + "/api/{0}series/{1}?apikey={2}".format( - '' if sonarr_version.startswith('2') else 'v3/', series_id, apikey_sonarr) + '' if sonarr_version.startswith(('0.', '2.')) else 'v3/', series_id, apikey_sonarr) else: url_sonarr_api_series = url + "/api/{0}series?apikey={1}".format( - '' if sonarr_version.startswith('2') else 'v3/', apikey_sonarr) + '' if sonarr_version.startswith(('0.', '2.')) else 'v3/', apikey_sonarr) try: r = requests.get(url_sonarr_api_series, timeout=60, verify=False, headers=headers) r.raise_for_status() @@ -375,10 +375,10 @@ def get_series_from_sonarr_api(series_id, url, apikey_sonarr, sonarr_version): def get_episodes_from_sonarr_api(url, apikey_sonarr, sonarr_version, series_id=None, episode_id=None): if series_id: url_sonarr_api_episode = url + "/api/{0}episode?seriesId={1}&apikey={2}".format( - '' if sonarr_version.startswith('2') else 'v3/', series_id, apikey_sonarr) + '' if sonarr_version.startswith(('0.', '2.')) else 'v3/', series_id, apikey_sonarr) elif episode_id: url_sonarr_api_episode = url + "/api/{0}episode/{1}?apikey={2}".format( - '' if sonarr_version.startswith('2') else 'v3/', episode_id, apikey_sonarr) + '' if sonarr_version.startswith(('0.', '2.')) else 'v3/', episode_id, apikey_sonarr) else: return diff --git a/bazarr/get_rootfolder.py b/bazarr/get_rootfolder.py index e8529e954..7027c900f 100644 --- a/bazarr/get_rootfolder.py +++ b/bazarr/get_rootfolder.py @@ -18,7 +18,7 @@ def get_sonarr_rootfolder(): sonarr_version = get_sonarr_version() # Get root folder data from Sonarr - if sonarr_version.startswith('2'): + if sonarr_version.startswith(('0.', '2.')): url_sonarr_api_rootfolder = url_sonarr() + "/api/rootfolder?apikey=" + apikey_sonarr else: url_sonarr_api_rootfolder = url_sonarr() + "/api/v3/rootfolder?apikey=" + apikey_sonarr diff --git a/bazarr/get_series.py b/bazarr/get_series.py index cedb0d163..45c68d6ee 100644 --- a/bazarr/get_series.py +++ b/bazarr/get_series.py @@ -212,7 +212,7 @@ def get_profile_list(): profiles_list = [] # Get profiles data from Sonarr - if sonarr_version.startswith('2'): + if sonarr_version.startswith(('0.', '2.')): url_sonarr_api_series = url_sonarr() + "/api/profile?apikey=" + apikey_sonarr else: url_sonarr_api_series = url_sonarr() + "/api/v3/languageprofile?apikey=" + apikey_sonarr @@ -230,7 +230,7 @@ def get_profile_list(): return None # Parsing data returned from Sonarr - if sonarr_version.startswith('2'): + if sonarr_version.startswith(('0.', '2.')): for profile in profiles_json.json(): profiles_list.append([profile['id'], profile['language'].capitalize()]) else: @@ -250,10 +250,11 @@ def profile_id_to_language(id_, profiles): def get_tags(): apikey_sonarr = settings.sonarr.apikey + sonarr_version = get_sonarr_version() tagsDict = [] # Get tags data from Sonarr - if get_sonarr_version().startswith('2'): + if sonarr_version.startswith(('0.', '2.')): url_sonarr_api_series = url_sonarr() + "/api/tag?apikey=" + apikey_sonarr else: url_sonarr_api_series = url_sonarr() + "/api/v3/tag?apikey=" + apikey_sonarr @@ -290,7 +291,7 @@ def seriesParser(show, action, sonarr_version, tags_dict, serie_default_profile, alternate_titles = str([item['title'] for item in show['alternateTitles']]) audio_language = [] - if sonarr_version.startswith('2'): + if sonarr_version.startswith(('0.', '2.')): audio_language = profile_id_to_language(show['qualityProfileId'], audio_profiles) else: audio_language = profile_id_to_language(show['languageProfileId'], audio_profiles) @@ -334,7 +335,7 @@ def seriesParser(show, action, sonarr_version, tags_dict, serie_default_profile, def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_version, sonarr_series_id=None): url_sonarr_api_series = url + "/api/{0}series/{1}?apikey={2}".format( - '' if sonarr_version.startswith('2') else 'v3/', sonarr_series_id if sonarr_series_id else "", apikey_sonarr) + '' if sonarr_version.startswith(('0.', '2.')) else 'v3/', sonarr_series_id if sonarr_series_id else "", apikey_sonarr) try: r = requests.get(url_sonarr_api_series, timeout=60, verify=False, headers=headers) r.raise_for_status() diff --git a/bazarr/main.py b/bazarr/main.py index c9fcd7560..77772e79e 100644 --- a/bazarr/main.py +++ b/bazarr/main.py @@ -132,7 +132,7 @@ def series_images(url): apikey = settings.sonarr.apikey baseUrl = settings.sonarr.base_url sonarr_version = get_sonarr_version() - if sonarr_version.startswith('2'): + if sonarr_version.startswith(('0.', '2.')): url_image = (url_sonarr() + '/api/' + url.lstrip(baseUrl) + '?apikey=' + apikey).replace('poster-250', 'poster-500') else: diff --git a/bazarr/signalr_client.py b/bazarr/signalr_client.py index 583a7942f..ba7d8b4e2 100644 --- a/bazarr/signalr_client.py +++ b/bazarr/signalr_client.py @@ -34,7 +34,7 @@ class SonarrSignalrClient: def start(self): sonarr_version = get_sonarr_version() - if sonarr_version.startswith('2.'): + if sonarr_version.startswith(('0.', '2.')): logging.warning('BAZARR can only sync from Sonarr v3 SignalR feed to get real-time update. You should ' 'consider upgrading your version({}).'.format(sonarr_version)) raise gevent.GreenletExit diff --git a/bazarr/utils.py b/bazarr/utils.py index 88e55ed84..4ccd3bacb 100644 --- a/bazarr/utils.py +++ b/bazarr/utils.py @@ -255,9 +255,10 @@ def get_sonarr_version(): def get_sonarr_platform(): sonarr_platform = '' + sonarr_version = get_sonarr_version() if settings.general.getboolean('use_sonarr'): try: - if get_sonarr_version().startswith('2'): + if sonarr_version.startswith(('0.', '2.')): sv = url_sonarr() + "/api/system/status?apikey=" + settings.sonarr.apikey else: sv = url_sonarr() + "/api/v3/system/status?apikey=" + settings.sonarr.apikey @@ -272,8 +273,9 @@ def get_sonarr_platform(): def notify_sonarr(sonarr_series_id): + sonarr_version = get_sonarr_version() try: - if get_sonarr_version().startswith('2'): + if sonarr_version.startswith(('0.', '2.')): url = url_sonarr() + "/api/command?apikey=" + settings.sonarr.apikey else: url = url_sonarr() + "/api/v3/command?apikey=" + settings.sonarr.apikey