Skip to content

Commit 88b2e78

Browse files
authored
fix(sonarr): re-monitor episodes when re-requesting deleted but monitored seasons (#2312)
1 parent dbd5935 commit 88b2e78

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

server/api/servarr/sonarr.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,34 @@ class SonarrAPI extends ServarrBase<{
209209
series: newSeriesResponse.data,
210210
});
211211

212+
try {
213+
const episodes = await this.getEpisodes(newSeriesResponse.data.id);
214+
const episodeIdsToMonitor = episodes
215+
.filter(
216+
(ep) =>
217+
options.seasons.includes(ep.seasonNumber) && !ep.monitored
218+
)
219+
.map((ep) => ep.id);
220+
221+
if (episodeIdsToMonitor.length > 0) {
222+
logger.debug(
223+
'Re-monitoring unmonitored episodes for requested seasons.',
224+
{
225+
label: 'Sonarr',
226+
seriesId: newSeriesResponse.data.id,
227+
episodeCount: episodeIdsToMonitor.length,
228+
}
229+
);
230+
await this.monitorEpisodes(episodeIdsToMonitor);
231+
}
232+
} catch (e) {
233+
logger.warn('Failed to re-monitor episodes', {
234+
label: 'Sonarr',
235+
errorMessage: e.message,
236+
seriesId: newSeriesResponse.data.id,
237+
});
238+
}
239+
212240
if (options.searchNow) {
213241
this.searchSeries(newSeriesResponse.data.id);
214242
}
@@ -318,6 +346,38 @@ class SonarrAPI extends ServarrBase<{
318346
}
319347
}
320348

349+
public async getEpisodes(seriesId: number): Promise<EpisodeResult[]> {
350+
try {
351+
const response = await this.axios.get<EpisodeResult[]>('/episode', {
352+
params: { seriesId },
353+
});
354+
return response.data;
355+
} catch (e) {
356+
logger.error('Failed to retrieve episodes', {
357+
label: 'Sonarr API',
358+
errorMessage: e.message,
359+
seriesId,
360+
});
361+
throw new Error('Failed to get episodes');
362+
}
363+
}
364+
365+
public async monitorEpisodes(episodeIds: number[]): Promise<void> {
366+
try {
367+
await this.axios.put('/episode/monitor', {
368+
episodeIds,
369+
monitored: true,
370+
});
371+
} catch (e) {
372+
logger.error('Failed to monitor episodes', {
373+
label: 'Sonarr API',
374+
errorMessage: e.message,
375+
episodeIds,
376+
});
377+
throw new Error('Failed to monitor episodes');
378+
}
379+
}
380+
321381
private buildSeasonList(
322382
seasons: number[],
323383
existingSeasons?: SonarrSeason[]

0 commit comments

Comments
 (0)