Updated Days unwatched to stale media cutoff for clearer messaging. Also improved logging to tell you the names of the movies and series that are flagged as stale

This commit is contained in:
2025-11-29 09:13:51 -07:00
parent 489bda9dda
commit 875ffb9550
2 changed files with 40 additions and 8 deletions

View File

@@ -20,9 +20,9 @@
<div class="fieldDescription">The api key used by your sonarr instance</div>
</div>
<div class="inputContainer">
<label class="inputLabel inputLabelUnfocused" for="DaysUnwatched">Days Unwatched</label>
<input id="DaysUnwatched" name="DaysUnwatched" type="number" is="emby-input" style="width: 20%;"/>
<div class="fieldDescription">How many days to wait before deleting unwatched media</div>
<label class="inputLabel inputLabelUnfocused" for="StaleMediaCutoff">Stale Media Cutoff</label>
<input id="StaleMediaCutoff" name="StaleMediaCutoff" type="number" is="emby-input" style="width: 20%;"/>
<div class="fieldDescription">How many days to wait before marking files as stale</div>
</div>
<!-- <div class="selectContainer">
<label class="selectLabel" for="Options">Several Options</label>
@@ -70,7 +70,7 @@
// document.querySelector('#AString').value = config.AString;
document.querySelector('#RadarrAPIKey').value = config.RadarrAPIKey;
document.querySelector('#SonarrAPIKey').value = config.SonarrAPIKey;
document.querySelector('#DaysUnwatched').value = config.DaysUnwatched;
document.querySelector('#StaleMediaCutoff').value = config.StaleMediaCutoff;
Dashboard.hideLoadingMsg();
});
});
@@ -85,7 +85,7 @@
// config.AString = document.querySelector('#AString').value;
config.RadarrAPIKey = document.querySelector('#RadarrAPIKey').value;
config.SonarrAPIKey = document.querySelector('#SonarrAPIKey').value;
config.DaysUnwatched = document.querySelector('#DaysUnwatched').value;
config.StaleMediaCutoff = document.querySelector('#StaleMediaCutoff').value;
ApiClient.updatePluginConfiguration(MediaCleanerConfig.pluginUniqueId, config).then(function (result) {
Dashboard.processPluginConfigurationUpdateResult(result);
});

View File

@@ -61,14 +61,25 @@ public sealed class StaleMediaTask : IScheduledTask
_logger.LogInformation("Total items found: {AllItems}", allItems);
List<BaseItem> shows = [.. allItems.Where(item => item.GetBaseItemKind() == BaseItemKind.Series)];
List<BaseItem> series = [.. allItems.Where(item => item.GetBaseItemKind() == BaseItemKind.Series)];
List<BaseItem> movies = [.. allItems.Where(item => item.GetBaseItemKind() == BaseItemKind.Movie && item.UserData.Count > 0)];
List<BaseItem> staleEpisodes = [.. shows.SelectMany(GetStaleEpisodes)];
List<BaseItem> staleEpisodes = [.. series.SelectMany(GetStaleEpisodes)];
List<BaseItem> staleMovies = [.. GetStaleMovies(movies)];
_logger.LogInformation("Stale Movies found: {StaleMovies}", staleMovies.Count);
_logger.LogInformation("Stale Series found: {StaleShows}", staleEpisodes.Count);
if (staleMovies.Count > 0)
{
_logger.LogInformation("Movies: {Names}", string.Join(", ", staleMovies.Select(movie => movie.Name)));
}
_logger.LogInformation("Stale Episodes found: {StaleEpisodes}", staleEpisodes.Count);
if (staleEpisodes.Count > 0)
{
// Firstly figure out the seasons, and then the Series to find the name.
List<string> seriesNames = FindDistinctSeriesNamesFromEpisodes(staleEpisodes);
_logger.LogInformation("Series: {Names}", string.Join(", ", seriesNames));
}
return Task.CompletedTask;
}
@@ -88,6 +99,27 @@ public sealed class StaleMediaTask : IScheduledTask
return staleMovies;
}
private List<string> FindDistinctSeriesNamesFromEpisodes(List<BaseItem> episodes)
{
Guid[] seasonIds = [.. episodes.Select(episode => episode.ParentId).Distinct()];
var seasons = _libraryManager.GetItemList(new InternalItemsQuery
{
ItemIds = seasonIds
});
Guid[] seriesIds = [.. seasons.Select(season => season.ParentId).Distinct()];
var series = _libraryManager.GetItemList(new InternalItemsQuery
{
ItemIds = seriesIds
});
List<string> seriesNames = [.. series.Select(series => series.Name).Distinct()];
return seriesNames;
}
private List<BaseItem> GetStaleEpisodes(BaseItem item)
{
List<BaseItem> staleEpisodes = [];