diff --git a/bazarr/app/ui.py b/bazarr/app/ui.py index 821d2ed21..229768fc4 100644 --- a/bazarr/app/ui.py +++ b/bazarr/app/ui.py @@ -9,8 +9,8 @@ from functools import wraps from urllib.parse import unquote from constants import headers -from sonarr.info import get_sonarr_info, url_sonarr -from radarr.info import get_radarr_info, url_radarr +from sonarr.info import url_api_sonarr +from radarr.info import url_api_radarr from utilities.helper import check_credentials from .config import settings, base_url @@ -109,10 +109,7 @@ def series_images(url): url = url.strip("/") apikey = settings.sonarr.apikey baseUrl = settings.sonarr.base_url - if get_sonarr_info.is_legacy(): - url_image = f'{url_sonarr()}/api/{url.lstrip(baseUrl)}?apikey={apikey}'.replace('poster-250', 'poster-500') - else: - url_image = f'{url_sonarr()}/api/v3/{url.lstrip(baseUrl)}?apikey={apikey}'.replace('poster-250', 'poster-500') + url_image = f'{url_api_sonarr()}{url.lstrip(baseUrl)}?apikey={apikey}'.replace('poster-250', 'poster-500') try: req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers) except Exception: @@ -126,10 +123,7 @@ def series_images(url): def movies_images(url): apikey = settings.radarr.apikey baseUrl = settings.radarr.base_url - if get_radarr_info.is_legacy(): - url_image = f'{url_radarr()}/api/{url.lstrip(baseUrl)}?apikey={apikey}' - else: - url_image = f'{url_radarr()}/api/v3/{url.lstrip(baseUrl)}?apikey={apikey}' + url_image = f'{url_api_radarr()}{url.lstrip(baseUrl)}?apikey={apikey}' try: req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers) except Exception: diff --git a/bazarr/radarr/filesystem.py b/bazarr/radarr/filesystem.py index ea6284999..8cd51d3d8 100644 --- a/bazarr/radarr/filesystem.py +++ b/bazarr/radarr/filesystem.py @@ -4,7 +4,7 @@ import requests import logging from app.config import settings -from radarr.info import get_radarr_info, url_radarr +from radarr.info import url_api_radarr from constants import headers @@ -12,14 +12,8 @@ def browse_radarr_filesystem(path='#'): if path == '#': path = '' - if get_radarr_info.is_legacy(): - url_radarr_api_filesystem = (f"{url_radarr()}/api/filesystem?path={path}&" - f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&" - f"apikey={settings.radarr.apikey}") - else: - url_radarr_api_filesystem = (f"{url_radarr()}/api/v3/filesystem?path={path}&" - f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&" - f"apikey={settings.radarr.apikey}") + url_radarr_api_filesystem = (f"{url_api_radarr()}filesystem?path={path}&allowFoldersWithoutTrailingSlashes=true&" + f"includeFiles=false&apikey={settings.radarr.apikey}") try: r = requests.get(url_radarr_api_filesystem, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) diff --git a/bazarr/radarr/info.py b/bazarr/radarr/info.py index c60980e51..c6a3181f3 100644 --- a/bazarr/radarr/info.py +++ b/bazarr/radarr/info.py @@ -95,3 +95,7 @@ def url_radarr(): port = f":{settings.radarr.port}" return f"{protocol_radarr}://{settings.radarr.ip}{port}{settings.radarr.base_url}" + + +def url_api_radarr(): + return url_radarr() + f'/api{"/v3" if not get_radarr_info.is_legacy() else ""}/' diff --git a/bazarr/radarr/notify.py b/bazarr/radarr/notify.py index ae0a7f51f..db98b928d 100644 --- a/bazarr/radarr/notify.py +++ b/bazarr/radarr/notify.py @@ -4,16 +4,13 @@ import logging import requests from app.config import settings -from radarr.info import get_radarr_info, url_radarr +from radarr.info import url_api_radarr from constants import headers def notify_radarr(radarr_id): try: - if get_radarr_info.is_legacy(): - url = f"{url_radarr()}/api/command?apikey={settings.radarr.apikey}" - else: - url = f"{url_radarr()}/api/v3/command?apikey={settings.radarr.apikey}" + url = f"{url_api_radarr()}command?apikey={settings.radarr.apikey}" data = { 'name': 'RescanMovie', 'movieId': int(radarr_id) diff --git a/bazarr/radarr/rootfolder.py b/bazarr/radarr/rootfolder.py index f2d8b9ef6..477c32845 100644 --- a/bazarr/radarr/rootfolder.py +++ b/bazarr/radarr/rootfolder.py @@ -7,7 +7,7 @@ import logging from app.config import settings from utilities.path_mappings import path_mappings from app.database import TableMoviesRootfolder, TableMovies, database, delete, update, insert, select -from radarr.info import get_radarr_info, url_radarr +from radarr.info import url_api_radarr from constants import headers @@ -16,10 +16,7 @@ def get_radarr_rootfolder(): radarr_rootfolder = [] # Get root folder data from Radarr - if get_radarr_info.is_legacy(): - url_radarr_api_rootfolder = f"{url_radarr()}/api/rootfolder?apikey={apikey_radarr}" - else: - url_radarr_api_rootfolder = f"{url_radarr()}/api/v3/rootfolder?apikey={apikey_radarr}" + url_radarr_api_rootfolder = f"{url_api_radarr()}rootfolder?apikey={apikey_radarr}" try: rootfolder = requests.get(url_radarr_api_rootfolder, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) diff --git a/bazarr/radarr/sync/movies.py b/bazarr/radarr/sync/movies.py index e35d08114..eb951f251 100644 --- a/bazarr/radarr/sync/movies.py +++ b/bazarr/radarr/sync/movies.py @@ -6,7 +6,6 @@ import logging from sqlalchemy.exc import IntegrityError from app.config import settings -from radarr.info import url_radarr from utilities.path_mappings import path_mappings from subtitles.indexer.movies import store_subtitles_movie, movies_full_scan_subtitles from radarr.rootfolder import check_radarr_rootfolder @@ -82,7 +81,7 @@ def update_movies(send_event=True): tagsDict = get_tags() # Get movies data from radarr - movies = get_movies_from_radarr_api(url=url_radarr(), apikey_radarr=apikey_radarr) + movies = get_movies_from_radarr_api(apikey_radarr=apikey_radarr) if not isinstance(movies, list): return else: @@ -100,7 +99,6 @@ def update_movies(send_event=True): 'movieFile' in movie and (movie['movieFile']['size'] > 20480 or get_movie_file_size_from_db(movie['movieFile']['path']) > 20480)] - movies_to_add = [] # Remove old movies from DB movies_to_delete = list(set(current_movies_id_db) - set(current_movies_radarr)) @@ -191,8 +189,7 @@ def update_one_movie(movie_id, action, defer_search=False): try: # Get movie data from radarr api movie = None - movie_data = get_movies_from_radarr_api(url=url_radarr(), apikey_radarr=settings.radarr.apikey, - radarr_id=movie_id) + movie_data = get_movies_from_radarr_api(apikey_radarr=settings.radarr.apikey, radarr_id=movie_id) if not movie_data: return else: diff --git a/bazarr/radarr/sync/utils.py b/bazarr/radarr/sync/utils.py index 6096786f4..834f74104 100644 --- a/bazarr/radarr/sync/utils.py +++ b/bazarr/radarr/sync/utils.py @@ -4,7 +4,7 @@ import requests import logging from app.config import settings -from radarr.info import get_radarr_info, url_radarr +from radarr.info import get_radarr_info, url_api_radarr from constants import headers @@ -12,10 +12,8 @@ def get_profile_list(): apikey_radarr = settings.radarr.apikey profiles_list = [] # Get profiles data from radarr - if get_radarr_info.is_legacy(): - url_radarr_api_movies = f"{url_radarr()}/api/profile?apikey={apikey_radarr}" - else: - url_radarr_api_movies = f"{url_radarr()}/api/v3/qualityprofile?apikey={apikey_radarr}" + url_radarr_api_movies = (f"{url_api_radarr()}{'quality' if url_api_radarr().endswith('v3/') else ''}profile?" + f"apikey={apikey_radarr}") try: profiles_json = requests.get(url_radarr_api_movies, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) @@ -44,10 +42,7 @@ def get_tags(): tagsDict = [] # Get tags data from Radarr - if get_radarr_info.is_legacy(): - url_radarr_api_series = f"{url_radarr()}/api/tag?apikey={apikey_radarr}" - else: - url_radarr_api_series = f"{url_radarr()}/api/v3/tag?apikey={apikey_radarr}" + url_radarr_api_series = f"{url_api_radarr()}tag?apikey={apikey_radarr}" try: tagsDict = requests.get(url_radarr_api_series, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) @@ -70,11 +65,8 @@ def get_tags(): return [] -def get_movies_from_radarr_api(url, apikey_radarr, radarr_id=None): - if get_radarr_info.is_legacy(): - url_radarr_api_movies = f'{url}/api/movie{f"/{radarr_id}" if radarr_id else ""}?apikey={apikey_radarr}' - else: - url_radarr_api_movies = f'{url}/api/v3/movie{f"/{radarr_id}" if radarr_id else ""}?apikey={apikey_radarr}' +def get_movies_from_radarr_api(apikey_radarr, radarr_id=None): + url_radarr_api_movies = f'{url_api_radarr()}movie{f"/{radarr_id}" if radarr_id else ""}?apikey={apikey_radarr}' try: r = requests.get(url_radarr_api_movies, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) diff --git a/bazarr/sonarr/filesystem.py b/bazarr/sonarr/filesystem.py index a0f48d278..58b91a333 100644 --- a/bazarr/sonarr/filesystem.py +++ b/bazarr/sonarr/filesystem.py @@ -4,21 +4,15 @@ import requests import logging from app.config import settings -from sonarr.info import get_sonarr_info, url_sonarr +from sonarr.info import url_api_sonarr from constants import headers def browse_sonarr_filesystem(path='#'): if path == '#': path = '' - if get_sonarr_info.is_legacy(): - url_sonarr_api_filesystem = (f"{url_sonarr()}/api/filesystem?path={path}&" - f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&" - f"apikey={settings.sonarr.apikey}") - else: - url_sonarr_api_filesystem = (f"{url_sonarr()}/api/v3/filesystem?path={path}&" - f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&" - f"apikey={settings.sonarr.apikey}") + url_sonarr_api_filesystem = (f"{url_api_sonarr()}filesystem?path={path}&allowFoldersWithoutTrailingSlashes=true&" + f"includeFiles=false&apikey={settings.sonarr.apikey}") try: r = requests.get(url_sonarr_api_filesystem, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers) diff --git a/bazarr/sonarr/info.py b/bazarr/sonarr/info.py index e36aa54e7..e7fcb8f89 100644 --- a/bazarr/sonarr/info.py +++ b/bazarr/sonarr/info.py @@ -95,3 +95,7 @@ def url_sonarr(): port = f":{settings.sonarr.port}" return f"{protocol_sonarr}://{settings.sonarr.ip}{port}{settings.sonarr.base_url}" + + +def url_api_sonarr(): + return url_sonarr() + f'/api{"/v3" if not get_sonarr_info.is_legacy() else ""}/' diff --git a/bazarr/sonarr/notify.py b/bazarr/sonarr/notify.py index 66b3096b4..bd92dd9e9 100644 --- a/bazarr/sonarr/notify.py +++ b/bazarr/sonarr/notify.py @@ -4,16 +4,13 @@ import logging import requests from app.config import settings -from sonarr.info import get_sonarr_info, url_sonarr +from sonarr.info import url_api_sonarr from constants import headers def notify_sonarr(sonarr_series_id): try: - if get_sonarr_info.is_legacy(): - url = f"{url_sonarr()}/api/command?apikey={settings.sonarr.apikey}" - else: - url = f"{url_sonarr()}/api/v3/command?apikey={settings.sonarr.apikey}" + url = f"{url_api_sonarr()}command?apikey={settings.sonarr.apikey}" data = { 'name': 'RescanSeries', 'seriesId': int(sonarr_series_id) diff --git a/bazarr/sonarr/rootfolder.py b/bazarr/sonarr/rootfolder.py index 3a0b9032a..aa4c8f88d 100644 --- a/bazarr/sonarr/rootfolder.py +++ b/bazarr/sonarr/rootfolder.py @@ -7,7 +7,7 @@ import logging from app.config import settings from app.database import TableShowsRootfolder, TableShows, database, insert, update, delete, select from utilities.path_mappings import path_mappings -from sonarr.info import get_sonarr_info, url_sonarr +from sonarr.info import url_api_sonarr from constants import headers @@ -16,10 +16,7 @@ def get_sonarr_rootfolder(): sonarr_rootfolder = [] # Get root folder data from Sonarr - if get_sonarr_info.is_legacy(): - url_sonarr_api_rootfolder = f"{url_sonarr()}/api/rootfolder?apikey={apikey_sonarr}" - else: - url_sonarr_api_rootfolder = f"{url_sonarr()}/api/v3/rootfolder?apikey={apikey_sonarr}" + url_sonarr_api_rootfolder = f"{url_api_sonarr()}rootfolder?apikey={apikey_sonarr}" try: rootfolder = requests.get(url_sonarr_api_rootfolder, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers) diff --git a/bazarr/sonarr/sync/episodes.py b/bazarr/sonarr/sync/episodes.py index 1ad0f558e..ded02b7d8 100644 --- a/bazarr/sonarr/sync/episodes.py +++ b/bazarr/sonarr/sync/episodes.py @@ -47,13 +47,11 @@ def sync_episodes(series_id, send_event=True): episodes_to_add = [] # Get episodes data for a series from Sonarr - episodes = get_episodes_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr, - series_id=series_id) + episodes = get_episodes_from_sonarr_api(apikey_sonarr=apikey_sonarr, series_id=series_id) if episodes: # For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results if not get_sonarr_info.is_legacy(): - episodeFiles = get_episodesFiles_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr, - series_id=series_id) + episodeFiles = get_episodesFiles_from_sonarr_api(apikey_sonarr=apikey_sonarr, series_id=series_id) for episode in episodes: if episodeFiles and episode['hasFile']: item = [x for x in episodeFiles if x['id'] == episode['episodeFileId']] @@ -137,8 +135,7 @@ def sync_one_episode(episode_id, defer_search=False): try: # Get episode data from sonarr api episode = None - episode_data = get_episodes_from_sonarr_api(url=url, apikey_sonarr=apikey_sonarr, - episode_id=episode_id) + episode_data = get_episodes_from_sonarr_api(apikey_sonarr=apikey_sonarr, episode_id=episode_id) if not episode_data: return @@ -146,7 +143,7 @@ def sync_one_episode(episode_id, defer_search=False): # For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results if not get_sonarr_info.is_legacy() and existing_episode and episode_data['hasFile']: episode_data['episodeFile'] = \ - get_episodesFiles_from_sonarr_api(url=url, apikey_sonarr=apikey_sonarr, + get_episodesFiles_from_sonarr_api(apikey_sonarr=apikey_sonarr, episode_file_id=episode_data['episodeFileId']) episode = episodeParser(episode_data) except Exception: diff --git a/bazarr/sonarr/sync/utils.py b/bazarr/sonarr/sync/utils.py index 6b7060514..2da337bd1 100644 --- a/bazarr/sonarr/sync/utils.py +++ b/bazarr/sonarr/sync/utils.py @@ -4,7 +4,7 @@ import requests import logging from app.config import settings -from sonarr.info import get_sonarr_info, url_sonarr +from sonarr.info import get_sonarr_info, url_api_sonarr from constants import headers @@ -14,12 +14,12 @@ def get_profile_list(): # Get profiles data from Sonarr if get_sonarr_info.is_legacy(): - url_sonarr_api_series = f"{url_sonarr()}/api/profile?apikey={apikey_sonarr}" + url_sonarr_api_series = f"{url_api_sonarr()}profile?apikey={apikey_sonarr}" else: if not get_sonarr_info.version().startswith('3.'): # return an empty list when using Sonarr >= v4 that does not support series languages profiles anymore return profiles_list - url_sonarr_api_series = f"{url_sonarr()}/api/v3/languageprofile?apikey={apikey_sonarr}" + url_sonarr_api_series = f"{url_api_sonarr()}languageprofile?apikey={apikey_sonarr}" try: profiles_json = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, @@ -50,10 +50,7 @@ def get_tags(): tagsDict = [] # Get tags data from Sonarr - if get_sonarr_info.is_legacy(): - url_sonarr_api_series = f"{url_sonarr()}/api/tag?apikey={apikey_sonarr}" - else: - url_sonarr_api_series = f"{url_sonarr()}/api/v3/tag?apikey={apikey_sonarr}" + url_sonarr_api_series = f"{url_api_sonarr()}tag?apikey={apikey_sonarr}" try: tagsDict = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers) @@ -71,8 +68,8 @@ def get_tags(): def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_series_id=None): - url_sonarr_api_series = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}series/" - f"{sonarr_series_id if sonarr_series_id else ''}?apikey={apikey_sonarr}") + url_sonarr_api_series = (f"{url_api_sonarr()}series/{sonarr_series_id if sonarr_series_id else ''}?" + f"apikey={apikey_sonarr}") try: r = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers) r.raise_for_status() @@ -98,13 +95,11 @@ def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_series_id=None): return r.json() -def get_episodes_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_id=None): +def get_episodes_from_sonarr_api(apikey_sonarr, series_id=None, episode_id=None): if series_id: - url_sonarr_api_episode = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}episode?" - f"seriesId={series_id}&apikey={apikey_sonarr}") + url_sonarr_api_episode = f"{url_api_sonarr()}episode?seriesId={series_id}&apikey={apikey_sonarr}" elif episode_id: - url_sonarr_api_episode = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}episode/{episode_id}?" - f"apikey={apikey_sonarr}") + url_sonarr_api_episode = f"{url_api_sonarr()}episode/{episode_id}?apikey={apikey_sonarr}" else: return @@ -127,11 +122,11 @@ def get_episodes_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_id= return r.json() -def get_episodesFiles_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_file_id=None): +def get_episodesFiles_from_sonarr_api(apikey_sonarr, series_id=None, episode_file_id=None): if series_id: - url_sonarr_api_episodeFiles = f"{url}/api/v3/episodeFile?seriesId={series_id}&apikey={apikey_sonarr}" + url_sonarr_api_episodeFiles = f"{url_api_sonarr}episodeFile?seriesId={series_id}&apikey={apikey_sonarr}" elif episode_file_id: - url_sonarr_api_episodeFiles = f"{url}/api/v3/episodeFile/{episode_file_id}?apikey={apikey_sonarr}" + url_sonarr_api_episodeFiles = f"{url_api_sonarr}episodeFile/{episode_file_id}?apikey={apikey_sonarr}" else: return