make next up smarter using watched history from deleted items

pull/702/head
Luke Pulverenti 11 years ago
parent 7ea2bdcf16
commit aa83cb75fd

@ -192,18 +192,6 @@ namespace MediaBrowser.Api
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public object Get(GetNextUpEpisodes request) public object Get(GetNextUpEpisodes request)
{
var result = GetNextUpEpisodeItemsResult(request);
return ToOptimizedResult(result);
}
/// <summary>
/// Gets the next up episodes.
/// </summary>
/// <param name="request">The request.</param>
/// <returns>Task{ItemsResult}.</returns>
private ItemsResult GetNextUpEpisodeItemsResult(GetNextUpEpisodes request)
{ {
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
@ -216,11 +204,13 @@ namespace MediaBrowser.Api
var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(); var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray();
return new ItemsResult var result = new ItemsResult
{ {
TotalRecordCount = itemsList.Count, TotalRecordCount = itemsList.Count,
Items = returnItems Items = returnItems
}; };
return ToOptimizedResult(result);
} }
public IEnumerable<Episode> GetNextUpEpisodes(GetNextUpEpisodes request) public IEnumerable<Episode> GetNextUpEpisodes(GetNextUpEpisodes request)
@ -274,14 +264,12 @@ namespace MediaBrowser.Api
/// <returns>Task{Episode}.</returns> /// <returns>Task{Episode}.</returns>
private Tuple<Episode, DateTime> GetNextUp(Series series, User user, GetNextUpEpisodes request) private Tuple<Episode, DateTime> GetNextUp(Series series, User user, GetNextUpEpisodes request)
{ {
var allEpisodes = series.GetRecursiveChildren(user) // Get them in display order, then reverse
.OfType<Episode>() var allEpisodes = series.GetSeasons(user, true, true)
.OrderByDescending(i => i.PremiereDate ?? DateTime.MinValue) .SelectMany(i => i.GetEpisodes(user, true, true))
.ThenByDescending(i => i.IndexNumber ?? 0) .Reverse()
.ToList(); .ToList();
allEpisodes = FilterItems(request, allEpisodes).ToList();
Episode lastWatched = null; Episode lastWatched = null;
var lastWatchedDate = DateTime.MinValue; var lastWatchedDate = DateTime.MinValue;
Episode nextUp = null; Episode nextUp = null;
@ -303,7 +291,10 @@ namespace MediaBrowser.Api
} }
else else
{ {
nextUp = episode; if (episode.LocationType != LocationType.Virtual)
{
nextUp = episode;
}
} }
} }
@ -315,15 +306,6 @@ namespace MediaBrowser.Api
return new Tuple<Episode, DateTime>(null, lastWatchedDate); return new Tuple<Episode, DateTime>(null, lastWatchedDate);
} }
private IEnumerable<Episode> FilterItems(GetNextUpEpisodes request, IEnumerable<Episode> items)
{
// Make this configurable when needed
items = items.Where(i => i.LocationType != LocationType.Virtual);
return items;
}
private IEnumerable<Series> FilterSeries(GetNextUpEpisodes request, IEnumerable<Series> items) private IEnumerable<Series> FilterSeries(GetNextUpEpisodes request, IEnumerable<Series> items)
{ {
if (!string.IsNullOrWhiteSpace(request.SeriesId)) if (!string.IsNullOrWhiteSpace(request.SeriesId))
@ -369,6 +351,7 @@ namespace MediaBrowser.Api
{ {
throw new ResourceNotFoundException("No series exists with Id " + request.Id); throw new ResourceNotFoundException("No series exists with Id " + request.Id);
} }
var seasons = series.GetSeasons(user); var seasons = series.GetSeasons(user);
if (request.IsSpecialSeason.HasValue) if (request.IsSpecialSeason.HasValue)

@ -221,6 +221,13 @@ namespace MediaBrowser.Controller.Entities.TV
/// <param name="user">The user.</param> /// <param name="user">The user.</param>
/// <returns>IEnumerable{Episode}.</returns> /// <returns>IEnumerable{Episode}.</returns>
public IEnumerable<Episode> GetEpisodes(User user) public IEnumerable<Episode> GetEpisodes(User user)
{
var config = user.Configuration;
return GetEpisodes(user, config.DisplayMissingEpisodes, config.DisplayUnairedEpisodes);
}
public IEnumerable<Episode> GetEpisodes(User user, bool includeMissingEpisodes, bool includeVirtualUnairedEpisodes)
{ {
if (IndexNumber.HasValue) if (IndexNumber.HasValue)
{ {
@ -228,13 +235,22 @@ namespace MediaBrowser.Controller.Entities.TV
if (series != null) if (series != null)
{ {
return series.GetEpisodes(user, IndexNumber.Value); return series.GetEpisodes(user, IndexNumber.Value, includeMissingEpisodes, includeVirtualUnairedEpisodes);
} }
} }
var episodes = GetRecursiveChildren(user) var episodes = GetRecursiveChildren(user)
.OfType<Episode>(); .OfType<Episode>();
if (!includeMissingEpisodes)
{
episodes = episodes.Where(i => !i.IsMissingEpisode);
}
if (!includeVirtualUnairedEpisodes)
{
episodes = episodes.Where(i => !i.IsVirtualUnaired);
}
return LibraryManager return LibraryManager
.Sort(episodes, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending) .Sort(episodes, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending)
.Cast<Episode>(); .Cast<Episode>();

@ -128,23 +128,28 @@ namespace MediaBrowser.Controller.Entities.TV
} }
public IEnumerable<Season> GetSeasons(User user) public IEnumerable<Season> GetSeasons(User user)
{
var config = user.Configuration;
return GetSeasons(user, config.DisplayMissingEpisodes, config.DisplayUnairedEpisodes);
}
public IEnumerable<Season> GetSeasons(User user, bool includeMissingSeasons, bool includeVirtualUnaired)
{ {
var seasons = base.GetChildren(user, true) var seasons = base.GetChildren(user, true)
.OfType<Season>(); .OfType<Season>();
var config = user.Configuration; if (!includeMissingSeasons && !includeVirtualUnaired)
if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes)
{ {
seasons = seasons.Where(i => !i.IsMissingOrVirtualUnaired); seasons = seasons.Where(i => !i.IsMissingOrVirtualUnaired);
} }
else else
{ {
if (!config.DisplayMissingEpisodes) if (!includeMissingSeasons)
{ {
seasons = seasons.Where(i => !i.IsMissingSeason); seasons = seasons.Where(i => !i.IsMissingSeason);
} }
if (!config.DisplayUnairedEpisodes) if (!includeVirtualUnaired)
{ {
seasons = seasons.Where(i => !i.IsVirtualUnaired); seasons = seasons.Where(i => !i.IsVirtualUnaired);
} }
@ -156,19 +161,24 @@ namespace MediaBrowser.Controller.Entities.TV
} }
public IEnumerable<Episode> GetEpisodes(User user, int seasonNumber) public IEnumerable<Episode> GetEpisodes(User user, int seasonNumber)
{
var config = user.Configuration;
return GetEpisodes(user, seasonNumber, config.DisplayMissingEpisodes, config.DisplayUnairedEpisodes);
}
public IEnumerable<Episode> GetEpisodes(User user, int seasonNumber, bool includeMissingEpisodes, bool includeVirtualUnairedEpisodes)
{ {
var episodes = GetRecursiveChildren(user) var episodes = GetRecursiveChildren(user)
.OfType<Episode>(); .OfType<Episode>();
episodes = FilterEpisodesBySeason(episodes, seasonNumber, DisplaySpecialsWithSeasons); episodes = FilterEpisodesBySeason(episodes, seasonNumber, DisplaySpecialsWithSeasons);
var config = user.Configuration; if (!includeMissingEpisodes)
if (!config.DisplayMissingEpisodes)
{ {
episodes = episodes.Where(i => !i.IsMissingEpisode); episodes = episodes.Where(i => !i.IsMissingEpisode);
} }
if (!config.DisplayUnairedEpisodes) if (!includeVirtualUnairedEpisodes)
{ {
episodes = episodes.Where(i => !i.IsVirtualUnaired); episodes = episodes.Where(i => !i.IsVirtualUnaired);
} }

Loading…
Cancel
Save