diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index ccb8449123..f72a0a441e 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -413,7 +413,18 @@ namespace MediaBrowser.Api IEnumerable episodes; - if (string.IsNullOrEmpty(request.SeasonId)) + if (!string.IsNullOrWhiteSpace(request.SeasonId)) + { + var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season; + + if (season == null) + { + throw new ResourceNotFoundException("No season exists with Id " + request.SeasonId); + } + + episodes = season.GetEpisodes(user); + } + else if (request.Season.HasValue) { var series = _libraryManager.GetItemById(request.Id) as Series; @@ -426,14 +437,14 @@ namespace MediaBrowser.Api } else { - var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season; + var series = _libraryManager.GetItemById(request.Id) as Series; - if (season == null) + if (series == null) { - throw new ResourceNotFoundException("No season exists with Id " + request.SeasonId); + throw new ResourceNotFoundException("No series exists with Id " + request.Id); } - episodes = season.GetEpisodes(user); + episodes = series.GetEpisodes(user); } // Filter after the fact in case the ui doesn't want them diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index ba537403b7..1033df4dee 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -185,6 +185,31 @@ namespace MediaBrowser.Controller.Entities.TV .Cast(); } + public IEnumerable GetEpisodes(User user) + { + var config = user.Configuration; + + var allEpisodes = GetSeasons(user, true, true) + .SelectMany(i => i.GetEpisodes(user, config.DisplayMissingEpisodes, config.DisplayUnairedEpisodes)) + .Reverse() + .ToList(); + + // Specials could appear twice based on above - once in season 0, once in the aired season + // This depends on settings for that series + // When this happens, remove the duplicate from season 0 + var returnList = new List(); + + foreach (var episode in allEpisodes) + { + if (!returnList.Contains(episode)) + { + returnList.Insert(0, episode); + } + } + + return returnList; + } + public IEnumerable GetEpisodes(User user, int seasonNumber) { var config = user.Configuration;