public override Task <QueryResult <BaseItem> > GetItems(InternalItemsQuery query) { var user = query.User; Func <BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); IEnumerable <BaseItem> items; if (query.User == null) { items = query.Recursive ? GetRecursiveChildren(filter) : Children.Where(filter); } else { items = query.Recursive ? GetRecursiveChildren(user, filter) : GetSeasons(user).Where(filter); } var result = PostFilterAndSort(items, query); return(Task.FromResult(result)); }
protected override Task <QueryResult <BaseItem> > GetItemsInternal(InternalItemsQuery query) { if (query.User == null) { return(base.GetItemsInternal(query)); } var user = query.User; if (query.Recursive) { query.AncestorWithPresentationUniqueKey = GetUniqueSeriesKey(this); if (query.SortBy.Length == 0) { query.SortBy = new[] { ItemSortBy.SortName }; } if (query.IncludeItemTypes.Length == 0) { query.IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name }; } query.IsVirtualItem = false; return(Task.FromResult(LibraryManager.GetItemsResult(query))); } Func <BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); var items = GetSeasons(user).Where(filter); var result = PostFilterAndSort(items, query); return(Task.FromResult(result)); }
public override IEnumerable <BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query) { var items = GetPlayableItems(user).Result; if (query != null) { items = items.Where(i => UserViewBuilder.FilterItem(i, query)); } return(items); }
protected override QueryResult <BaseItem> GetItemsInternal(InternalItemsQuery query) { if (query.User == null) { return(base.GetItemsInternal(query)); } var user = query.User; Func <BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); var items = GetEpisodes(user, query.DtoOptions).Where(filter); return(PostFilterAndSort(items, query, false)); }
protected override Task <QueryResult <BaseItem> > GetItemsInternal(InternalItemsQuery query) { if (query.User == null) { return(base.GetItemsInternal(query)); } var user = query.User; Func <BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); var items = GetEpisodes(user).Where(filter); var result = PostFilterAndSort(items, query); return(Task.FromResult(result)); }
protected override QueryResult <BaseItem> GetItemsInternal(InternalItemsQuery query) { if (query.User == null) { return(base.GetItemsInternal(query)); } var user = query.User; Func <BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); var items = GetEpisodes(user, query.DtoOptions).Where(filter); var enablePostSorting = query.OrderBy.Length > 0 && !string.Equals(query.OrderBy[0].Item1, ItemSortBy.SortName, StringComparison.OrdinalIgnoreCase); return(PostFilterAndSort(items, query, enablePostSorting)); }
public object Get(GetSeasons request) { var user = _userManager.GetUserById(request.UserId); var series = _libraryManager.GetItemById(request.Id) as Series; if (series == null) { throw new ResourceNotFoundException("No series exists with Id " + request.Id); } var seasons = series.GetSeasons(user); if (request.IsSpecialSeason.HasValue) { var val = request.IsSpecialSeason.Value; seasons = seasons.Where(i => i.IsSpecialSeason == val); } seasons = FilterVirtualSeasons(request, seasons); // This must be the last filter if (!string.IsNullOrEmpty(request.AdjacentTo)) { seasons = UserViewBuilder.FilterForAdjacency(seasons, request.AdjacentTo) .Cast <Season>(); } var dtoOptions = GetDtoOptions(request); var returnItems = _dtoService.GetBaseItemDtos(seasons, dtoOptions, user) .ToArray(); return(new ItemsResult { TotalRecordCount = returnItems.Length, Items = returnItems }); }
public object Get(GetEpisodes request) { var user = _userManager.GetUserById(request.UserId); List <BaseItem> episodes; var dtoOptions = GetDtoOptions(_authContext, request); 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, dtoOptions); } else if (request.Season.HasValue) { var series = GetSeries(request.Id, user); if (series == null) { throw new ResourceNotFoundException("Series not found"); } var season = series.GetSeasons(user, dtoOptions).FirstOrDefault(i => i.IndexNumber == request.Season.Value); if (season == null) { episodes = new List <BaseItem>(); } else { episodes = ((Season)season).GetEpisodes(user, dtoOptions); } } else { var series = GetSeries(request.Id, user); if (series == null) { throw new ResourceNotFoundException("Series not found"); } episodes = series.GetEpisodes(user, dtoOptions).ToList(); } // Filter after the fact in case the ui doesn't want them if (request.IsMissing.HasValue) { var val = request.IsMissing.Value; episodes = episodes.Where(i => ((Episode)i).IsMissingEpisode == val).ToList(); } if (!string.IsNullOrWhiteSpace(request.StartItemId)) { episodes = episodes.SkipWhile(i => !string.Equals(i.Id.ToString("N", CultureInfo.InvariantCulture), request.StartItemId, StringComparison.OrdinalIgnoreCase)).ToList(); } // This must be the last filter if (!string.IsNullOrEmpty(request.AdjacentTo)) { episodes = UserViewBuilder.FilterForAdjacency(episodes, request.AdjacentTo).ToList(); } if (string.Equals(request.SortBy, ItemSortBy.Random, StringComparison.OrdinalIgnoreCase)) { episodes.Shuffle(); } var returnItems = episodes; if (request.StartIndex.HasValue || request.Limit.HasValue) { returnItems = ApplyPaging(episodes, request.StartIndex, request.Limit).ToList(); } var dtos = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user); return(new QueryResult <BaseItemDto> { TotalRecordCount = episodes.Count, Items = dtos }); }
public ActionResult <QueryResult <BaseItemDto> > GetEpisodes( [FromRoute, Required] string seriesId, [FromQuery] Guid?userId, [FromQuery] string?fields, [FromQuery] int?season, [FromQuery] string?seasonId, [FromQuery] bool?isMissing, [FromQuery] string?adjacentTo, [FromQuery] string?startItemId, [FromQuery] int?startIndex, [FromQuery] int?limit, [FromQuery] bool?enableImages, [FromQuery] int?imageTypeLimit, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes, [FromQuery] bool?enableUserData, [FromQuery] string?sortBy) { var user = userId.HasValue && !userId.Equals(Guid.Empty) ? _userManager.GetUserById(userId.Value) : null; List <BaseItem> episodes; var dtoOptions = new DtoOptions() .AddItemFields(fields !) .AddClientFields(Request) .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes !); if (!string.IsNullOrWhiteSpace(seasonId)) // Season id was supplied. Get episodes by season id. { var item = _libraryManager.GetItemById(new Guid(seasonId)); if (!(item is Season seasonItem)) { return(NotFound("No season exists with Id " + seasonId)); } episodes = seasonItem.GetEpisodes(user, dtoOptions); } else if (season.HasValue) // Season number was supplied. Get episodes by season number { if (!(_libraryManager.GetItemById(seriesId) is Series series)) { return(NotFound("Series not found")); } var seasonItem = series .GetSeasons(user, dtoOptions) .FirstOrDefault(i => i.IndexNumber == season.Value); episodes = seasonItem == null ? new List <BaseItem>() : ((Season)seasonItem).GetEpisodes(user, dtoOptions); } else // No season number or season id was supplied. Returning all episodes. { if (!(_libraryManager.GetItemById(seriesId) is Series series)) { return(NotFound("Series not found")); } episodes = series.GetEpisodes(user, dtoOptions).ToList(); } // Filter after the fact in case the ui doesn't want them if (isMissing.HasValue) { var val = isMissing.Value; episodes = episodes .Where(i => ((Episode)i).IsMissingEpisode == val) .ToList(); } if (!string.IsNullOrWhiteSpace(startItemId)) { episodes = episodes .SkipWhile(i => !string.Equals(i.Id.ToString("N", CultureInfo.InvariantCulture), startItemId, StringComparison.OrdinalIgnoreCase)) .ToList(); } // This must be the last filter if (!string.IsNullOrEmpty(adjacentTo)) { episodes = UserViewBuilder.FilterForAdjacency(episodes, adjacentTo).ToList(); } if (string.Equals(sortBy, ItemSortBy.Random, StringComparison.OrdinalIgnoreCase)) { episodes.Shuffle(); } var returnItems = episodes; if (startIndex.HasValue || limit.HasValue) { returnItems = ApplyPaging(episodes, startIndex, limit).ToList(); } var dtos = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user); return(new QueryResult <BaseItemDto> { TotalRecordCount = episodes.Count, Items = dtos }); }
public async Task <object> Get(GetEpisodes request) { var user = _userManager.GetUserById(request.UserId); IEnumerable <Episode> episodes; var dtoOptions = GetDtoOptions(_authContext, request); 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, dtoOptions); } else if (request.Season.HasValue) { var series = GetSeries(request.Id, user); if (series == null) { throw new ResourceNotFoundException("Series not found"); } var season = series.GetSeasons(user, dtoOptions).FirstOrDefault(i => i.IndexNumber == request.Season.Value); if (season == null) { episodes = new List <Episode>(); } else { episodes = season.GetEpisodes(user, dtoOptions); } } else { var series = GetSeries(request.Id, user); if (series == null) { throw new ResourceNotFoundException("Series not found"); } episodes = series.GetEpisodes(user, dtoOptions); } // Filter after the fact in case the ui doesn't want them if (request.IsMissing.HasValue) { var val = request.IsMissing.Value; episodes = episodes.Where(i => i.IsMissingEpisode == val); } // Filter after the fact in case the ui doesn't want them if (request.IsVirtualUnaired.HasValue) { var val = request.IsVirtualUnaired.Value; episodes = episodes.Where(i => i.IsVirtualUnaired == val); } if (!string.IsNullOrWhiteSpace(request.StartItemId)) { episodes = episodes.SkipWhile(i => !string.Equals(i.Id.ToString("N"), request.StartItemId, StringComparison.OrdinalIgnoreCase)); } IEnumerable <BaseItem> returnItems = episodes; // This must be the last filter if (!string.IsNullOrEmpty(request.AdjacentTo)) { returnItems = UserViewBuilder.FilterForAdjacency(returnItems, request.AdjacentTo); } var returnList = returnItems.ToList(); var pagedItems = ApplyPaging(returnList, request.StartIndex, request.Limit); var dtos = (await _dtoService.GetBaseItemDtos(pagedItems, dtoOptions, user).ConfigureAwait(false)) .ToArray(); return(new ItemsResult { TotalRecordCount = returnList.Count, Items = dtos }); }
/// <summary> Applies the additional filters. </summary> /// <param name="request"> The request. </param> /// <param name="i"> Zero-based index of the. </param> /// <param name="user"> The user. </param> /// <param name="isPreFiltered"> true if this object is pre filtered. </param> /// <param name="libraryManager"> Manager for library. </param> /// <returns> true if it succeeds, false if it fails. </returns> private bool ApplyAdditionalFilters(BaseReportRequest request, BaseItem i, User user, bool isPreFiltered, ILibraryManager libraryManager) { var video = i as Video; if (!isPreFiltered) { var mediaTypes = request.GetMediaTypes(); if (mediaTypes.Length > 0) { if (!(!string.IsNullOrEmpty(i.MediaType) && mediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase))) { return(false); } } if (request.IsPlayed.HasValue) { var val = request.IsPlayed.Value; if (i.IsPlayed(user) != val) { return(false); } } // Exclude item types var excluteItemTypes = request.GetExcludeItemTypes(); if (excluteItemTypes.Length > 0 && excluteItemTypes.Contains(i.GetType().Name, StringComparer.OrdinalIgnoreCase)) { return(false); } // Include item types var includeItemTypes = request.GetIncludeItemTypes(); if (includeItemTypes.Length > 0 && !includeItemTypes.Contains(i.GetType().Name, StringComparer.OrdinalIgnoreCase)) { return(false); } if (request.IsInBoxSet.HasValue) { var val = request.IsInBoxSet.Value; if (i.Parents.OfType <BoxSet>().Any() != val) { return(false); } } // Filter by Video3DFormat if (request.Is3D.HasValue) { var val = request.Is3D.Value; if (video == null || val != video.Video3DFormat.HasValue) { return(false); } } if (request.IsHD.HasValue) { var val = request.IsHD.Value; if (video == null || val != video.IsHD) { return(false); } } if (request.IsUnidentified.HasValue) { var val = request.IsUnidentified.Value; if (i.IsUnidentified != val) { return(false); } } if (request.IsLocked.HasValue) { var val = request.IsLocked.Value; if (i.IsLocked != val) { return(false); } } if (request.HasOverview.HasValue) { var filterValue = request.HasOverview.Value; var hasValue = !string.IsNullOrEmpty(i.Overview); if (hasValue != filterValue) { return(false); } } if (request.HasImdbId.HasValue) { var filterValue = request.HasImdbId.Value; var hasValue = !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Imdb)); if (hasValue != filterValue) { return(false); } } if (request.HasTmdbId.HasValue) { var filterValue = request.HasTmdbId.Value; var hasValue = !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tmdb)); if (hasValue != filterValue) { return(false); } } if (request.HasTvdbId.HasValue) { var filterValue = request.HasTvdbId.Value; var hasValue = !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb)); if (hasValue != filterValue) { return(false); } } if (request.IsYearMismatched.HasValue) { var filterValue = request.IsYearMismatched.Value; if (UserViewBuilder.IsYearMismatched(i, libraryManager) != filterValue) { return(false); } } if (request.HasOfficialRating.HasValue) { var filterValue = request.HasOfficialRating.Value; var hasValue = !string.IsNullOrEmpty(i.OfficialRating); if (hasValue != filterValue) { return(false); } } if (request.IsPlaceHolder.HasValue) { var filterValue = request.IsPlaceHolder.Value; var isPlaceHolder = false; var hasPlaceHolder = i as ISupportsPlaceHolders; if (hasPlaceHolder != null) { isPlaceHolder = hasPlaceHolder.IsPlaceHolder; } if (isPlaceHolder != filterValue) { return(false); } } if (request.HasSpecialFeature.HasValue) { var filterValue = request.HasSpecialFeature.Value; var movie = i as IHasSpecialFeatures; if (movie != null) { var ok = filterValue ? movie.SpecialFeatureIds.Count > 0 : movie.SpecialFeatureIds.Count == 0; if (!ok) { return(false); } } else { return(false); } } if (request.HasSubtitles.HasValue) { var val = request.HasSubtitles.Value; if (video == null || val != video.HasSubtitles) { return(false); } } if (request.HasParentalRating.HasValue) { var val = request.HasParentalRating.Value; var rating = i.CustomRating; if (string.IsNullOrEmpty(rating)) { rating = i.OfficialRating; } if (val) { if (string.IsNullOrEmpty(rating)) { return(false); } } else { if (!string.IsNullOrEmpty(rating)) { return(false); } } } if (request.HasTrailer.HasValue) { var val = request.HasTrailer.Value; var trailerCount = 0; var hasTrailers = i as IHasTrailers; if (hasTrailers != null) { trailerCount = hasTrailers.GetTrailerIds().Count; } var ok = val ? trailerCount > 0 : trailerCount == 0; if (!ok) { return(false); } } if (request.HasThemeSong.HasValue) { var filterValue = request.HasThemeSong.Value; var themeCount = 0; var iHasThemeMedia = i as IHasThemeMedia; if (iHasThemeMedia != null) { themeCount = iHasThemeMedia.ThemeSongIds.Count; } var ok = filterValue ? themeCount > 0 : themeCount == 0; if (!ok) { return(false); } } if (request.HasThemeVideo.HasValue) { var filterValue = request.HasThemeVideo.Value; var themeCount = 0; var iHasThemeMedia = i as IHasThemeMedia; if (iHasThemeMedia != null) { themeCount = iHasThemeMedia.ThemeVideoIds.Count; } var ok = filterValue ? themeCount > 0 : themeCount == 0; if (!ok) { return(false); } } // Apply tag filter var tags = request.GetTags(); if (tags.Length > 0) { var hasTags = i as IHasTags; if (hasTags == null) { return(false); } if (!(tags.Any(v => hasTags.Tags.Contains(v, StringComparer.OrdinalIgnoreCase)))) { return(false); } } // Apply official rating filter var officialRatings = request.GetOfficialRatings(); if (officialRatings.Length > 0 && !officialRatings.Contains(i.OfficialRating ?? string.Empty)) { return(false); } // Apply genre filter var genres = request.GetGenres(); if (genres.Length > 0 && !(genres.Any(v => i.Genres.Contains(v, StringComparer.OrdinalIgnoreCase)))) { return(false); } // Filter by VideoType var videoTypes = request.GetVideoTypes(); if (videoTypes.Length > 0 && (video == null || !videoTypes.Contains(video.VideoType))) { return(false); } var imageTypes = request.GetImageTypes().ToList(); if (imageTypes.Count > 0) { if (!(imageTypes.Any(i.HasImage))) { return(false); } } // Apply studio filter var studios = request.GetStudios(); if (studios.Length > 0 && !studios.Any(v => i.Studios.Contains(v, StringComparer.OrdinalIgnoreCase))) { return(false); } // Apply studio filter var studioIds = request.GetStudioIds(); if (studioIds.Length > 0 && !studioIds.Any(id => { var studioItem = libraryManager.GetItemById(id); return(studioItem != null && i.Studios.Contains(studioItem.Name, StringComparer.OrdinalIgnoreCase)); })) { return(false); } // Apply year filter var years = request.GetYears(); if (years.Length > 0 && !(i.ProductionYear.HasValue && years.Contains(i.ProductionYear.Value))) { return(false); } // Apply person filter var personIds = request.GetPersonIds(); if (personIds.Length > 0) { var names = personIds .Select(libraryManager.GetItemById) .Select(p => p == null ? "-1" : p.Name) .ToList(); if (!(names.Any(v => _libraryManager.GetPeople(i).Select(p => p.Name).Contains(v, StringComparer.OrdinalIgnoreCase)))) { return(false); } } // Apply person filter if (!string.IsNullOrEmpty(request.Person)) { var personTypes = request.GetPersonTypes(); if (personTypes.Length == 0) { if (!(_libraryManager.GetPeople(i).Any(p => string.Equals(p.Name, request.Person, StringComparison.OrdinalIgnoreCase)))) { return(false); } } else { var types = personTypes; var ok = new[] { i }.Any(item => _libraryManager.GetPeople(i).Any(p => p.Name.Equals(request.Person, StringComparison.OrdinalIgnoreCase) && (types.Contains(p.Type, StringComparer.OrdinalIgnoreCase) || types.Contains(p.Role, StringComparer.OrdinalIgnoreCase)))); if (!ok) { return(false); } } } } if (request.MinCommunityRating.HasValue) { var val = request.MinCommunityRating.Value; if (!(i.CommunityRating.HasValue && i.CommunityRating >= val)) { return(false); } } if (request.MinCriticRating.HasValue) { var val = request.MinCriticRating.Value; var hasCriticRating = i as IHasCriticRating; if (hasCriticRating != null) { if (!(hasCriticRating.CriticRating.HasValue && hasCriticRating.CriticRating >= val)) { return(false); } } else { return(false); } } // Artists if (!string.IsNullOrEmpty(request.ArtistIds)) { var artistIds = request.ArtistIds.Split('|'); var audio = i as IHasArtist; if (!(audio != null && artistIds.Any(id => { var artistItem = libraryManager.GetItemById(id); return(artistItem != null && audio.HasAnyArtist(artistItem.Name)); }))) { return(false); } } // Artists if (!string.IsNullOrEmpty(request.Artists)) { var artists = request.Artists.Split('|'); var audio = i as IHasArtist; if (!(audio != null && artists.Any(audio.HasAnyArtist))) { return(false); } } // Albums if (!string.IsNullOrEmpty(request.Albums)) { var albums = request.Albums.Split('|'); var audio = i as Audio; if (audio != null) { if (!albums.Any(a => string.Equals(a, audio.Album, StringComparison.OrdinalIgnoreCase))) { return(false); } } var album = i as MusicAlbum; if (album != null) { if (!albums.Any(a => string.Equals(a, album.Name, StringComparison.OrdinalIgnoreCase))) { return(false); } } var musicVideo = i as MusicVideo; if (musicVideo != null) { if (!albums.Any(a => string.Equals(a, musicVideo.Album, StringComparison.OrdinalIgnoreCase))) { return(false); } } return(false); } // Min index number if (request.MinIndexNumber.HasValue) { if (!(i.IndexNumber.HasValue && i.IndexNumber.Value >= request.MinIndexNumber.Value)) { return(false); } } // Min official rating if (!string.IsNullOrEmpty(request.MinOfficialRating)) { var level = _localization.GetRatingLevel(request.MinOfficialRating); if (level.HasValue) { var rating = i.CustomRating; if (string.IsNullOrEmpty(rating)) { rating = i.OfficialRating; } if (!string.IsNullOrEmpty(rating)) { var itemLevel = _localization.GetRatingLevel(rating); if (!(!itemLevel.HasValue || itemLevel.Value >= level.Value)) { return(false); } } } } // Max official rating if (!string.IsNullOrEmpty(request.MaxOfficialRating)) { var level = _localization.GetRatingLevel(request.MaxOfficialRating); if (level.HasValue) { var rating = i.CustomRating; if (string.IsNullOrEmpty(rating)) { rating = i.OfficialRating; } if (!string.IsNullOrEmpty(rating)) { var itemLevel = _localization.GetRatingLevel(rating); if (!(!itemLevel.HasValue || itemLevel.Value <= level.Value)) { return(false); } } } } // LocationTypes if (!string.IsNullOrEmpty(request.LocationTypes)) { var vals = request.LocationTypes.Split(','); if (!vals.Contains(i.LocationType.ToString(), StringComparer.OrdinalIgnoreCase)) { return(false); } } // ExcludeLocationTypes if (!string.IsNullOrEmpty(request.ExcludeLocationTypes)) { var vals = request.ExcludeLocationTypes.Split(','); if (vals.Contains(i.LocationType.ToString(), StringComparer.OrdinalIgnoreCase)) { return(false); } } if (!string.IsNullOrEmpty(request.AlbumArtistStartsWithOrGreater)) { var ok = new[] { i }.OfType <IHasAlbumArtist>() .Any(p => string.Compare(request.AlbumArtistStartsWithOrGreater, p.AlbumArtists.FirstOrDefault(), StringComparison.CurrentCultureIgnoreCase) < 1); if (!ok) { return(false); } } // Filter by Series Status if (!string.IsNullOrEmpty(request.SeriesStatus)) { var vals = request.SeriesStatus.Split(','); var ok = new[] { i }.OfType <Series>().Any(p => p.Status.HasValue && vals.Contains(p.Status.Value.ToString(), StringComparer.OrdinalIgnoreCase)); if (!ok) { return(false); } } // Filter by Series AirDays if (!string.IsNullOrEmpty(request.AirDays)) { var days = request.AirDays.Split(',').Select(d => (DayOfWeek)Enum.Parse(typeof(DayOfWeek), d, true)); var ok = new[] { i }.OfType <Series>().Any(p => p.AirDays != null && days.Any(d => p.AirDays.Contains(d))); if (!ok) { return(false); } } if (request.MinPlayers.HasValue) { var filterValue = request.MinPlayers.Value; var game = i as Game; if (game != null) { var players = game.PlayersSupported ?? 1; var ok = players >= filterValue; if (!ok) { return(false); } } else { return(false); } } if (request.MaxPlayers.HasValue) { var filterValue = request.MaxPlayers.Value; var game = i as Game; if (game != null) { var players = game.PlayersSupported ?? 1; var ok = players <= filterValue; if (!ok) { return(false); } } else { return(false); } } if (request.ParentIndexNumber.HasValue) { var filterValue = request.ParentIndexNumber.Value; var episode = i as Episode; if (episode != null) { if (episode.ParentIndexNumber.HasValue && episode.ParentIndexNumber.Value != filterValue) { return(false); } } var song = i as Audio; if (song != null) { if (song.ParentIndexNumber.HasValue && song.ParentIndexNumber.Value != filterValue) { return(false); } } } if (request.AiredDuringSeason.HasValue) { var episode = i as Episode; if (episode == null) { return(false); } if (!Series.FilterEpisodesBySeason(new[] { episode }, request.AiredDuringSeason.Value, true).Any()) { return(false); } } if (!string.IsNullOrEmpty(request.MinPremiereDate)) { var date = DateTime.Parse(request.MinPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); if (!(i.PremiereDate.HasValue && i.PremiereDate.Value >= date)) { return(false); } } if (!string.IsNullOrEmpty(request.MaxPremiereDate)) { var date = DateTime.Parse(request.MaxPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); if (!(i.PremiereDate.HasValue && i.PremiereDate.Value <= date)) { return(false); } } return(true); }
public object Get(GetEpisodes request) { var user = _userManager.GetUserById(request.UserId); IEnumerable <Episode> episodes; if (string.IsNullOrEmpty(request.SeasonId)) { var series = _libraryManager.GetItemById(request.Id) as Series; if (series == null) { throw new ResourceNotFoundException("No series exists with Id " + request.Id); } episodes = series.GetEpisodes(user, request.Season.Value); } else { 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); } // Filter after the fact in case the ui doesn't want them if (request.IsMissing.HasValue) { var val = request.IsMissing.Value; episodes = episodes.Where(i => i.IsMissingEpisode == val); } // Filter after the fact in case the ui doesn't want them if (request.IsVirtualUnaired.HasValue) { var val = request.IsVirtualUnaired.Value; episodes = episodes.Where(i => i.IsVirtualUnaired == val); } // This must be the last filter if (!string.IsNullOrEmpty(request.AdjacentTo)) { episodes = UserViewBuilder.FilterForAdjacency(episodes, request.AdjacentTo) .Cast <Episode>(); } var fields = request.GetItemFields().ToList(); episodes = _libraryManager.ReplaceVideosWithPrimaryVersions(episodes).Cast <Episode>(); var returnItems = episodes.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToArray(); return(new ItemsResult { TotalRecordCount = returnItems.Length, Items = returnItems }); }