diff options
| -rw-r--r-- | MediaBrowser.Api/TvShowsService.cs | 41 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Season.cs | 18 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Series.cs | 30 |
3 files changed, 49 insertions, 40 deletions
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index 11cd72cf4..9521f82cc 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -193,18 +193,6 @@ namespace MediaBrowser.Api /// <returns>System.Object.</returns> 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 itemsList = GetNextUpEpisodes(request) @@ -216,11 +204,13 @@ namespace MediaBrowser.Api var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(); - return new ItemsResult + var result = new ItemsResult { TotalRecordCount = itemsList.Count, Items = returnItems }; + + return ToOptimizedResult(result); } public IEnumerable<Episode> GetNextUpEpisodes(GetNextUpEpisodes request) @@ -274,14 +264,12 @@ namespace MediaBrowser.Api /// <returns>Task{Episode}.</returns> private Tuple<Episode, DateTime> GetNextUp(Series series, User user, GetNextUpEpisodes request) { - var allEpisodes = series.GetRecursiveChildren(user) - .OfType<Episode>() - .OrderByDescending(i => i.PremiereDate ?? DateTime.MinValue) - .ThenByDescending(i => i.IndexNumber ?? 0) + // Get them in display order, then reverse + var allEpisodes = series.GetSeasons(user, true, true) + .SelectMany(i => i.GetEpisodes(user, true, true)) + .Reverse() .ToList(); - allEpisodes = FilterItems(request, allEpisodes).ToList(); - Episode lastWatched = null; var lastWatchedDate = DateTime.MinValue; Episode nextUp = null; @@ -303,7 +291,10 @@ namespace MediaBrowser.Api } else { - nextUp = episode; + if (episode.LocationType != LocationType.Virtual) + { + nextUp = episode; + } } } @@ -315,15 +306,6 @@ namespace MediaBrowser.Api 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) { if (!string.IsNullOrWhiteSpace(request.SeriesId)) @@ -369,6 +351,7 @@ namespace MediaBrowser.Api { throw new ResourceNotFoundException("No series exists with Id " + request.Id); } + var seasons = series.GetSeasons(user); if (request.IsSpecialSeason.HasValue) diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index a53bb53f1..5727b316b 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -222,19 +222,35 @@ namespace MediaBrowser.Controller.Entities.TV /// <returns>IEnumerable{Episode}.</returns> 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) { var series = Series; if (series != null) { - return series.GetEpisodes(user, IndexNumber.Value); + return series.GetEpisodes(user, IndexNumber.Value, includeMissingEpisodes, includeVirtualUnairedEpisodes); } } var episodes = GetRecursiveChildren(user) .OfType<Episode>(); + if (!includeMissingEpisodes) + { + episodes = episodes.Where(i => !i.IsMissingEpisode); + } + if (!includeVirtualUnairedEpisodes) + { + episodes = episodes.Where(i => !i.IsVirtualUnaired); + } + return LibraryManager .Sort(episodes, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending) .Cast<Episode>(); diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index c48b44d91..1565de4f8 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -129,22 +129,27 @@ namespace MediaBrowser.Controller.Entities.TV 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) .OfType<Season>(); - var config = user.Configuration; - - if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) + if (!includeMissingSeasons && !includeVirtualUnaired) { seasons = seasons.Where(i => !i.IsMissingOrVirtualUnaired); } else { - if (!config.DisplayMissingEpisodes) + if (!includeMissingSeasons) { seasons = seasons.Where(i => !i.IsMissingSeason); } - if (!config.DisplayUnairedEpisodes) + if (!includeVirtualUnaired) { seasons = seasons.Where(i => !i.IsVirtualUnaired); } @@ -152,23 +157,28 @@ namespace MediaBrowser.Controller.Entities.TV return LibraryManager .Sort(seasons, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending) - .Cast<Season>(); + .Cast<Season>(); } 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) .OfType<Episode>(); episodes = FilterEpisodesBySeason(episodes, seasonNumber, DisplaySpecialsWithSeasons); - var config = user.Configuration; - - if (!config.DisplayMissingEpisodes) + if (!includeMissingEpisodes) { episodes = episodes.Where(i => !i.IsMissingEpisode); } - if (!config.DisplayUnairedEpisodes) + if (!includeVirtualUnairedEpisodes) { episodes = episodes.Where(i => !i.IsVirtualUnaired); } |
