From 3ae7d0098b225562499d7c8a74b8b6c3e8893ad9 Mon Sep 17 00:00:00 2001 From: TheCatLady <52870424+TheCatLady@users.noreply.github.com> Date: Sun, 18 Apr 2021 06:05:02 -0400 Subject: [PATCH] fix(radarr): search in addition to monitoring existing movies (#1449) --- server/api/servarr/radarr.ts | 41 +++++++++++++++++++++++++++++++----- server/api/servarr/sonarr.ts | 35 ++++++++++++++++++++++-------- 2 files changed, 62 insertions(+), 14 deletions(-) diff --git a/server/api/servarr/radarr.ts b/server/api/servarr/radarr.ts index 59407720c..0e0a41f18 100644 --- a/server/api/servarr/radarr.ts +++ b/server/api/servarr/radarr.ts @@ -72,7 +72,8 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { } catch (e) { logger.error('Error retrieving movie by TMDb ID', { label: 'Radarr API', - message: e.message, + errorMessage: e.message, + tmdbId: id, }); throw new Error('Movie not found'); } @@ -89,12 +90,13 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { 'Title already exists and is available. Skipping add and returning success', { label: 'Radarr', + movie, } ); return movie; } - // movie exists in radarr but is neither downloaded nor monitored + // movie exists in Radarr but is neither downloaded nor monitored if (movie.id && !movie.monitored) { const response = await this.axios.put(`/movie`, { ...movie, @@ -115,16 +117,25 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { if (response.data.monitored) { logger.info( - 'Found existing title in Radarr and set it to monitored. Returning success', - { label: 'Radarr' } + 'Found existing title in Radarr and set it to monitored.', + { + label: 'Radarr', + movieId: response.data.id, + movieTitle: response.data.title, + } ); logger.debug('Radarr update details', { label: 'Radarr', movie: response.data, }); + + if (options.searchNow) { + this.searchMovie(response.data.id); + } + return response.data; } else { - logger.error('Failed to update existing movie in Radarr', { + logger.error('Failed to update existing movie in Radarr.', { label: 'Radarr', options, }); @@ -183,6 +194,26 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { throw new Error('Failed to add movie to Radarr'); } }; + + public async searchMovie(movieId: number): Promise { + logger.info('Executing movie search command', { + label: 'Radarr API', + movieId, + }); + + try { + await this.runCommand('MoviesSearch', { movieIds: [movieId] }); + } catch (e) { + logger.error( + 'Something went wrong while executing Radarr movie search.', + { + label: 'Radarr API', + errorMessage: e.message, + movieId, + } + ); + } + } } export default RadarrAPI; diff --git a/server/api/servarr/sonarr.ts b/server/api/servarr/sonarr.ts index 123378398..b6793ed3f 100644 --- a/server/api/servarr/sonarr.ts +++ b/server/api/servarr/sonarr.ts @@ -113,7 +113,8 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> { } catch (e) { logger.error('Error retrieving series by series title', { label: 'Sonarr API', - message: e.message, + errorMessage: e.message, + title, }); throw new Error('No series found'); } @@ -135,7 +136,8 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> { } catch (e) { logger.error('Error retrieving series by tvdb ID', { label: 'Sonarr API', - message: e.message, + errorMessage: e.message, + tvdbId: id, }); throw new Error('Series not found'); } @@ -156,16 +158,21 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> { ); if (newSeriesResponse.data.id) { - logger.info('Sonarr accepted request. Updated existing series', { + logger.info('Updated existing series in Sonarr.', { label: 'Sonarr', + seriesId: newSeriesResponse.data.id, + seriesTitle: newSeriesResponse.data.title, }); logger.debug('Sonarr update details', { label: 'Sonarr', movie: newSeriesResponse.data, }); + if (options.searchNow) { this.searchSeries(newSeriesResponse.data.id); } + + return newSeriesResponse.data; } else { logger.error('Failed to update series in Sonarr', { label: 'Sonarr', @@ -173,8 +180,6 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> { }); throw new Error('Failed to update series in Sonarr'); } - - return newSeriesResponse.data; } const createdSeriesResponse = await this.axios.post( @@ -223,7 +228,7 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> { logger.error('Something went wrong while adding a series to Sonarr.', { label: 'Sonarr API', errorMessage: e.message, - error: e, + options, response: e?.response?.data, }); throw new Error('Failed to add series'); @@ -244,7 +249,7 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> { 'Something went wrong while retrieving Sonarr language profiles.', { label: 'Sonarr API', - message: e.message, + errorMessage: e.message, } ); @@ -253,11 +258,23 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> { } public async searchSeries(seriesId: number): Promise { - logger.info('Executing series search command', { + logger.info('Executing series search command.', { label: 'Sonarr API', seriesId, }); - await this.runCommand('SeriesSearch', { seriesId }); + + try { + await this.runCommand('SeriesSearch', { seriesId }); + } catch (e) { + logger.error( + 'Something went wrong while executing Sonarr series search.', + { + label: 'Sonarr API', + errorMessage: e.message, + seriesId, + } + ); + } } private buildSeasonList(