Skip to content

Commit

Permalink
Fix not played cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
shemanaev committed Feb 25, 2024
1 parent b5251ed commit b4751ea
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 18 deletions.
8 changes: 4 additions & 4 deletions MediaCleaner/Filtering/SeriesFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ public List<ExpiredItem> Apply(List<ExpiredItem> items)
var seasons = items.GroupBy(x => ((Episode)x.Item).Season?.Id ?? ((Episode)x.Item).Series?.Id);
foreach (var season in seasons)
{
var first = season.MaxBy(x => x.Data?.First().LastPlayedDate ?? x.Item.DateCreated);
var first = season.MaxBy(x => x.Data?.First()?.LastPlayedDate ?? x.Item.DateCreated);
if (first?.Item is not Episode episode) continue;
var episodes = episode.Season.GetEpisodes().Where(x => !x.IsVirtualItem).ToList();
var allWatched = season.Count() == episodes.Count && season.All(value => episodes.Contains(value.Item));

_logger.LogDebug("\"{Username}\" has watched episodes {Count} of {Total} in season \"{SeriesName}\": \"{SeasonName}\"",
season.First().Data?.First().User.Username ?? "[None]", season.Count(), episodes.Count, episode.Series.Name, episode.Season.Name);
season.First().Data?.First()?.User.Username ?? "[None]", season.Count(), episodes.Count, episode.Series.Name, episode.Season.Name);

if (allWatched)
{
Expand All @@ -57,13 +57,13 @@ public List<ExpiredItem> Apply(List<ExpiredItem> items)
var series = items.GroupBy(x => ((Episode)x.Item).Series?.Id);
foreach (var show in series)
{
var first = show.MaxBy(x => x.Data?.First().LastPlayedDate ?? x.Item.DateCreated);
var first = show.MaxBy(x => x.Data?.First()?.LastPlayedDate ?? x.Item.DateCreated);
if (first?.Item is not Episode episode) continue;
var episodes = episode.Series.GetEpisodes().Where(x => !x.IsVirtualItem).ToList();
var allWatched = show.Count() == episodes.Count && show.All(value => episodes.Contains(value.Item));

_logger.LogDebug("\"{Username}\" has watched episodes {Count} of {Total} in series \"{SeriesName}\"'",
show.First().Data?.First().User.Username ?? "[None]", show.Count(), episodes.Count, episode.Series.Name);
show.First().Data?.First()?.User.Username ?? "[None]", show.Count(), episodes.Count, episode.Series.Name);

if (allWatched)
{
Expand Down
4 changes: 2 additions & 2 deletions MediaCleaner/MediaCleaner.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>MediaCleaner</RootNamespace>
<AssemblyVersion>2.12.0.0</AssemblyVersion>
<FileVersion>2.12.0.0</FileVersion>
<AssemblyVersion>2.13.0.0</AssemblyVersion>
<FileVersion>2.13.0.0</FileVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
60 changes: 52 additions & 8 deletions MediaCleaner/MediaCleanupTask.cs
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,14 @@ public async Task ExecuteAsync(IProgress<double> progress, CancellationToken can
}
}

DeleteItem(item.Item);
try
{
DeleteItem(item.Item);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error deleting item: {name}", item.FullName);
}
}

expiredNotPlayed = expiredNotPlayed.OrderBy(x => x.Item.DateCreated).ToList();
Expand All @@ -213,7 +220,14 @@ public async Task ExecuteAsync(IProgress<double> progress, CancellationToken can

await CreateNotification(item);

DeleteItem(item.Item);
try
{
DeleteItem(item.Item);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error deleting item: {name}", item.FullName);
}
}

progress.Report(100);
Expand Down Expand Up @@ -500,37 +514,67 @@ private async Task CreateNotification(ExpiredItem item)
{
case Movie movie:
title = $"\"{movie.Name}\" was deleted";
shortOverview = $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}";
shortOverview = item.Kind switch
{
ExpiredKind.Played => $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}",
ExpiredKind.NotPlayed => $"Not played by anyone since {item.Item.DateCreated}",
_ => throw new NotImplementedException(),
};
overview = $"{movie.Path}";
break;

case Series series:
title = $"\"{series.Name}\" was deleted";
shortOverview = $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}";
shortOverview = item.Kind switch
{
ExpiredKind.Played => $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}",
ExpiredKind.NotPlayed => $"Not played by anyone since {item.Item.DateCreated}",
_ => throw new NotImplementedException(),
};
overview = $"{series.Path}";
break;

case Season season:
title = $"\"{season.SeriesName}\" S{season.IndexNumber:D2} was deleted";
shortOverview = $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}";
shortOverview = item.Kind switch
{
ExpiredKind.Played => $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}",
ExpiredKind.NotPlayed => $"Not played by anyone since {item.Item.DateCreated}",
_ => throw new NotImplementedException(),
};
overview = $"{season.Path ?? season.SeriesPath}";
break;

case Episode episode:
title = $"\"{episode.SeriesName}\" S{episode.ParentIndexNumber:D2}E{episode.IndexNumber:D2} was deleted";
shortOverview = $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}";
shortOverview = item.Kind switch
{
ExpiredKind.Played => $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}",
ExpiredKind.NotPlayed => $"Not played by anyone since {item.Item.DateCreated}",
_ => throw new NotImplementedException(),
};
overview = $"{episode.Path}";
break;

case Video video:
title = $"\"{video.Name}\" was deleted";
shortOverview = $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}";
shortOverview = item.Kind switch
{
ExpiredKind.Played => $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}",
ExpiredKind.NotPlayed => $"Not played by anyone since {item.Item.DateCreated}",
_ => throw new NotImplementedException(),
};
overview = $"{video.Path}";
break;

default:
title = $"\"{item.Item.Name}\" was deleted";
shortOverview = $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}";
shortOverview = item.Kind switch
{
ExpiredKind.Played => $"Last played by {item.Data.First().User.Username} at {item.Data.First().LastPlayedDate}",
ExpiredKind.NotPlayed => $"Not played by anyone since {item.Item.DateCreated}",
_ => throw new NotImplementedException(),
};
overview = $"{item.Item.Path}";
break;
};
Expand Down
6 changes: 2 additions & 4 deletions build.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: "Media Cleaner"
guid: "607fee77-97eb-41fe-bf22-26844d99ffb0"
version: "2.12.0.0"
version: "2.13.0.0"
targetAbi: "10.8.11.0"
framework: "net6.0"
overview: "Delete played media after specified time"
Expand All @@ -13,7 +13,5 @@ owner: "shemanaev"
artifacts:
- "MediaCleaner.dll"
changelog: >
Add color coding to levels in log viewer
Add full name in logs
Add cleanup of old unplayed items
Fix not played cleanup

0 comments on commit b4751ea

Please sign in to comment.