From 82441d52471b7ea8ebfc7cf3b4c2d73e8354f71d Mon Sep 17 00:00:00 2001 From: Thomas Gander Date: Sun, 25 Jan 2026 08:58:46 -0700 Subject: [PATCH] Improved logging futher and updated some methods to use LogDebugInformation and to handle exceptions --- Directory.Build.props | 2 +- .../Helpers/MovieHelper.cs | 11 ++++- .../Helpers/SeriesHelper.cs | 5 +-- .../ScheduledTasks/StaleMediaTask.cs | 44 +++++++++++++++---- 4 files changed, 47 insertions(+), 15 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 12d33c7..a334026 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,5 @@ - 0.0.0.9 + 0.0.0.10 diff --git a/Jellyfin.Plugin.MediaCleaner/Helpers/MovieHelper.cs b/Jellyfin.Plugin.MediaCleaner/Helpers/MovieHelper.cs index 429ed1c..7621892 100644 --- a/Jellyfin.Plugin.MediaCleaner/Helpers/MovieHelper.cs +++ b/Jellyfin.Plugin.MediaCleaner/Helpers/MovieHelper.cs @@ -17,6 +17,8 @@ public class MovieHelper(ILogger logger) public bool IsMovieStale(BaseItem movie) { + ArgumentNullException.ThrowIfNull(movie, "IsMovieStale process recieved a null movie. Logic failure. Exception thrown."); + _loggingHelper.LogDebugInformation("Start of scanning for movie: {Movie}", movie); _loggingHelper.LogDebugInformation("-------------------------------------------------"); @@ -47,13 +49,20 @@ public class MovieHelper(ILogger logger) movieIsStale = true; } } - else if (createdOutsideCutoff) + + if (createdOutsideCutoff && !hasUserData) { _loggingHelper.LogDebugInformation("Movie has no user data and was created outside of cutoff: {DateCreated}.", movie.DateCreated); _loggingHelper.LogDebugInformation("Adding {Movie} to stale movies.", movie); movieIsStale = true; } + if (!createdOutsideCutoff && !hasUserData) + { + _loggingHelper.LogDebugInformation("Movie has no user data and was not created outside of cutoff: {DateCreated}.", movie.DateCreated); + _loggingHelper.LogDebugInformation("Movie is not stale."); + } + _loggingHelper.LogDebugInformation("-------------------------------------------------"); _loggingHelper.LogDebugInformation("End of scanning for movie: {Movie}", movie); diff --git a/Jellyfin.Plugin.MediaCleaner/Helpers/SeriesHelper.cs b/Jellyfin.Plugin.MediaCleaner/Helpers/SeriesHelper.cs index 51d2950..cbd8c3d 100644 --- a/Jellyfin.Plugin.MediaCleaner/Helpers/SeriesHelper.cs +++ b/Jellyfin.Plugin.MediaCleaner/Helpers/SeriesHelper.cs @@ -69,10 +69,7 @@ public class SeriesHelper(ILogger logger) public bool IsSeasonDataStale(IReadOnlyList episodes) { - if(episodes == null) - { - ArgumentNullException.ThrowIfNull(episodes); - } + ArgumentNullException.ThrowIfNull(episodes, "IsSeasonDataStale process recieved null episodes. Logic failure. Exception thrown."); bool seasonIsStale = false; diff --git a/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs b/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs index 7c9f3d1..8400349 100644 --- a/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs +++ b/Jellyfin.Plugin.MediaCleaner/ScheduledTasks/StaleMediaTask.cs @@ -74,7 +74,7 @@ public sealed class StaleMediaTask : IScheduledTask List allItems = [.. _libraryManager.GetItemsResult(query).Items]; _loggingHelper.LogInformation("Total items: {ItemCount}", allItems.Count); - _loggingHelper.LogInformation("Stale items found: {AllItems}", allItems); + _loggingHelper.LogDebugInformation("Items found: {AllItems}", allItems); List series = [.. allItems.Where(item => item.GetBaseItemKind() == BaseItemKind.Series)]; List movies = [.. allItems.Where(item => item.GetBaseItemKind() == BaseItemKind.Movie)]; @@ -85,6 +85,7 @@ public sealed class StaleMediaTask : IScheduledTask List staleSeasons = [.. series.SelectMany(GetStaleSeasons)]; + _loggingHelper.LogInformation("-------------------------------------------------"); _loggingHelper.LogInformation("Starting scan of movies items."); _loggingHelper.LogInformation("-------------------------------------------------"); @@ -93,26 +94,34 @@ public sealed class StaleMediaTask : IScheduledTask _loggingHelper.LogInformation("-------------------------------------------------"); _loggingHelper.LogInformation("Stale Movies found: {StaleMovies}", staleMovies.Count); - if (staleMovies.Count > 0 && Configuration.DebugMode) + if (staleMovies.Count > 0) { foreach (var movieInfo in staleMovies) { - _loggingHelper.LogDebugInformation("Movie Info: ID: {Id} | Movie Name: {MovieName}", [movieInfo.Id, movieInfo.Name]); + _loggingHelper.LogInformation("Movie Info: ID: {Id} | Movie Name: {MovieName}", [movieInfo.Id, movieInfo.Name]); } } + else + { + _loggingHelper.LogInformation("No stale movies found!"); + } _loggingHelper.LogInformation("-------------------------------------------------"); _loggingHelper.LogInformation("Stale seasons found: {StaleSeasons}", staleSeasons.Count); - if (staleSeasons.Count > 0 && Configuration.DebugMode) + if (staleSeasons.Count > 0) { IEnumerable staleSeriesInfo = FindSeriesInfo(staleSeasons); foreach (var seriesInfo in staleSeriesInfo) { - _loggingHelper.LogDebugInformation("Series Info: ID: {Id} | Series Name: {SeriesName} | Stale Seasons: {Seasons}", [seriesInfo.Id, seriesInfo.SeriesName, string.Join(", ", seriesInfo.Seasons)]); + _loggingHelper.LogInformation("Series Info: ID: {Id} | Series Name: {SeriesName} | Stale Seasons: {Seasons}", [seriesInfo.Id, seriesInfo.SeriesName, string.Join(", ", seriesInfo.Seasons)]); } } + else + { + _loggingHelper.LogInformation("No stale seasons found!"); + } _loggingHelper.LogInformation("-------------------------------------------------"); _loggingHelper.LogInformation("Ending stale media scan..."); @@ -125,7 +134,15 @@ public sealed class StaleMediaTask : IScheduledTask { List staleMovies = []; - staleMovies.AddRange(movies.Where(_movieHelper.IsMovieStale)); + try + { + staleMovies.AddRange(movies.Where(_movieHelper.IsMovieStale)); + } + catch (ArgumentNullException ex) + { + _loggingHelper.LogInformation("Arguement Null Exception in GetStaleMovies!"); + _loggingHelper.LogInformation(ex.Message); + } return staleMovies; } @@ -136,7 +153,6 @@ public sealed class StaleMediaTask : IScheduledTask _loggingHelper.LogDebugInformation("Debug data for series: {SeriesName}", item.Name); _loggingHelper.LogDebugInformation("-------------------------------------------------"); - // Gets each season in a show var seasons = _libraryManager.GetItemList(new InternalItemsQuery { ParentId = item.Id, @@ -153,7 +169,17 @@ public sealed class StaleMediaTask : IScheduledTask _loggingHelper.LogDebugInformation("Season debug information for {SeasonNumber}:", season); - bool isSeasonDataStale = _seriesHelper.IsSeasonDataStale(episodes); + bool isSeasonDataStale = false; + + try + { + isSeasonDataStale = _seriesHelper.IsSeasonDataStale(episodes); + } + catch (ArgumentNullException ex) + { + _loggingHelper.LogInformation("Arguement Null Exception in GetStaleSeasons!"); + _loggingHelper.LogInformation(ex.Message); + } _loggingHelper.LogDebugInformation("End of season debug information for {SeasonNumber}.", season); @@ -163,7 +189,6 @@ public sealed class StaleMediaTask : IScheduledTask _loggingHelper.LogDebugInformation("-------------------------------------------------"); _loggingHelper.LogDebugInformation("End of scanning for series: {Series}", item); - _loggingHelper.LogDebugInformation("-------------------------------------------------"); return staleSeasons; } @@ -193,6 +218,7 @@ public sealed class StaleMediaTask : IScheduledTask IEnumerable IScheduledTask.GetDefaultTriggers() { // Run this task every 24 hours + // Unnecessary, and will be removed once front end page is ready. yield return new TaskTriggerInfo { Type = TaskTriggerInfoType.IntervalTrigger,