From 1ddb840f4a0e64e7f2999647a16b5e23b8eeb20e Mon Sep 17 00:00:00 2001 From: Thomas Gander Date: Sun, 30 Nov 2025 21:43:47 -0700 Subject: [PATCH] Added checks for completely unwatched movies and series --- .../ScheduledTasks/StaleMediaTask.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs b/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs index bb10290..c0f6ada 100644 --- a/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs +++ b/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs @@ -93,13 +93,20 @@ public sealed class StaleMediaTask : IScheduledTask private List GetStaleMovies(List movies) { List staleMovies = []; + foreach (var movie in movies) { + bool movieIsStale = movie.DateCreated > DateTime.Now.AddDays(-Configuration.StaleMediaCutoff); var mostRecentUserData = movie.UserData.OrderByDescending(data => data.LastPlayedDate).First(); + if (mostRecentUserData.LastPlayedDate < DateTime.Now.AddDays(-Configuration.StaleMediaCutoff)) { staleMovies.Add(movie); } + else if (movieIsStale) + { + staleMovies.Add(movie); + } } return staleMovies; @@ -160,6 +167,7 @@ public sealed class StaleMediaTask : IScheduledTask }); bool seasonHasUserData = episodes.Any(episode => episode.UserData.Count > 0); + bool seasonIsStale = episodes.All(episode => episode.DateCreated > DateTime.Now.AddDays(-Configuration.StaleMediaCutoff)); if (seasonHasUserData) { @@ -174,6 +182,11 @@ public sealed class StaleMediaTask : IScheduledTask } } } + // Check for episodes that have gone unwatched for stale media cutoff + else if (seasonIsStale) + { + staleEpisodes.AddRange(episodes); + } } return staleEpisodes;