/// <summary> /// Gets the next up. /// </summary> /// <param name="series">The series.</param> /// <param name="user">The user.</param> /// <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; // Go back starting with the most recent episodes foreach (var episode in allEpisodes) { var userData = _userDataManager.GetUserData(user.Id, episode.GetUserDataKey()); if (userData.Played) { if (lastWatched != null || nextUp == null) { break; } lastWatched = episode; lastWatchedDate = userData.LastPlayedDate ?? DateTime.MinValue; } else { if (episode.LocationType != LocationType.Virtual) { nextUp = episode; } } } if (lastWatched != null) { return new Tuple<Episode, DateTime, bool>(nextUp, lastWatchedDate, false); } var firstEpisode = allEpisodes.LastOrDefault(i => i.LocationType != LocationType.Virtual && !i.IsPlayed(user)); // Return the first episode return new Tuple<Episode, DateTime, bool>(firstEpisode, DateTime.MinValue, true); }
/// <summary> /// Gets the next up. /// </summary> /// <param name="series">The series.</param> /// <param name="user">The user.</param> /// <returns>Task{Episode}.</returns> private Tuple<Episode, DateTime> GetNextUp(Series series, User user) { // Get them in display order, then reverse var allEpisodes = series.GetSeasons(user, true, true) .SelectMany(i => i.GetEpisodes(user, true, true)) .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.Id, episode.GetUserDataKey()); if (userData.Played) { if (lastWatched != null || nextUp == null) { break; } lastWatched = episode; lastWatchedDate = userData.LastPlayedDate ?? DateTime.MinValue; } else { if (episode.LocationType != LocationType.Virtual) { nextUp = episode; } } } if (lastWatched != null) { return new Tuple<Episode, DateTime>(nextUp, lastWatchedDate); } return new Tuple<Episode, DateTime>(null, lastWatchedDate); }