diff --git a/.changeset/flat-bees-sing.md b/.changeset/flat-bees-sing.md new file mode 100644 index 0000000..a98222e --- /dev/null +++ b/.changeset/flat-bees-sing.md @@ -0,0 +1,5 @@ +--- +'unmonitorr': minor +--- + +Improve error messages for failed requests diff --git a/src/radarr.ts b/src/radarr.ts index 4b06085..42c44f2 100644 --- a/src/radarr.ts +++ b/src/radarr.ts @@ -26,17 +26,23 @@ export async function unmonitorMovie( let movies; for (const tmdbId of tmdbIds) { + let moviesResponse; try { - const moviesResponse = await fetch(api.getUrl('movie', { tmdbId })); - movies = - (await moviesResponse.json()) as components['schemas']['MovieResource'][]; - break; + moviesResponse = await fetch(api.getUrl('movie', { tmdbId })); } catch (error) { console.error( `Failed to get movie information from radarr for tmdbId: ${tmdbId} ${titleYear}` ); console.error(error); } + if (moviesResponse?.ok) { + movies = + (await moviesResponse.json()) as components['schemas']['MovieResource'][]; + break; + } + console.error( + `Error getting movie information: ${moviesResponse?.status} ${moviesResponse?.statusText}` + ); } if (!movies) { console.warn(`Failed to find ${titleYear} in radarr library`); @@ -49,8 +55,9 @@ export async function unmonitorMovie( } if (movie.monitored) { movie.monitored = false; + let response; try { - fetch(api.getUrl(`movie/${movie.id}`), { + response = await fetch(api.getUrl(`movie/${movie.id}`), { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(movie), @@ -61,8 +68,14 @@ export async function unmonitorMovie( return res.end(); } - console.log(`${titleYear} unmonitored!`); - return res.end(); + if (response.ok) { + console.log(`${titleYear} unmonitored!`); + return res.end(); + } + + console.error( + `Error unmonitoring ${titleYear}: ${response.status} ${response.statusText}` + ); } return res.end(); } diff --git a/src/sonarr.ts b/src/sonarr.ts index c9ee71d..d8ea8cf 100644 --- a/src/sonarr.ts +++ b/src/sonarr.ts @@ -24,7 +24,7 @@ export async function unmonitorEpisode( return res.end(); } - let seriesList; + let seriesResponse; // Sonarr has no api for getting an episode by episode tvdbId // Go through the following steps to get the matching episode: @@ -33,14 +33,20 @@ export async function unmonitorEpisode( // 3. Get episode lists // 4. Match episode on tvdbId try { - const seriesResponse = await fetch(api.getUrl('series')); - seriesList = - (await seriesResponse.json()) as components['schemas']['SeriesResource'][]; + seriesResponse = await fetch(api.getUrl('series')); } catch (error) { console.error('Failed to get series lists from sonarr:'); console.error(error); return res.end(); } + if (!seriesResponse.ok) { + console.error( + `Error getting series information: ${seriesResponse?.status} ${seriesResponse?.statusText}` + ); + return res.end(); + } + const seriesList = + (await seriesResponse.json()) as components['schemas']['SeriesResource'][]; // Match potential series on title. Year metadata from Plex is for the episode // so cannot be used for series filtering. @@ -54,25 +60,31 @@ export async function unmonitorEpisode( return res.end(); } - let episodeList; let episode; for (const series of seriesMatches) { if (!series.id) { continue; } + let episodeListResponse; try { - const episodeListResponse = await fetch( + episodeListResponse = await fetch( api.getUrl('episode', { seriesId: series.id.toString(), }) ); - episodeList = - (await episodeListResponse.json()) as components['schemas']['EpisodeResource'][]; } catch (error) { console.error(`Failed to get episode list for ${seriesTitle}:`); console.error(error); continue; } + if (!episodeListResponse.ok) { + console.error( + `Error getting episode list for ${seriesTitle}: ${seriesResponse?.status} ${seriesResponse?.statusText}` + ); + continue; + } + const episodeList = + (await episodeListResponse.json()) as components['schemas']['EpisodeResource'][]; episode = episodeList.find( ({ tvdbId }) => tvdbId && episodeTvdbIds.includes(tvdbId.toString()) @@ -91,8 +103,9 @@ export async function unmonitorEpisode( const episodeString = `${seriesTitle} - S${episode.seasonNumber}E${episode.episodeNumber}`; if (episode.monitored) { + let response; try { - fetch(api.getUrl('episode/monitor'), { + response = await fetch(api.getUrl('episode/monitor'), { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ @@ -106,8 +119,14 @@ export async function unmonitorEpisode( return res.end(); } - console.log(`${episodeString} unmonitored!`); - return res.end(); + if (response.ok) { + console.log(`${episodeString} unmonitored!`); + return res.end(); + } + + console.error( + `Error unmonitoring ${episodeString}: ${response.status} ${response.statusText}` + ); } return res.end(); }