Consider only requested episodes in played progress

This commit is contained in:
sephrat 2023-05-17 09:32:21 +02:00
commit c268717de5

View file

@ -905,26 +905,48 @@ namespace Ombi.Core.Engine
} }
} }
private class EpisodeKey
{
public int SeasonNumber;
public int EpisodeNumber;
}
private void CheckForPlayed(HideResult shouldHide, List<ChildRequests> childRequests) private void CheckForPlayed(HideResult shouldHide, List<ChildRequests> childRequests)
{ {
var theMovieDbIds = childRequests.Select(x => x.Id); var theMovieDbIds = childRequests.Select(x => x.Id);
foreach (var request in childRequests) foreach (var request in childRequests)
{ {
// TODO: consider only episodes that are part of the request (request.SeasonRequests.Episodes) var requestedEpisodes = getEpisodesKeys(request);
var playedCount = _userPlayedEpisodeRepository.GetAll().Count(x => x.TheMovieDbId == request.Id && x.UserId == request.RequestedUserId);
var toWatchCount = countRequestedEpisodes(request); var playedEpisodes = _userPlayedEpisodeRepository
.GetAll()
.Where(x => x.TheMovieDbId == request.Id && x.UserId == request.RequestedUserId)
.AsEnumerable()
.Join(requestedEpisodes,
played => new { played.SeasonNumber, played.EpisodeNumber },
requested => new { requested.SeasonNumber, requested.EpisodeNumber },
(played, requested) => new { played });
var playedCount = playedEpisodes.Count();
var toWatchCount = requestedEpisodes.Count();
request.RequestedUserPlayedProgress = 100 * playedCount / toWatchCount; request.RequestedUserPlayedProgress = 100 * playedCount / toWatchCount;
} }
} }
private int countRequestedEpisodes(ChildRequests request) private List<EpisodeKey> getEpisodesKeys(ChildRequests request)
{ {
int result = 0; List<EpisodeKey> result = new List<EpisodeKey>();
foreach(var season in request.SeasonRequests) foreach(var season in request.SeasonRequests)
{ {
result += season.Episodes.Count(); foreach(var episode in season.Episodes)
{
result.Add(new EpisodeKey
{
SeasonNumber = season.SeasonNumber,
EpisodeNumber = episode.EpisodeNumber
});
}
} }
return result; return result;
} }