Added series' episodes sync when required by Sonarr (ex.: episodes monitored status change)

pull/1416/head
morpheus65535 3 years ago
parent d8e8d7afc2
commit 47bb77ac6f

@ -19,11 +19,15 @@ def update_all_episodes():
logging.info('BAZARR All existing episode subtitles indexed from disk.') logging.info('BAZARR All existing episode subtitles indexed from disk.')
def sync_episodes(send_event=True): def sync_episodes(series_id=None, send_event=True):
logging.debug('BAZARR Starting episodes sync from Sonarr.') logging.debug('BAZARR Starting episodes sync from Sonarr.')
apikey_sonarr = settings.sonarr.apikey apikey_sonarr = settings.sonarr.apikey
# Get current episodes id in DB # Get current episodes id in DB
if series_id:
current_episodes_db = database.execute("SELECT sonarrEpisodeId, path, sonarrSeriesId FROM table_episodes WHERE "
"sonarrSeriesId = ?", (series_id,))
else:
current_episodes_db = database.execute("SELECT sonarrEpisodeId, path, sonarrSeriesId FROM table_episodes") current_episodes_db = database.execute("SELECT sonarrEpisodeId, path, sonarrSeriesId FROM table_episodes")
current_episodes_db_list = [x['sonarrEpisodeId'] for x in current_episodes_db] current_episodes_db_list = [x['sonarrEpisodeId'] for x in current_episodes_db]
@ -34,7 +38,7 @@ def sync_episodes(send_event=True):
altered_episodes = [] altered_episodes = []
# Get sonarrId for each series from database # Get sonarrId for each series from database
seriesIdList = get_series_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr) seriesIdList = get_series_from_sonarr_api(series_id=series_id, url=url_sonarr(), apikey_sonarr=apikey_sonarr)
series_count = len(seriesIdList) series_count = len(seriesIdList)
for i, seriesId in enumerate(seriesIdList, 1): for i, seriesId in enumerate(seriesIdList, 1):
@ -290,8 +294,11 @@ def episodeParser(episode):
'file_size': episode['episodeFile']['size']} 'file_size': episode['episodeFile']['size']}
def get_series_from_sonarr_api(url, apikey_sonarr): def get_series_from_sonarr_api(series_id, url, apikey_sonarr):
url_sonarr_api_series = url + "/api/series?apikey=" + apikey_sonarr if series_id:
url_sonarr_api_series = url + "/api/series/{0}?apikey={1}".format(series_id, apikey_sonarr)
else:
url_sonarr_api_series = url + "/api/series?apikey={}".format(apikey_sonarr)
try: try:
r = requests.get(url_sonarr_api_series, timeout=60, verify=False, headers=headers) r = requests.get(url_sonarr_api_series, timeout=60, verify=False, headers=headers)
r.raise_for_status() r.raise_for_status()
@ -310,8 +317,12 @@ def get_series_from_sonarr_api(url, apikey_sonarr):
logging.exception("BAZARR Error trying to get series from Sonarr.") logging.exception("BAZARR Error trying to get series from Sonarr.")
return return
else: else:
if series_id:
series_json = list(r.json())
else:
series_json = r.json()
series_list = [] series_list = []
for series in r.json(): for series in series_json:
series_list.append({'sonarrSeriesId': series['id'], 'title': series['title']}) series_list.append({'sonarrSeriesId': series['id'], 'title': series['title']})
return series_list return series_list

@ -132,11 +132,14 @@ class RadarrSignalrClient:
def dispatcher(data): def dispatcher(data):
topic = media_id = action = None topic = media_id = action = None
episodesChanged = None
if isinstance(data, dict): if isinstance(data, dict):
topic = data['name'] topic = data['name']
try: try:
media_id = data['body']['resource']['id'] media_id = data['body']['resource']['id']
action = data['body']['action'] action = data['body']['action']
if 'episodesChanged' in data['body']['resource']:
episodesChanged = data['body']['resource']['episodesChanged']
except KeyError: except KeyError:
return return
elif isinstance(data, list): elif isinstance(data, list):
@ -149,6 +152,9 @@ def dispatcher(data):
if topic == 'series': if topic == 'series':
update_one_series(series_id=media_id, action=action) update_one_series(series_id=media_id, action=action)
if episodesChanged:
# this will happen if an episode monitored status is changed.
sync_episodes(series_id=media_id, send_event=True)
elif topic == 'episode': elif topic == 'episode':
sync_one_episode(episode_id=media_id) sync_one_episode(episode_id=media_id)
elif topic == 'movie': elif topic == 'movie':

Loading…
Cancel
Save