aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/TV
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-06-16 14:10:58 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-06-16 14:10:58 -0400
commit4f791d6ee1712439c8485260221a8c0aa64760f2 (patch)
tree88bd1f7e13bfda15644a054cd205f64753d25275 /MediaBrowser.Server.Implementations/TV
parentd9406d48ca0231bc096aeadc595c30f0596c8dda (diff)
parent7498b7b5b7e2f7ddf380df1f47421d26c8171418 (diff)
Merge branch 'dev'
Diffstat (limited to 'MediaBrowser.Server.Implementations/TV')
-rw-r--r--MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs118
1 files changed, 64 insertions, 54 deletions
diff --git a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
index ec91dc1b71..82232ffae0 100644
--- a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
+++ b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
@@ -111,24 +111,6 @@ namespace MediaBrowser.Server.Implementations.TV
.Select(i => GetNextUp(i, currentUser))
// Include if an episode was found, and either the series is not unwatched or the specific series was requested
.Where(i => i.Item1 != null && (!i.Item3 || !string.IsNullOrWhiteSpace(request.SeriesId)))
- //.OrderByDescending(i =>
- //{
- // var episode = i.Item1;
-
- // var seriesUserData = _userDataManager.GetUserData(user, episode.Series);
-
- // if (seriesUserData.IsFavorite)
- // {
- // return 2;
- // }
-
- // if (seriesUserData.Likes.HasValue)
- // {
- // return seriesUserData.Likes.Value ? 1 : -1;
- // }
-
- // return 0;
- //})
.OrderByDescending(i => i.Item2)
.ThenByDescending(i => i.Item1.PremiereDate ?? DateTime.MinValue)
.Select(i => i.Item1);
@@ -142,52 +124,80 @@ namespace MediaBrowser.Server.Implementations.TV
/// <returns>Task{Episode}.</returns>
private Tuple<Episode, DateTime, bool> GetNextUp(Series series, User user)
{
- // Get them in display order, then reverse
- var allEpisodes = series.GetSeasons(user, true, true)
- .Where(i => !i.IndexNumber.HasValue || i.IndexNumber.Value != 0)
- .SelectMany(i => i.GetEpisodes(user))
- .Reverse()
- .ToList();
-
- Episode lastWatched = null;
- var lastWatchedDate = DateTime.MinValue;
- Episode nextUp = null;
+ var firstUnwatchedEpisode = _libraryManager.GetItemList(new InternalItemsQuery(user)
+ {
+ AncestorWithPresentationUniqueKey = series.PresentationUniqueKey,
+ IncludeItemTypes = new[] { typeof(Episode).Name },
+ SortBy = new[] { ItemSortBy.SortName },
+ SortOrder = SortOrder.Ascending,
+ Limit = 1,
+ IsPlayed = false,
+ IsVirtualItem = false,
+ ParentIndexNumberNotEquals = 0
- var includeMissing = user.Configuration.DisplayMissingEpisodes;
+ }).Cast<Episode>().FirstOrDefault();
- // Go back starting with the most recent episodes
- foreach (var episode in allEpisodes)
+ // series is fully played
+ if (firstUnwatchedEpisode == null)
{
- var userData = _userDataManager.GetUserData(user, episode);
+ return new Tuple<Episode, DateTime, bool>(null, DateTime.MinValue, true);
+ }
- if (userData.Played)
- {
- if (lastWatched != null || nextUp == null)
- {
- break;
- }
+ var lastWatchedEpisode = _libraryManager.GetItemList(new InternalItemsQuery(user)
+ {
+ AncestorWithPresentationUniqueKey = series.PresentationUniqueKey,
+ IncludeItemTypes = new[] { typeof(Episode).Name },
+ SortBy = new[] { ItemSortBy.DatePlayed },
+ SortOrder = SortOrder.Descending,
+ Limit = 1,
+ IsVirtualItem = false,
+ ParentIndexNumberNotEquals = 0
+
+ }).FirstOrDefault();
+
+ //// Get them in display order, then reverse
+ //var allEpisodes = series.GetEpisodes(user, false, false)
+ // .Where(i => !i.ParentIndexNumber.HasValue || i.ParentIndexNumber.Value != 0)
+ // .Reverse()
+ // .ToList();
+
+ //Episode lastWatched = null;
+ //var lastWatchedDate = DateTime.MinValue;
+ //Episode nextUp = null;
+
+ //// Go back starting with the most recent episodes
+ //foreach (var episode in allEpisodes)
+ //{
+ // var userData = _userDataManager.GetUserData(user, episode);
+
+ // if (userData.Played)
+ // {
+ // if (lastWatched != null || nextUp == null)
+ // {
+ // break;
+ // }
+
+ // lastWatched = episode;
+ // lastWatchedDate = userData.LastPlayedDate ?? DateTime.MinValue;
+ // }
+ // else
+ // {
+ // nextUp = episode;
+ // }
+ //}
+
+ if (lastWatchedEpisode != null)
+ {
+ var userData = _userDataManager.GetUserData(user, lastWatchedEpisode);
- lastWatched = episode;
- lastWatchedDate = userData.LastPlayedDate ?? DateTime.MinValue;
- }
- else
+ if (userData.LastPlayedDate.HasValue)
{
- if (!episode.IsVirtualUnaired && (includeMissing || !episode.IsMissingEpisode))
- {
- nextUp = episode;
- }
+ return new Tuple<Episode, DateTime, bool>(firstUnwatchedEpisode, userData.LastPlayedDate.Value, false);
}
}
- if (lastWatched != null)
- {
- return new Tuple<Episode, DateTime, bool>(nextUp, lastWatchedDate, false);
- }
-
- var firstEpisode = allEpisodes.LastOrDefault(i => !i.IsVirtualUnaired && (includeMissing || !i.IsMissingEpisode) && !i.IsPlayed(user));
-
// Return the first episode
- return new Tuple<Episode, DateTime, bool>(firstEpisode, DateTime.MinValue, true);
+ return new Tuple<Episode, DateTime, bool>(firstUnwatchedEpisode, DateTime.MinValue, true);
}
private QueryResult<BaseItem> GetResult(IEnumerable<BaseItem> items, int? totalRecordLimit, NextUpQuery query)