From bc2ec9935541663199d127859bf5ef3577aa43f8 Mon Sep 17 00:00:00 2001 From: Rafael Ivanov <62517834+Raffa2001@users.noreply.github.com> Date: Tue, 18 Aug 2026 17:25:26 +0200 Subject: [PATCH 1/2] fix: keep the monitored state when a season is partially downloaded The status chain in ServarrProgressService has branches for "nothing downloaded" and "everything downloaded", but none for a season where some episodes have files. Such a request matches neither `allHaveFiles` nor `!anyFile`, so it reaches the final return, which hardcodes `monitored: false` and renders "Missing (Unmonitored)" even when every episode is monitored in Sonarr. That is the normal state of any currently airing show, so the label was effectively permanent for those requests. Pass `anyMonitored` instead of the hardcoded `false`, so a partially downloaded season that is still monitored reads "Missing (Monitored)". No other branch changes behaviour: the earlier `!anyFile && anyMonitored` return already covers the "nothing downloaded yet" case identically. --- src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs b/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs index 254d51f..d6641be 100644 --- a/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs +++ b/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs @@ -345,7 +345,7 @@ public async Task EnrichRequestsAsync(JArray requests, CancellationToken cancell return BuildLibraryProgress(false, true, false, 0, seriesOpenUrl); } - return BuildLibraryProgress(false, false, false, 0, seriesOpenUrl); + return BuildLibraryProgress(false, anyMonitored, false, 0, seriesOpenUrl); } private static ServarrProgressInfo BuildQueueProgress(IReadOnlyCollection queueItems, string baseUrl, JObject? media, bool isMovie) From 4bf6f25c9e190782535a98e8be86397f9a86b672 Mon Sep 17 00:00:00 2001 From: Rafael Ivanov <62517834+Raffa2001@users.noreply.github.com> Date: Sun, 13 Sep 2026 00:22:55 +0200 Subject: [PATCH 2/2] fix: only treat a partial season as monitored when a MISSING episode is monitored Follow-up to the review: `anyMonitored` is true when *any* episode is monitored, including ones that already have a file. For the "Missing (Monitored)" label the monitoring that matters is the monitoring of the episodes that are actually missing, so a season whose downloaded episodes are monitored but whose missing ones are not was about to be mislabelled the other way round. Introduce `anyMissingMonitored`, restricted to episodes without a file, and use it in the final return. The earlier `!anyFile && anyMonitored` branch is left untouched on purpose: when nothing has a file every episode is missing, so the two predicates are equivalent there and changing it would only add noise. Verified on a live library: 18 partially downloaded seasons, of which 2 are exactly the case the review describes (downloaded episodes monitored, missing ones not). Those two keep "Missing (Unmonitored)" with this change and would have flipped to "Monitored" without it. Builds clean on the branch: 0 warnings, 0 errors. Co-Authored-By: Claude Opus 5 --- .../Services/ServarrProgressService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs b/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs index d6641be..2466f5d 100644 --- a/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs +++ b/src/Jellyfin.Plugin.SeerrFin/Services/ServarrProgressService.cs @@ -319,6 +319,7 @@ public async Task EnrichRequestsAsync(JArray requests, CancellationToken cancell bool allHaveFiles = episodes.All(e => e.Value("hasFile") == true); bool anyMonitored = episodes.Any(e => e.Value("monitored") == true); bool allMonitored = episodes.All(e => e.Value("monitored") == true); + bool anyMissingMonitored = episodes.Any(e => e.Value("hasFile") != true && e.Value("monitored") == true); bool allUnreleased = episodes.All(e => IsUnreleasedMedia(e.Value("airDateUtc") ?? e.Value("airDate"))); long totalSize = episodes.Where(e => e.Value("hasFile") == true) @@ -345,7 +346,7 @@ public async Task EnrichRequestsAsync(JArray requests, CancellationToken cancell return BuildLibraryProgress(false, true, false, 0, seriesOpenUrl); } - return BuildLibraryProgress(false, anyMonitored, false, 0, seriesOpenUrl); + return BuildLibraryProgress(false, anyMissingMonitored, false, 0, seriesOpenUrl); } private static ServarrProgressInfo BuildQueueProgress(IReadOnlyCollection queueItems, string baseUrl, JObject? media, bool isMovie)