public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query) { query.Genres = new[] { Name }; query.ExcludeItemTypes = new[] { typeof(Game).Name, typeof(MusicVideo).Name, typeof(Audio.Audio).Name, typeof(MusicAlbum).Name, typeof(MusicArtist).Name }; return LibraryManager.GetItemList(query); }
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query) { query.Genres = new[] { Name }; query.IncludeItemTypes = new[] { typeof(Game).Name }; return LibraryManager.GetItemList(query); }
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) { try { // Don't blow up here because it could cause parent screens with other content to fail return await ChannelManager.GetChannelItemsInternal(new ChannelItemQuery { ChannelId = ChannelId, FolderId = Id.ToString("N"), Limit = query.Limit, StartIndex = query.StartIndex, UserId = query.User.Id.ToString("N"), SortBy = query.SortBy, SortOrder = query.SortOrder }, new Progress<double>(), CancellationToken.None); } catch { // Already logged at lower levels return new QueryResult<BaseItem> { }; } }
private string GetPathByTitle(string title) { var query = new MediaBrowser.Controller.Entities.InternalItemsQuery { Name = title }; var results = _libmanager.GetItemsResult(query); return(results.Items[0].Path); }
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; }
public override Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) { var parent = this as Folder; if (ParentId != Guid.Empty) { parent = LibraryManager.GetItemById(ParentId) as Folder ?? parent; } return new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager, CollectionManager, PlaylistManager) .GetUserItems(parent, this, ViewType, query); }
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query) { int year; var usCulture = new CultureInfo("en-US"); if (!int.TryParse(Name, NumberStyles.Integer, usCulture, out year)) { return new List<BaseItem>(); } query.Years = new[] { year }; return LibraryManager.GetItemList(query); }
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) { if (query.Recursive) { var items = query.User.RootFolder.GetRecursiveChildren(query.User); return SortAndFilter(items, query); } var result = await UserViewManager.GetUserViews(new UserViewQuery { UserId = query.User.Id.ToString("N") }, CancellationToken.None).ConfigureAwait(false); return SortAndFilter(result, query); }
protected override async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query) { if (query.Recursive) { return QueryRecursive(query); } var result = await UserViewManager.GetUserViews(new UserViewQuery { UserId = query.User.Id.ToString("N"), PresetViews = query.PresetViews }, CancellationToken.None).ConfigureAwait(false); var user = query.User; Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); return PostFilterAndSort(result.Where(filter), query, true, true); }
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) { var user = query.User; Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); if (query.Recursive) { var items = query.User.RootFolder.GetRecursiveChildren(query.User, filter); return PostFilterAndSort(items, query); } var result = await UserViewManager.GetUserViews(new UserViewQuery { UserId = query.User.Id.ToString("N") }, CancellationToken.None).ConfigureAwait(false); return PostFilterAndSort(result.Where(filter), query); }
private string GetOrderByText(InternalItemsQuery query) { if (query.SortBy == null || query.SortBy.Length == 0) { return string.Empty; } var sortOrder = query.SortOrder == SortOrder.Descending ? "DESC" : "ASC"; return " ORDER BY " + string.Join(",", query.SortBy.Select(i => MapOrderByField(i) + " " + sortOrder).ToArray()); }
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, CancellationToken cancellationToken) { var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IsAiring = query.IsAiring, IsMovie = query.IsMovie, IsSports = query.IsSports }; if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } IEnumerable<LiveTvProgram> programs = _libraryManager.GetItems(internalQuery).Items.Cast<LiveTvProgram>(); var user = _userManager.GetUserById(query.UserId); // Avoid implicitly captured closure var currentUser = user; programs = programs.Where(i => i.IsVisible(currentUser)); var programList = programs.ToList(); var genres = programList.SelectMany(i => i.Genres) .DistinctNames() .Select(i => _libraryManager.GetGenre(i)) .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); programs = programList.OrderBy(i => i.HasImage(ImageType.Primary) ? 0 : 1) .ThenByDescending(i => GetRecommendationScore(i, user.Id, genres)) .ThenBy(i => i.StartDate); if (query.Limit.HasValue) { programs = programs.Take(query.Limit.Value) .OrderBy(i => i.StartDate); } programList = programs.ToList(); var returnArray = programList.ToArray(); var result = new QueryResult<LiveTvProgram> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }
private async Task<IEnumerable<BaseItem>> GetItemsForSync(SyncCategory category, string parentId, User user) { var parent = string.IsNullOrWhiteSpace(parentId) ? user.RootFolder : (Folder)_libraryManager.GetItemById(parentId); InternalItemsQuery query; switch (category) { case SyncCategory.Latest: query = new InternalItemsQuery { IsFolder = false, SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName }, SortOrder = SortOrder.Descending, Recursive = true }; break; case SyncCategory.Resume: query = new InternalItemsQuery { IsFolder = false, SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName }, SortOrder = SortOrder.Descending, Recursive = true, IsResumable = true, MediaTypes = new[] { MediaType.Video } }; break; case SyncCategory.NextUp: return _tvSeriesManager.GetNextUp(new NextUpQuery { ParentId = parentId, UserId = user.Id.ToString("N") }).Items; default: throw new ArgumentException("Unrecognized category: " + category); } query.User = user; var result = await parent.GetItems(query).ConfigureAwait(false); return result.Items; }
private async Task <QueryResult <BaseItem> > GetMusicFavorites(Folder parent, User user, InternalItemsQuery query) { var list = new List <BaseItem>(); var category = "music"; list.Add(await GetUserView(category, CollectionType.MusicFavoriteAlbums, user, "0", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MusicFavoriteArtists, user, "1", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MusicFavoriteSongs, user, "2", parent).ConfigureAwait(false)); return(GetResult(list, query)); }
public override List <BaseItem> GetChildren(User user, bool includeLinkedChildren, InternalItemsQuery query) { if (query == null) { query = new InternalItemsQuery(user); } query.EnableTotalRecordCount = false; var result = GetItemList(query); return(result.ToList()); }
private QueryResult <BaseItem> GetMusicSongs(Folder parent, User user, InternalItemsQuery query) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }).Where(i => i is Audio.Audio), query)); }
public virtual Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) { var user = query.User; var items = query.Recursive ? GetRecursiveChildren(user) : GetChildren(user, true); var result = SortAndFilter(items, query); return Task.FromResult(result); }
private async Task <QueryResult <BaseItem> > GetTvView(Folder parent, User user, InternalItemsQuery query) { if (query.Recursive) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Series || i is Season || i is Episode), query)); } var list = new List <BaseItem>(); var category = "tvshows"; list.Add(await GetUserView(category, CollectionType.TvResume, user, "0", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.TvNextUp, user, "1", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.TvLatest, user, "2", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.TvShowSeries, user, "3", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.TvFavoriteSeries, user, "4", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.TvFavoriteEpisodes, user, "5", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.TvGenres, user, "5", parent).ConfigureAwait(false)); return(GetResult(list, query)); }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, IsMovie = query.IsMovie, IsSports = query.IsSports, IsKids = query.IsKids, Genres = query.Genres, StartIndex = query.StartIndex, Limit = query.Limit, SortBy = query.SortBy, SortOrder = query.SortOrder ?? SortOrder.Ascending }; if (user != null) { internalQuery.MaxParentalRating = user.Policy.MaxParentalRating; if (user.Policy.BlockUnratedItems.Contains(UnratedItem.LiveTvProgram)) { internalQuery.HasParentalRating = true; } } if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } var queryResult = _libraryManager.QueryItems(internalQuery); var returnArray = queryResult.Items .Cast<LiveTvProgram>() .Select(i => new Tuple<BaseItemDto, string, string>(_dtoService.GetBaseItemDto(i, options, user), i.ServiceName, i.ExternalId)) .ToArray(); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); var result = new QueryResult<BaseItemDto> { Items = returnArray.Select(i => i.Item1).ToArray(), TotalRecordCount = queryResult.TotalRecordCount }; return result; }
private QueryResult <BaseItem> GetMovieCollections(Folder parent, User user, InternalItemsQuery query) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is BoxSet), query)); }
public async Task <QueryResult <BaseItem> > GetUserItems(Folder parent, string viewType, InternalItemsQuery query) { var user = query.User; switch (viewType) { case CollectionType.Channels: { var result = await _channelManager.GetChannelsInternal(new ChannelQuery { UserId = user.Id.ToString("N"), Limit = query.Limit, StartIndex = query.StartIndex }, CancellationToken.None).ConfigureAwait(false); return(GetResult(result)); } case CollectionType.LiveTvChannels: { var result = await _liveTvManager.GetInternalChannels(new LiveTvChannelQuery { UserId = query.User.Id.ToString("N"), Limit = query.Limit, StartIndex = query.StartIndex }, CancellationToken.None).ConfigureAwait(false); return(GetResult(result)); } case CollectionType.LiveTvNowPlaying: { var result = await _liveTvManager.GetRecommendedProgramsInternal(new RecommendedProgramQuery { UserId = query.User.Id.ToString("N"), Limit = query.Limit, IsAiring = true }, CancellationToken.None).ConfigureAwait(false); return(GetResult(result)); } case CollectionType.LiveTvRecordingGroups: { var result = await _liveTvManager.GetInternalRecordings(new RecordingQuery { UserId = query.User.Id.ToString("N"), Status = RecordingStatus.Completed, Limit = query.Limit, StartIndex = query.StartIndex }, CancellationToken.None).ConfigureAwait(false); return(GetResult(result)); } case CollectionType.LiveTv: { var result = await GetLiveTvFolders(user).ConfigureAwait(false); return(GetResult(result, query)); } case CollectionType.Folders: return(GetResult(user.RootFolder.GetChildren(user, true), query)); case CollectionType.Games: return(await GetGameView(user, parent, query).ConfigureAwait(false)); case CollectionType.BoxSets: return(GetResult(GetMediaFolders(user).SelectMany(i => i.GetRecursiveChildren(user)).OfType <BoxSet>(), query)); case CollectionType.TvShows: return(await GetTvView(parent, user, query).ConfigureAwait(false)); case CollectionType.Music: return(await GetMusicFolders(parent, user, query).ConfigureAwait(false)); case CollectionType.Movies: return(await GetMovieFolders(parent, user, query).ConfigureAwait(false)); case CollectionType.GameGenres: return(GetGameGenres(parent, user, query)); case CollectionType.GameSystems: return(GetGameSystems(parent, user, query)); case CollectionType.LatestGames: return(GetLatestGames(parent, user, query)); case CollectionType.RecentlyPlayedGames: return(GetRecentlyPlayedGames(parent, user, query)); case CollectionType.GameFavorites: return(GetFavoriteGames(parent, user, query)); case CollectionType.TvShowSeries: return(GetTvSeries(parent, user, query)); case CollectionType.TvGenres: return(GetTvGenres(parent, user, query)); case CollectionType.TvResume: return(GetTvResume(parent, user, query)); case CollectionType.TvNextUp: return(GetTvNextUp(parent, query)); case CollectionType.TvLatest: return(GetTvLatest(parent, user, query)); case CollectionType.MovieFavorites: return(GetFavoriteMovies(parent, user, query)); case CollectionType.MovieLatest: return(GetMovieLatest(parent, user, query)); case CollectionType.MovieGenres: return(GetMovieGenres(parent, user, query)); case CollectionType.MovieResume: return(GetMovieResume(parent, user, query)); case CollectionType.MovieMovies: return(GetMovieMovies(parent, user, query)); case CollectionType.MovieCollections: return(GetMovieCollections(parent, user, query)); case CollectionType.MusicLatest: return(GetMusicLatest(parent, user, query)); case CollectionType.MusicAlbums: return(GetMusicAlbums(parent, user, query)); case CollectionType.MusicAlbumArtists: return(GetMusicAlbumArtists(parent, user, query)); case CollectionType.MusicArtists: return(GetMusicArtists(parent, user, query)); case CollectionType.MusicSongs: return(GetMusicSongs(parent, user, query)); case CollectionType.TvFavoriteEpisodes: return(GetFavoriteEpisodes(parent, user, query)); case CollectionType.TvFavoriteSeries: return(GetFavoriteSeries(parent, user, query)); case CollectionType.MusicFavorites: return(await GetMusicFavorites(parent, user, query).ConfigureAwait(false)); case CollectionType.MusicFavoriteAlbums: return(GetFavoriteAlbums(parent, user, query)); case CollectionType.MusicFavoriteArtists: return(GetFavoriteArtists(parent, user, query)); case CollectionType.MusicFavoriteSongs: return(GetFavoriteSongs(parent, user, query)); default: return(GetResult(GetMediaFolders(user).SelectMany(i => i.GetChildren(user, true)), query)); } }
private QueryResult <BaseItem> GetFavoriteAlbums(Folder parent, User user, InternalItemsQuery query) { query.IsFavorite = true; return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).Where(i => i is MusicAlbum), query)); }
private QueryResult <BaseItem> GetFavoriteEpisodes(Folder parent, User user, InternalItemsQuery query) { query.IsFavorite = true; return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Episode), query)); }
private async Task <QueryResult <BaseItem> > GetMovieFolders(Folder parent, User user, InternalItemsQuery query) { if (query.Recursive) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie || i is BoxSet), query)); } var list = new List <BaseItem>(); var category = "movies"; list.Add(await GetUserView(category, CollectionType.MovieResume, user, "0", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MovieLatest, user, "1", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MovieMovies, user, "2", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MovieCollections, user, "3", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MovieFavorites, user, "4", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.MovieGenres, user, "5", parent).ConfigureAwait(false)); return(GetResult(list, query)); }
public QueryResult<Guid> GetItemIds(InternalItemsQuery query) { if (query == null) { throw new ArgumentNullException("query"); } CheckDisposed(); using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select guid from TypedBaseItems"; var whereClauses = GetWhereClauses(query, cmd, false); var whereTextWithoutPaging = whereClauses.Count == 0 ? string.Empty : " where " + string.Join(" AND ", whereClauses.ToArray()); whereClauses = GetWhereClauses(query, cmd, true); var whereText = whereClauses.Count == 0 ? string.Empty : " where " + string.Join(" AND ", whereClauses.ToArray()); cmd.CommandText += whereText; cmd.CommandText += GetOrderByText(query); if (query.Limit.HasValue) { cmd.CommandText += " LIMIT " + query.Limit.Value.ToString(CultureInfo.InvariantCulture); } cmd.CommandText += "; select count (guid) from TypedBaseItems" + whereTextWithoutPaging; var list = new List<Guid>(); var count = 0; _logger.Debug(cmd.CommandText); using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { while (reader.Read()) { list.Add(reader.GetGuid(0)); } if (reader.NextResult() && reader.Read()) { count = reader.GetInt32(0); } } return new QueryResult<Guid>() { Items = list.ToArray(), TotalRecordCount = count }; } }
protected QueryResult<BaseItem> PostFilterAndSort(IEnumerable<BaseItem> items, InternalItemsQuery query) { return UserViewBuilder.PostFilterAndSort(items, this, null, query, LibraryManager); }
private async Task <QueryResult <BaseItem> > GetGameView(User user, Folder parent, InternalItemsQuery query) { if (query.Recursive) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }), query)); } var list = new List <BaseItem>(); var category = "games"; list.Add(await GetUserView(category, CollectionType.LatestGames, user, "0", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.RecentlyPlayedGames, user, "1", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.GameFavorites, user, "2", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.GameSystems, user, "3", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.GameGenres, user, "4", parent).ConfigureAwait(false)); return(GetResult(list, query)); }
private QueryResult <BaseItem> GetMusicAlbumArtists(Folder parent, User user, InternalItemsQuery query) { var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }) .Where(i => !i.IsFolder) .OfType <IHasAlbumArtist>() .SelectMany(i => i.AlbumArtists) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(i => { try { return(_libraryManager.GetArtist(i)); } catch { // Already logged at lower levels return(null); } }) .Where(i => i != null); return(GetResult(artists, query)); }
public Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) { if (query.ItemIds.Length > 0) { var specificItems = query.ItemIds.Select(LibraryManager.GetItemById).Where(i => i != null).ToList(); return Task.FromResult(PostFilterAndSort(specificItems, query)); } return GetItemsInternal(query); }
private QueryResult <BaseItem> GetRecentlyPlayedGames(Folder parent, User user, InternalItemsQuery query) { query.IsPlayed = true; query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName }; query.SortOrder = SortOrder.Descending; return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType <Game>(), GetSpecialItemsLimit(), query)); }
public QueryResult<BaseItem> QueryRecursive(InternalItemsQuery query) { var user = query.User; if (RequiresPostFiltering(query)) { IEnumerable<BaseItem> items; Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); if (query.User == null) { items = GetRecursiveChildren(filter); } else { items = GetRecursiveChildren(user, filter); } return PostFilterAndSort(items, query); } if (!(this is UserRootFolder) && !(this is AggregateFolder)) { query.ParentId = query.ParentId ?? Id; } return LibraryManager.GetItemsResult(query); }
private QueryResult <BaseItem> GetFavoriteGames(Folder parent, User user, InternalItemsQuery query) { query.IsFavorite = true; return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType <Game>(), query)); }
/// <summary> Gets items query. </summary> /// <param name="request"> The request. </param> /// <param name="user"> The user. </param> /// <returns> The items query. </returns> private InternalItemsQuery GetItemsQuery(BaseReportRequest request, User user) { var query = new InternalItemsQuery { User = user, IsPlayed = request.IsPlayed, MediaTypes = request.GetMediaTypes(), IncludeItemTypes = request.GetIncludeItemTypes(), ExcludeItemTypes = request.GetExcludeItemTypes(), Recursive = request.Recursive, SortBy = request.GetOrderBy(), SortOrder = request.SortOrder ?? SortOrder.Ascending, IsFavorite = request.IsFavorite, Limit = request.Limit, StartIndex = request.StartIndex, IsMissing = request.IsMissing, IsVirtualUnaired = request.IsVirtualUnaired, IsUnaired = request.IsUnaired, CollapseBoxSetItems = request.CollapseBoxSetItems, NameLessThan = request.NameLessThan, NameStartsWith = request.NameStartsWith, NameStartsWithOrGreater = request.NameStartsWithOrGreater, HasImdbId = request.HasImdbId, IsYearMismatched = request.IsYearMismatched, IsPlaceHolder = request.IsPlaceHolder, IsLocked = request.IsLocked, IsInBoxSet = request.IsInBoxSet, IsHD = request.IsHD, Is3D = request.Is3D, HasTvdbId = request.HasTvdbId, HasTmdbId = request.HasTmdbId, HasOverview = request.HasOverview, HasOfficialRating = request.HasOfficialRating, HasParentalRating = request.HasParentalRating, HasSpecialFeature = request.HasSpecialFeature, HasSubtitles = request.HasSubtitles, HasThemeSong = request.HasThemeSong, HasThemeVideo = request.HasThemeVideo, HasTrailer = request.HasTrailer, Tags = request.GetTags(), OfficialRatings = request.GetOfficialRatings(), Genres = request.GetGenres(), Studios = request.GetStudios(), StudioIds = request.GetStudioIds(), Person = request.Person, PersonIds = request.GetPersonIds(), PersonTypes = request.GetPersonTypes(), Years = request.GetYears(), ImageTypes = request.GetImageTypes().ToArray(), VideoTypes = request.GetVideoTypes().ToArray(), AdjacentTo = request.AdjacentTo, ItemIds = request.GetItemIds(), MinPlayers = request.MinPlayers, MaxPlayers = request.MaxPlayers, MinCommunityRating = request.MinCommunityRating, MinCriticRating = request.MinCriticRating, ParentIndexNumber = request.ParentIndexNumber, AiredDuringSeason = request.AiredDuringSeason, AlbumArtistStartsWithOrGreater = request.AlbumArtistStartsWithOrGreater }; if (!string.IsNullOrWhiteSpace(request.Ids)) { query.CollapseBoxSetItems = false; } foreach (var filter in request.GetFilters()) { switch (filter) { case ItemFilter.Dislikes: query.IsLiked = false; break; case ItemFilter.IsFavorite: query.IsFavorite = true; break; case ItemFilter.IsFavoriteOrLikes: query.IsFavoriteOrLiked = true; break; case ItemFilter.IsFolder: query.IsFolder = true; break; case ItemFilter.IsNotFolder: query.IsFolder = false; break; case ItemFilter.IsPlayed: query.IsPlayed = true; break; case ItemFilter.IsRecentlyAdded: break; case ItemFilter.IsResumable: query.IsResumable = true; break; case ItemFilter.IsUnplayed: query.IsPlayed = false; break; case ItemFilter.Likes: query.IsLiked = true; break; } } if (!string.IsNullOrEmpty(request.MinPremiereDate)) { query.MinPremiereDate = DateTime.Parse(request.MinPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); } if (!string.IsNullOrEmpty(request.MaxPremiereDate)) { query.MaxPremiereDate = DateTime.Parse(request.MaxPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); } // Filter by Series Status if (!string.IsNullOrEmpty(request.SeriesStatus)) { query.SeriesStatuses = request.SeriesStatus.Split(',').Select(d => (SeriesStatus)Enum.Parse(typeof(SeriesStatus), d, true)).ToArray(); } // Filter by Series AirDays if (!string.IsNullOrEmpty(request.AirDays)) { query.AirDays = request.AirDays.Split(',').Select(d => (DayOfWeek)Enum.Parse(typeof(DayOfWeek), d, true)).ToArray(); } // ExcludeLocationTypes if (!string.IsNullOrEmpty(request.ExcludeLocationTypes)) { query.ExcludeLocationTypes = request.ExcludeLocationTypes.Split(',').Select(d => (LocationType)Enum.Parse(typeof(LocationType), d, true)).ToArray(); } if (!string.IsNullOrEmpty(request.LocationTypes)) { query.LocationTypes = request.LocationTypes.Split(',').Select(d => (LocationType)Enum.Parse(typeof(LocationType), d, true)).ToArray(); } // Min official rating if (!string.IsNullOrWhiteSpace(request.MinOfficialRating)) { query.MinParentalRating = _localization.GetRatingLevel(request.MinOfficialRating); } // Max official rating if (!string.IsNullOrWhiteSpace(request.MaxOfficialRating)) { query.MaxParentalRating = _localization.GetRatingLevel(request.MaxOfficialRating); } // Artists if (!string.IsNullOrEmpty(request.ArtistIds)) { var artistIds = request.ArtistIds.Split(new[] { '|', ',' }); var artistItems = artistIds.Select(_libraryManager.GetItemById).Where(i => i != null).ToList(); query.ArtistNames = artistItems.Select(i => i.Name).ToArray(); } // Artists if (!string.IsNullOrEmpty(request.Artists)) { query.ArtistNames = request.Artists.Split('|'); } // Albums if (!string.IsNullOrEmpty(request.Albums)) { query.AlbumNames = request.Albums.Split('|'); } if (request.HasQueryLimit == false) { query.StartIndex = null; query.Limit = null; } return query; }
private QueryResult <BaseItem> GetTvSeries(Folder parent, User user, InternalItemsQuery query) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).OfType <Series>(), query)); }
public IEnumerable <BaseItem> GetTaggedItems(InternalItemsQuery query) { query.Studios = new[] { Name }; return(LibraryManager.GetItemList(query)); }
private QueryResult <BaseItem> GetGameSystems(Folder parent, User user, InternalItemsQuery query) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType <GameSystem>(), query)); }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, CancellationToken cancellationToken) { var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, IsMovie = query.IsMovie, IsSports = query.IsSports }; if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } IEnumerable<LiveTvProgram> programs = _libraryManager.GetItems(internalQuery).Items.Cast<LiveTvProgram>(); // Apply genre filter if (query.Genres.Length > 0) { programs = programs.Where(p => p.Genres.Any(g => query.Genres.Contains(g, StringComparer.OrdinalIgnoreCase))); } var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); if (user != null) { // Avoid implicitly captured closure var currentUser = user; programs = programs.Where(i => i.IsVisible(currentUser)); } programs = _libraryManager.Sort(programs, user, query.SortBy, query.SortOrder ?? SortOrder.Ascending) .Cast<LiveTvProgram>(); var programList = programs.ToList(); IEnumerable<LiveTvProgram> returnPrograms = programList; if (query.StartIndex.HasValue) { returnPrograms = returnPrograms.Skip(query.StartIndex.Value); } if (query.Limit.HasValue) { returnPrograms = returnPrograms.Take(query.Limit.Value); } var returnArray = returnPrograms .Select(i => _dtoService.GetBaseItemDto(i, new DtoOptions(), user)) .ToArray(); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); var result = new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = programList.Count }; return result; }
private QueryResult <BaseItem> GetResult <T>(IEnumerable <T> items, InternalItemsQuery query) where T : BaseItem { return(GetResult(items, null, query)); }
/// <summary> Gets items query. </summary> /// <param name="request"> The request. </param> /// <param name="user"> The user. </param> /// <returns> The items query. </returns> private InternalItemsQuery GetItemsQuery(BaseReportRequest request, User user) { var query = new InternalItemsQuery { User = user, IsPlayed = request.IsPlayed, MediaTypes = request.GetMediaTypes(), IncludeItemTypes = request.GetIncludeItemTypes(), ExcludeItemTypes = request.GetExcludeItemTypes(), Recursive = request.Recursive, SortBy = request.GetOrderBy(), SortOrder = request.SortOrder ?? SortOrder.Ascending, Filter = i => ApplyAdditionalFilters(request, i, user, _libraryManager), Limit = request.Limit, StartIndex = request.StartIndex, IsMissing = request.IsMissing, IsVirtualUnaired = request.IsVirtualUnaired, IsUnaired = request.IsUnaired, CollapseBoxSetItems = request.CollapseBoxSetItems, NameLessThan = request.NameLessThan, NameStartsWith = request.NameStartsWith, NameStartsWithOrGreater = request.NameStartsWithOrGreater, HasImdbId = request.HasImdbId, IsYearMismatched = request.IsYearMismatched, IsPlaceHolder = request.IsPlaceHolder, IsLocked = request.IsLocked, IsInBoxSet = request.IsInBoxSet, IsHD = request.IsHD, Is3D = request.Is3D, HasTvdbId = request.HasTvdbId, HasTmdbId = request.HasTmdbId, HasOverview = request.HasOverview, HasOfficialRating = request.HasOfficialRating, HasParentalRating = request.HasParentalRating, HasSpecialFeature = request.HasSpecialFeature, HasSubtitles = request.HasSubtitles, HasThemeSong = request.HasThemeSong, HasThemeVideo = request.HasThemeVideo, HasTrailer = request.HasTrailer, Tags = request.GetTags(), OfficialRatings = request.GetOfficialRatings(), Genres = request.GetGenres(), Studios = request.GetStudios(), StudioIds = request.GetStudioIds(), Person = request.Person, PersonIds = request.GetPersonIds(), PersonTypes = request.GetPersonTypes(), Years = request.GetYears(), ImageTypes = request.GetImageTypes().ToArray(), VideoTypes = request.GetVideoTypes().ToArray(), AdjacentTo = request.AdjacentTo, ItemIds = request.GetItemIds(), MinPlayers = request.MinPlayers, MaxPlayers = request.MaxPlayers, MinCommunityRating = request.MinCommunityRating, MinCriticRating = request.MinCriticRating }; if (!string.IsNullOrWhiteSpace(request.Ids)) { query.CollapseBoxSetItems = false; } foreach (var filter in request.GetFilters()) { switch (filter) { case ItemFilter.Dislikes: query.IsLiked = false; break; case ItemFilter.IsFavorite: query.IsFavorite = true; break; case ItemFilter.IsFavoriteOrLikes: query.IsFavoriteOrLiked = true; break; case ItemFilter.IsFolder: query.IsFolder = true; break; case ItemFilter.IsNotFolder: query.IsFolder = false; break; case ItemFilter.IsPlayed: query.IsPlayed = true; break; case ItemFilter.IsRecentlyAdded: break; case ItemFilter.IsResumable: query.IsResumable = true; break; case ItemFilter.IsUnplayed: query.IsPlayed = false; break; case ItemFilter.Likes: query.IsLiked = true; break; } } if (request.HasQueryLimit) query.Limit = request.Limit; return query; }
private static bool Filter(BaseItem item, User user, InternalItemsQuery query, IUserDataManager userDataManager) { if (query.MediaTypes.Length > 0 && !query.MediaTypes.Contains(item.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase)) { return(false); } if (query.IncludeItemTypes.Length > 0 && !query.IncludeItemTypes.Contains(item.GetClientTypeName(), StringComparer.OrdinalIgnoreCase)) { return(false); } if (query.ExcludeItemTypes.Length > 0 && query.ExcludeItemTypes.Contains(item.GetClientTypeName(), StringComparer.OrdinalIgnoreCase)) { return(false); } if (query.IsFolder.HasValue && query.IsFolder.Value != item.IsFolder) { return(false); } if (query.Filter != null && !query.Filter(item, user)) { return(false); } UserItemData userData = null; if (query.IsLiked.HasValue) { userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey()); if (!userData.Likes.HasValue || userData.Likes != query.IsLiked.Value) { return(false); } } if (query.IsFavoriteOrLiked.HasValue) { userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey()); var isFavoriteOrLiked = userData.IsFavorite || (userData.Likes ?? false); if (isFavoriteOrLiked != query.IsFavoriteOrLiked.Value) { return(false); } } if (query.IsFavorite.HasValue) { userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey()); if (userData.IsFavorite != query.IsFavorite.Value) { return(false); } } if (query.IsResumable.HasValue) { userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey()); var isResumable = userData.PlaybackPositionTicks > 0; if (isResumable != query.IsResumable.Value) { return(false); } } if (query.IsPlayed.HasValue) { if (item.IsPlayed(user) != query.IsPlayed.Value) { return(false); } } return(true); }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var internalQuery = new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, IsMovie = query.IsMovie, IsSports = query.IsSports, IsKids = query.IsKids, Genres = query.Genres, StartIndex = query.StartIndex, Limit = query.Limit, SortBy = query.SortBy, SortOrder = query.SortOrder ?? SortOrder.Ascending, EnableTotalRecordCount = query.EnableTotalRecordCount }; if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } var queryResult = _libraryManager.QueryItems(internalQuery); var returnArray = _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ToArray(); var result = new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = queryResult.TotalRecordCount }; return result; }
public IList<BaseItem> GetTaggedItems(InternalItemsQuery query) { query.StudioIds = new[] { Id }; return LibraryManager.GetItemList(query); }
public List<Guid> GetItemIdsList(InternalItemsQuery query) { if (query == null) { throw new ArgumentNullException("query"); } CheckDisposed(); using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select guid from TypedBaseItems"; var whereClauses = GetWhereClauses(query, cmd, true); var whereText = whereClauses.Count == 0 ? string.Empty : " where " + string.Join(" AND ", whereClauses.ToArray()); cmd.CommandText += whereText; cmd.CommandText += GetOrderByText(query); if (query.Limit.HasValue) { cmd.CommandText += " LIMIT " + query.Limit.Value.ToString(CultureInfo.InvariantCulture); } var list = new List<Guid>(); _logger.Debug(cmd.CommandText); using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { while (reader.Read()) { list.Add(reader.GetGuid(0)); } } return list; } }
private QueryResult <BaseItem> GetTvGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) { query.Recursive = true; query.Parent = queryParent; query.GenreIds = new[] { displayParent.Id }; query.SetUser(user); query.IncludeItemTypes = new[] { typeof(Series).Name }; return(_libraryManager.GetItemsResult(query)); }
private List<string> GetWhereClauses(InternalItemsQuery query, IDbCommand cmd, bool addPaging) { var whereClauses = new List<string>(); if (query.IsCurrentSchema.HasValue) { if (query.IsCurrentSchema.Value) { whereClauses.Add("(SchemaVersion not null AND SchemaVersion=@SchemaVersion)"); } else { whereClauses.Add("(SchemaVersion is null or SchemaVersion<>@SchemaVersion)"); } cmd.Parameters.Add(cmd, "@SchemaVersion", DbType.Int32).Value = LatestSchemaVersion; } if (query.IsOffline.HasValue) { whereClauses.Add("IsOffline=@IsOffline"); cmd.Parameters.Add(cmd, "@IsOffline", DbType.Boolean).Value = query.IsOffline; } if (query.LocationType.HasValue) { whereClauses.Add("LocationType=@LocationType"); cmd.Parameters.Add(cmd, "@LocationType", DbType.String).Value = query.LocationType.Value; } if (query.IsMovie.HasValue) { whereClauses.Add("IsMovie=@IsMovie"); cmd.Parameters.Add(cmd, "@IsMovie", DbType.Boolean).Value = query.IsMovie; } if (query.IsKids.HasValue) { whereClauses.Add("IsKids=@IsKids"); cmd.Parameters.Add(cmd, "@IsKids", DbType.Boolean).Value = query.IsKids; } if (query.IsSports.HasValue) { whereClauses.Add("IsSports=@IsSports"); cmd.Parameters.Add(cmd, "@IsSports", DbType.Boolean).Value = query.IsSports; } var includeTypes = query.IncludeItemTypes.SelectMany(MapIncludeItemTypes).ToArray(); if (includeTypes.Length == 1) { whereClauses.Add("type=@type"); cmd.Parameters.Add(cmd, "@type", DbType.String).Value = includeTypes[0]; } else if (includeTypes.Length > 1) { var inClause = string.Join(",", includeTypes.Select(i => "'" + i + "'").ToArray()); whereClauses.Add(string.Format("type in ({0})", inClause)); } var excludeTypes = query.ExcludeItemTypes.SelectMany(MapIncludeItemTypes).ToArray(); if (excludeTypes.Length == 1) { whereClauses.Add("type<>@type"); cmd.Parameters.Add(cmd, "@type", DbType.String).Value = excludeTypes[0]; } else if (excludeTypes.Length > 1) { var inClause = string.Join(",", excludeTypes.Select(i => "'" + i + "'").ToArray()); whereClauses.Add(string.Format("type not in ({0})", inClause)); } if (query.ChannelIds.Length == 1) { whereClauses.Add("ChannelId=@ChannelId"); cmd.Parameters.Add(cmd, "@ChannelId", DbType.String).Value = query.ChannelIds[0]; } if (query.ChannelIds.Length > 1) { var inClause = string.Join(",", query.ChannelIds.Select(i => "'" + i + "'").ToArray()); whereClauses.Add(string.Format("ChannelId in ({0})", inClause)); } if (query.ParentId.HasValue) { whereClauses.Add("ParentId=@ParentId"); cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = query.ParentId.Value; } if (query.MinEndDate.HasValue) { whereClauses.Add("EndDate>=@MinEndDate"); cmd.Parameters.Add(cmd, "@MinEndDate", DbType.Date).Value = query.MinEndDate.Value; } if (query.MaxEndDate.HasValue) { whereClauses.Add("EndDate<=@MaxEndDate"); cmd.Parameters.Add(cmd, "@MaxEndDate", DbType.Date).Value = query.MaxEndDate.Value; } if (query.MinStartDate.HasValue) { whereClauses.Add("StartDate>=@MinStartDate"); cmd.Parameters.Add(cmd, "@MinStartDate", DbType.Date).Value = query.MinStartDate.Value; } if (query.MaxStartDate.HasValue) { whereClauses.Add("StartDate<=@MaxStartDate"); cmd.Parameters.Add(cmd, "@MaxStartDate", DbType.Date).Value = query.MaxStartDate.Value; } if (query.IsAiring.HasValue) { if (query.IsAiring.Value) { whereClauses.Add("StartDate<=@MaxStartDate"); cmd.Parameters.Add(cmd, "@MaxStartDate", DbType.Date).Value = DateTime.UtcNow; whereClauses.Add("EndDate>=@MinEndDate"); cmd.Parameters.Add(cmd, "@MinEndDate", DbType.Date).Value = DateTime.UtcNow; } else { whereClauses.Add("(StartDate>@IsAiringDate OR EndDate < @IsAiringDate)"); cmd.Parameters.Add(cmd, "@IsAiringDate", DbType.Date).Value = DateTime.UtcNow; } } if (!string.IsNullOrWhiteSpace(query.Person)) { whereClauses.Add("Guid in (select ItemId from People where Name=@PersonName)"); cmd.Parameters.Add(cmd, "@PersonName", DbType.String).Value = query.Person; } if (!string.IsNullOrWhiteSpace(query.NameContains)) { whereClauses.Add("Name like @NameContains"); cmd.Parameters.Add(cmd, "@NameContains", DbType.String).Value = "%" + query.NameContains + "%"; } if (query.Genres.Length > 0) { var genres = new List<string>(); var index = 0; foreach (var genre in query.Genres) { genres.Add("Genres like @Genres" + index); cmd.Parameters.Add(cmd, "@Genres" + index, DbType.String).Value = "%" + genre + "%"; index++; } var genreCaluse = "(" + string.Join(" OR ", genres.ToArray()) + ")"; whereClauses.Add(genreCaluse); } if (query.MaxParentalRating.HasValue) { whereClauses.Add("(ParentalRatingValue is NULL OR ParentalRatingValue<=@MaxParentalRating)"); cmd.Parameters.Add(cmd, "@MaxParentalRating", DbType.Int32).Value = query.MaxParentalRating.Value; } if (query.HasParentalRating.HasValue) { if (query.HasParentalRating.Value) { whereClauses.Add("ParentalRatingValue NOT NULL"); } else { whereClauses.Add("ParentalRatingValue IS NULL"); } } if (query.HasDeadParentId.HasValue) { if (query.HasDeadParentId.Value) { whereClauses.Add("ParentId NOT NULL AND ParentId NOT IN (select guid from TypedBaseItems)"); } } if (addPaging) { if (query.StartIndex.HasValue && query.StartIndex.Value > 0) { var pagingWhereText = whereClauses.Count == 0 ? string.Empty : " where " + string.Join(" AND ", whereClauses.ToArray()); var orderBy = GetOrderByText(query); whereClauses.Add(string.Format("guid NOT IN (SELECT guid FROM TypedBaseItems {0}" + orderBy + " LIMIT {1})", pagingWhereText, query.StartIndex.Value.ToString(CultureInfo.InvariantCulture))); } } return whereClauses; }
public QueryResult <BaseItem> GetUserItems(Folder queryParent, Folder displayParent, string viewType, InternalItemsQuery query) { var user = query.User; //if (query.IncludeItemTypes != null && // query.IncludeItemTypes.Length == 1 && // string.Equals(query.IncludeItemTypes[0], "Playlist", StringComparison.OrdinalIgnoreCase)) //{ // if (!string.Equals(viewType, CollectionType.Playlists, StringComparison.OrdinalIgnoreCase)) // { // return await FindPlaylists(queryParent, user, query).ConfigureAwait(false); // } //} switch (viewType) { case CollectionType.Folders: return(GetResult(_libraryManager.GetUserRootFolder().GetChildren(user, true), queryParent, query)); case CollectionType.TvShows: return(GetTvView(queryParent, user, query)); case CollectionType.Movies: return(GetMovieFolders(queryParent, user, query)); case SpecialFolder.TvShowSeries: return(GetTvSeries(queryParent, user, query)); case SpecialFolder.TvGenres: return(GetTvGenres(queryParent, user, query)); case SpecialFolder.TvGenre: return(GetTvGenreItems(queryParent, displayParent, user, query)); case SpecialFolder.TvResume: return(GetTvResume(queryParent, user, query)); case SpecialFolder.TvNextUp: return(GetTvNextUp(queryParent, query)); case SpecialFolder.TvLatest: return(GetTvLatest(queryParent, user, query)); case SpecialFolder.MovieFavorites: return(GetFavoriteMovies(queryParent, user, query)); case SpecialFolder.MovieLatest: return(GetMovieLatest(queryParent, user, query)); case SpecialFolder.MovieGenres: return(GetMovieGenres(queryParent, user, query)); case SpecialFolder.MovieGenre: return(GetMovieGenreItems(queryParent, displayParent, user, query)); case SpecialFolder.MovieResume: return(GetMovieResume(queryParent, user, query)); case SpecialFolder.MovieMovies: return(GetMovieMovies(queryParent, user, query)); case SpecialFolder.MovieCollections: return(GetMovieCollections(queryParent, user, query)); case SpecialFolder.TvFavoriteEpisodes: return(GetFavoriteEpisodes(queryParent, user, query)); case SpecialFolder.TvFavoriteSeries: return(GetFavoriteSeries(queryParent, user, query)); default: { if (queryParent is UserView) { return(GetResult(GetMediaFolders(user).OfType <Folder>().SelectMany(i => i.GetChildren(user, true)), queryParent, query)); } return(queryParent.GetItems(query)); } } }
public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); if (user != null && !IsLiveTvEnabled(user)) { return new QueryResult<BaseItem>(); } await RefreshRecordings(cancellationToken).ConfigureAwait(false); var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvVideoRecording).Name, typeof(LiveTvAudioRecording).Name } }; if (!string.IsNullOrEmpty(query.ChannelId)) { internalQuery.ChannelIds = new[] { query.ChannelId }; } var queryResult = _libraryManager.GetItems(internalQuery); IEnumerable<ILiveTvRecording> recordings = queryResult.Items.Cast<ILiveTvRecording>(); if (!string.IsNullOrEmpty(query.Id)) { var guid = new Guid(query.Id); recordings = recordings .Where(i => i.Id == guid); } if (!string.IsNullOrEmpty(query.GroupId)) { var guid = new Guid(query.GroupId); recordings = recordings.Where(i => GetRecordingGroupIds(i).Contains(guid)); } if (query.IsInProgress.HasValue) { var val = query.IsInProgress.Value; recordings = recordings.Where(i => (i.Status == RecordingStatus.InProgress) == val); } if (query.Status.HasValue) { var val = query.Status.Value; recordings = recordings.Where(i => (i.Status == val)); } if (!string.IsNullOrEmpty(query.SeriesTimerId)) { var guid = new Guid(query.SeriesTimerId); recordings = recordings .Where(i => _tvDtoService.GetInternalSeriesTimerId(i.ServiceName, i.SeriesTimerId) == guid); } recordings = recordings.OrderByDescending(i => i.StartDate); var entityList = recordings.ToList(); IEnumerable<ILiveTvRecording> entities = entityList; if (query.StartIndex.HasValue) { entities = entities.Skip(query.StartIndex.Value); } if (query.Limit.HasValue) { entities = entities.Take(query.Limit.Value); } return new QueryResult<BaseItem> { Items = entities.Cast<BaseItem>().ToArray(), TotalRecordCount = entityList.Count }; }
public static bool FilterItem(BaseItem item, InternalItemsQuery query) { return(Filter(item, query.User, query, BaseItem.UserDataManager, BaseItem.LibraryManager)); }
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, CancellationToken cancellationToken) { var user = _userManager.GetUserById(query.UserId); var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IsAiring = query.IsAiring, IsMovie = query.IsMovie, IsSports = query.IsSports, IsKids = query.IsKids }; if (user != null) { internalQuery.MaxParentalRating = user.Policy.MaxParentalRating; if (user.Policy.BlockUnratedItems.Contains(UnratedItem.LiveTvProgram)) { internalQuery.HasParentalRating = true; } } if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } IEnumerable<LiveTvProgram> programs = _libraryManager.QueryItems(internalQuery).Items.Cast<LiveTvProgram>(); var programList = programs.ToList(); var genres = programList.SelectMany(i => i.Genres) .Where(i => !string.IsNullOrWhiteSpace(i)) .DistinctNames() .Select(i => _libraryManager.GetGenre(i)) .DistinctBy(i => i.Id) .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); programs = programList.OrderBy(i => i.HasImage(ImageType.Primary) ? 0 : 1) .ThenByDescending(i => GetRecommendationScore(i, user.Id, genres)) .ThenBy(i => i.StartDate); if (query.Limit.HasValue) { programs = programs.Take(query.Limit.Value); } programList = programs.ToList(); var returnArray = programList.ToArray(); var result = new QueryResult<LiveTvProgram> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }
public static bool Filter(BaseItem item, User user, InternalItemsQuery query, IUserDataManager userDataManager, ILibraryManager libraryManager) { if (query.MediaTypes.Length > 0 && !query.MediaTypes.Contains(item.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase)) { return(false); } if (query.IncludeItemTypes.Length > 0 && !query.IncludeItemTypes.Contains(item.GetClientTypeName(), StringComparer.OrdinalIgnoreCase)) { return(false); } if (query.ExcludeItemTypes.Length > 0 && query.ExcludeItemTypes.Contains(item.GetClientTypeName(), StringComparer.OrdinalIgnoreCase)) { return(false); } if (query.IsVirtualItem.HasValue && item.IsVirtualItem != query.IsVirtualItem.Value) { return(false); } if (query.IsFolder.HasValue && query.IsFolder.Value != item.IsFolder) { return(false); } UserItemData userData = null; if (query.IsLiked.HasValue) { userData = userData ?? userDataManager.GetUserData(user, item); if (!userData.Likes.HasValue || userData.Likes != query.IsLiked.Value) { return(false); } } if (query.IsFavoriteOrLiked.HasValue) { userData = userData ?? userDataManager.GetUserData(user, item); var isFavoriteOrLiked = userData.IsFavorite || (userData.Likes ?? false); if (isFavoriteOrLiked != query.IsFavoriteOrLiked.Value) { return(false); } } if (query.IsFavorite.HasValue) { userData = userData ?? userDataManager.GetUserData(user, item); if (userData.IsFavorite != query.IsFavorite.Value) { return(false); } } if (query.IsResumable.HasValue) { userData = userData ?? userDataManager.GetUserData(user, item); var isResumable = userData.PlaybackPositionTicks > 0; if (isResumable != query.IsResumable.Value) { return(false); } } if (query.IsPlayed.HasValue) { if (item.IsPlayed(user) != query.IsPlayed.Value) { return(false); } } // Filter by Video3DFormat if (query.Is3D.HasValue) { var val = query.Is3D.Value; var video = item as Video; if (video == null || val != video.Video3DFormat.HasValue) { return(false); } } /* * f**k - fix this * if (query.IsHD.HasValue) * { * if (item.IsHD != query.IsHD.Value) * { * return false; * } * } */ if (query.IsLocked.HasValue) { var val = query.IsLocked.Value; if (item.IsLocked != val) { return(false); } } if (query.HasOverview.HasValue) { var filterValue = query.HasOverview.Value; var hasValue = !string.IsNullOrEmpty(item.Overview); if (hasValue != filterValue) { return(false); } } if (query.HasImdbId.HasValue) { var filterValue = query.HasImdbId.Value; var hasValue = !string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Imdb)); if (hasValue != filterValue) { return(false); } } if (query.HasTmdbId.HasValue) { var filterValue = query.HasTmdbId.Value; var hasValue = !string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Tmdb)); if (hasValue != filterValue) { return(false); } } if (query.HasTvdbId.HasValue) { var filterValue = query.HasTvdbId.Value; var hasValue = !string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Tvdb)); if (hasValue != filterValue) { return(false); } } if (query.HasOfficialRating.HasValue) { var filterValue = query.HasOfficialRating.Value; var hasValue = !string.IsNullOrEmpty(item.OfficialRating); if (hasValue != filterValue) { return(false); } } if (query.IsPlaceHolder.HasValue) { var filterValue = query.IsPlaceHolder.Value; var isPlaceHolder = false; var hasPlaceHolder = item as ISupportsPlaceHolders; if (hasPlaceHolder != null) { isPlaceHolder = hasPlaceHolder.IsPlaceHolder; } if (isPlaceHolder != filterValue) { return(false); } } if (query.HasSpecialFeature.HasValue) { var filterValue = query.HasSpecialFeature.Value; var movie = item as IHasSpecialFeatures; if (movie != null) { var ok = filterValue ? movie.SpecialFeatureIds.Length > 0 : movie.SpecialFeatureIds.Length == 0; if (!ok) { return(false); } } else { return(false); } } if (query.HasSubtitles.HasValue) { var val = query.HasSubtitles.Value; var video = item as Video; if (video == null || val != video.HasSubtitles) { return(false); } } if (query.HasParentalRating.HasValue) { var val = query.HasParentalRating.Value; var rating = item.CustomRating; if (string.IsNullOrEmpty(rating)) { rating = item.OfficialRating; } if (val) { if (string.IsNullOrEmpty(rating)) { return(false); } } else { if (!string.IsNullOrEmpty(rating)) { return(false); } } } if (query.HasTrailer.HasValue) { var val = query.HasTrailer.Value; var trailerCount = 0; var hasTrailers = item as IHasTrailers; if (hasTrailers != null) { trailerCount = hasTrailers.GetTrailerIds().Count; } var ok = val ? trailerCount > 0 : trailerCount == 0; if (!ok) { return(false); } } if (query.HasThemeSong.HasValue) { var filterValue = query.HasThemeSong.Value; var themeCount = item.ThemeSongIds.Length; var ok = filterValue ? themeCount > 0 : themeCount == 0; if (!ok) { return(false); } } if (query.HasThemeVideo.HasValue) { var filterValue = query.HasThemeVideo.Value; var themeCount = item.ThemeVideoIds.Length; var ok = filterValue ? themeCount > 0 : themeCount == 0; if (!ok) { return(false); } } // Apply genre filter if (query.Genres.Length > 0 && !query.Genres.Any(v => item.Genres.Contains(v, StringComparer.OrdinalIgnoreCase))) { return(false); } // Filter by VideoType if (query.VideoTypes.Length > 0) { var video = item as Video; if (video == null || !query.VideoTypes.Contains(video.VideoType)) { return(false); } } if (query.ImageTypes.Length > 0 && !query.ImageTypes.Any(item.HasImage)) { return(false); } // Apply studio filter if (query.StudioIds.Length > 0 && !query.StudioIds.Any(id => { var studioItem = libraryManager.GetItemById(id); return(studioItem != null && item.Studios.Contains(studioItem.Name, StringComparer.OrdinalIgnoreCase)); })) { return(false); } // Apply genre filter if (query.GenreIds.Length > 0 && !query.GenreIds.Any(id => { var genreItem = libraryManager.GetItemById(id); return(genreItem != null && item.Genres.Contains(genreItem.Name, StringComparer.OrdinalIgnoreCase)); })) { return(false); } // Apply year filter if (query.Years.Length > 0) { if (!(item.ProductionYear.HasValue && query.Years.Contains(item.ProductionYear.Value))) { return(false); } } // Apply official rating filter if (query.OfficialRatings.Length > 0 && !query.OfficialRatings.Contains(item.OfficialRating ?? string.Empty)) { return(false); } if (query.ItemIds.Length > 0) { if (!query.ItemIds.Contains(item.Id)) { return(false); } } // Apply tag filter var tags = query.Tags; if (tags.Length > 0) { if (!tags.Any(v => item.Tags.Contains(v, StringComparer.OrdinalIgnoreCase))) { return(false); } } if (query.MinPlayers.HasValue) { var filterValue = query.MinPlayers.Value; var game = item as Game; if (game != null) { var players = game.PlayersSupported ?? 1; var ok = players >= filterValue; if (!ok) { return(false); } } else { return(false); } } if (query.MaxPlayers.HasValue) { var filterValue = query.MaxPlayers.Value; var game = item as Game; if (game != null) { var players = game.PlayersSupported ?? 1; var ok = players <= filterValue; if (!ok) { return(false); } } else { return(false); } } if (query.MinCommunityRating.HasValue) { var val = query.MinCommunityRating.Value; if (!(item.CommunityRating.HasValue && item.CommunityRating >= val)) { return(false); } } if (query.MinCriticRating.HasValue) { var val = query.MinCriticRating.Value; if (!(item.CriticRating.HasValue && item.CriticRating >= val)) { return(false); } } if (query.MinIndexNumber.HasValue) { var val = query.MinIndexNumber.Value; if (!(item.IndexNumber.HasValue && item.IndexNumber.Value >= val)) { return(false); } } if (query.MinPremiereDate.HasValue) { var val = query.MinPremiereDate.Value; if (!(item.PremiereDate.HasValue && item.PremiereDate.Value >= val)) { return(false); } } if (query.MaxPremiereDate.HasValue) { var val = query.MaxPremiereDate.Value; if (!(item.PremiereDate.HasValue && item.PremiereDate.Value <= val)) { return(false); } } if (query.ParentIndexNumber.HasValue) { var filterValue = query.ParentIndexNumber.Value; if (item.ParentIndexNumber.HasValue && item.ParentIndexNumber.Value != filterValue) { return(false); } } if (query.SeriesStatuses.Length > 0) { var ok = new[] { item }.OfType <Series>().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value)); if (!ok) { return(false); } } if (query.AiredDuringSeason.HasValue) { var episode = item as Episode; if (episode == null) { return(false); } if (!Series.FilterEpisodesBySeason(new[] { episode }, query.AiredDuringSeason.Value, true).Any()) { return(false); } } return(true); }
protected virtual async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query) { if (SourceType == SourceType.Channel) { try { // Don't blow up here because it could cause parent screens with other content to fail return await ChannelManager.GetChannelItemsInternal(new ChannelItemQuery { ChannelId = ChannelId, FolderId = Id.ToString("N"), Limit = query.Limit, StartIndex = query.StartIndex, UserId = query.User.Id.ToString("N"), SortBy = query.SortBy, SortOrder = query.SortOrder }, new Progress<double>(), CancellationToken.None); } catch { // Already logged at lower levels return new QueryResult<BaseItem> { }; } } if (query.Recursive) { return QueryRecursive(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) : GetChildren(user, true).Where(filter); } return PostFilterAndSort(items, query); }
private bool RequiresPostFiltering(InternalItemsQuery query) { if (LinkedChildren.Count > 0) { if (!(this is ICollectionFolder)) { Logger.Debug("Query requires post-filtering due to LinkedChildren. Type: " + GetType().Name); return(true); } } if (query.SortBy != null && query.SortBy.Length > 0) { if (query.SortBy.Contains(ItemSortBy.AiredEpisodeOrder, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.AiredEpisodeOrder"); return(true); } if (query.SortBy.Contains(ItemSortBy.GameSystem, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.GameSystem"); return(true); } if (query.SortBy.Contains(ItemSortBy.Metascore, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Metascore"); return(true); } if (query.SortBy.Contains(ItemSortBy.Players, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Players"); return(true); } if (query.SortBy.Contains(ItemSortBy.VideoBitRate, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.VideoBitRate"); return(true); } } if (query.ItemIds.Length > 0) { Logger.Debug("Query requires post-filtering due to ItemIds"); return(true); } if (query.IsInBoxSet.HasValue) { Logger.Debug("Query requires post-filtering due to IsInBoxSet"); return(true); } // Filter by Video3DFormat if (query.Is3D.HasValue) { Logger.Debug("Query requires post-filtering due to Is3D"); return(true); } if (query.HasOfficialRating.HasValue) { Logger.Debug("Query requires post-filtering due to HasOfficialRating"); return(true); } if (query.IsPlaceHolder.HasValue) { Logger.Debug("Query requires post-filtering due to IsPlaceHolder"); return(true); } if (query.HasSpecialFeature.HasValue) { Logger.Debug("Query requires post-filtering due to HasSpecialFeature"); return(true); } if (query.HasSubtitles.HasValue) { Logger.Debug("Query requires post-filtering due to HasSubtitles"); return(true); } if (query.HasTrailer.HasValue) { Logger.Debug("Query requires post-filtering due to HasTrailer"); return(true); } // Filter by VideoType if (query.VideoTypes.Length > 0) { Logger.Debug("Query requires post-filtering due to VideoTypes"); return(true); } // Apply person filter if (query.ItemIdsFromPersonFilters != null) { Logger.Debug("Query requires post-filtering due to ItemIdsFromPersonFilters"); return(true); } if (query.MinPlayers.HasValue) { Logger.Debug("Query requires post-filtering due to MinPlayers"); return(true); } if (query.MaxPlayers.HasValue) { Logger.Debug("Query requires post-filtering due to MaxPlayers"); return(true); } if (UserViewBuilder.CollapseBoxSetItems(query, this, query.User, ConfigurationManager)) { Logger.Debug("Query requires post-filtering due to CollapseBoxSetItems"); return(true); } if (!string.IsNullOrWhiteSpace(query.AdjacentTo)) { Logger.Debug("Query requires post-filtering due to AdjacentTo"); return(true); } if (query.AirDays.Length > 0) { Logger.Debug("Query requires post-filtering due to AirDays"); return(true); } if (query.SeriesStatuses.Length > 0) { Logger.Debug("Query requires post-filtering due to SeriesStatuses"); return(true); } if (query.AiredDuringSeason.HasValue) { Logger.Debug("Query requires post-filtering due to AiredDuringSeason"); return(true); } if (!string.IsNullOrWhiteSpace(query.AlbumArtistStartsWithOrGreater)) { Logger.Debug("Query requires post-filtering due to AlbumArtistStartsWithOrGreater"); return(true); } if (query.IsPlayed.HasValue) { if (query.IncludeItemTypes.Length == 1 && query.IncludeItemTypes.Contains(typeof(Series).Name)) { Logger.Debug("Query requires post-filtering due to IsPlayed"); return(true); } } return(false); }
/// <summary> /// Marks the played. /// </summary> /// <param name="user">The user.</param> /// <param name="datePlayed">The date played.</param> /// <param name="resetPosition">if set to <c>true</c> [reset position].</param> /// <returns>Task.</returns> public override async Task MarkPlayed(User user, DateTime? datePlayed, bool resetPosition) { var query = new InternalItemsQuery { User = user, Recursive = true, IsFolder = false, IsUnaired = false }; if (!user.Configuration.DisplayMissingEpisodes) { query.IsMissing = false; } var itemsResult = await GetItems(query).ConfigureAwait(false); // Sweep through recursively and update status var tasks = itemsResult.Items.Select(c => c.MarkPlayed(user, datePlayed, resetPosition)); await Task.WhenAll(tasks).ConfigureAwait(false); }
protected QueryResult <BaseItem> PostFilterAndSort(IEnumerable <BaseItem> items, InternalItemsQuery query, bool collapseBoxSetItems, bool enableSorting) { return(UserViewBuilder.PostFilterAndSort(items, this, null, query, LibraryManager, ConfigurationManager, collapseBoxSetItems, enableSorting)); }
private bool RequiresPostFiltering(InternalItemsQuery query) { if (LinkedChildren.Count > 0) { if (!(this is ICollectionFolder)) { Logger.Debug("Query requires post-filtering due to LinkedChildren"); return true; } } var supportsUserDataQueries = ConfigurationManager.Configuration.SchemaVersion >= 76; if (query.SortBy != null && query.SortBy.Length > 0) { if (!supportsUserDataQueries) { if (query.SortBy.Contains(ItemSortBy.DatePlayed, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.IsFavoriteOrLiked"); return true; } if (query.SortBy.Contains(ItemSortBy.PlayCount, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.PlayCount"); return true; } if (query.SortBy.Contains(ItemSortBy.IsFavoriteOrLiked, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.IsFavoriteOrLiked"); return true; } if (query.SortBy.Contains(ItemSortBy.IsPlayed, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.IsPlayed"); return true; } if (query.SortBy.Contains(ItemSortBy.IsUnplayed, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.IsUnplayed"); return true; } } if (query.SortBy.Contains(ItemSortBy.AiredEpisodeOrder, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.AiredEpisodeOrder"); return true; } if (query.SortBy.Contains(ItemSortBy.AlbumArtist, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.AlbumArtist"); return true; } if (query.SortBy.Contains(ItemSortBy.Artist, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Artist"); return true; } if (query.SortBy.Contains(ItemSortBy.Budget, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Budget"); return true; } if (query.SortBy.Contains(ItemSortBy.GameSystem, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.GameSystem"); return true; } if (query.SortBy.Contains(ItemSortBy.Metascore, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Metascore"); return true; } if (query.SortBy.Contains(ItemSortBy.OfficialRating, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.OfficialRating"); return true; } if (query.SortBy.Contains(ItemSortBy.Players, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Players"); return true; } if (query.SortBy.Contains(ItemSortBy.Revenue, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Revenue"); return true; } if (query.SortBy.Contains(ItemSortBy.SeriesSortName, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.SeriesSortName"); return true; } if (query.SortBy.Contains(ItemSortBy.Studio, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.Studio"); return true; } if (query.SortBy.Contains(ItemSortBy.VideoBitRate, StringComparer.OrdinalIgnoreCase)) { Logger.Debug("Query requires post-filtering due to ItemSortBy.VideoBitRate"); return true; } } if (query.ItemIds.Length > 0) { Logger.Debug("Query requires post-filtering due to ItemIds"); return true; } if (query.PersonIds.Length > 0) { Logger.Debug("Query requires post-filtering due to PersonIds"); return true; } if (!supportsUserDataQueries) { if (query.IsLiked.HasValue) { Logger.Debug("Query requires post-filtering due to IsLiked"); return true; } if (query.IsFavoriteOrLiked.HasValue) { Logger.Debug("Query requires post-filtering due to IsFavoriteOrLiked"); return true; } if (query.IsFavorite.HasValue) { Logger.Debug("Query requires post-filtering due to IsFavorite"); return true; } if (query.IsResumable.HasValue) { Logger.Debug("Query requires post-filtering due to IsResumable"); return true; } if (query.IsPlayed.HasValue) { Logger.Debug("Query requires post-filtering due to IsPlayed"); return true; } } if (query.IsInBoxSet.HasValue) { Logger.Debug("Query requires post-filtering due to IsInBoxSet"); return true; } // Filter by Video3DFormat if (query.Is3D.HasValue) { Logger.Debug("Query requires post-filtering due to Is3D"); return true; } if (query.HasImdbId.HasValue) { Logger.Debug("Query requires post-filtering due to HasImdbId"); return true; } if (query.HasTmdbId.HasValue) { Logger.Debug("Query requires post-filtering due to HasTmdbId"); return true; } if (query.HasTvdbId.HasValue) { Logger.Debug("Query requires post-filtering due to HasTvdbId"); return true; } if (query.IsYearMismatched.HasValue) { Logger.Debug("Query requires post-filtering due to IsYearMismatched"); return true; } if (query.HasOfficialRating.HasValue) { Logger.Debug("Query requires post-filtering due to HasOfficialRating"); return true; } if (query.IsPlaceHolder.HasValue) { Logger.Debug("Query requires post-filtering due to IsPlaceHolder"); return true; } if (query.HasSpecialFeature.HasValue) { Logger.Debug("Query requires post-filtering due to HasSpecialFeature"); return true; } if (query.HasSubtitles.HasValue) { Logger.Debug("Query requires post-filtering due to HasSubtitles"); return true; } if (query.HasTrailer.HasValue) { Logger.Debug("Query requires post-filtering due to HasTrailer"); return true; } if (query.HasThemeSong.HasValue) { Logger.Debug("Query requires post-filtering due to HasThemeSong"); return true; } if (query.HasThemeVideo.HasValue) { Logger.Debug("Query requires post-filtering due to HasThemeVideo"); return true; } // Filter by VideoType if (query.VideoTypes.Length > 0) { Logger.Debug("Query requires post-filtering due to VideoTypes"); return true; } if (query.ImageTypes.Length > 0) { Logger.Debug("Query requires post-filtering due to ImageTypes"); return true; } // Apply studio filter if (query.StudioIds.Length > 0) { Logger.Debug("Query requires post-filtering due to StudioIds"); return true; } // Apply genre filter if (query.GenreIds.Length > 0) { Logger.Debug("Query requires post-filtering due to GenreIds"); return true; } // Apply person filter if (query.ItemIdsFromPersonFilters != null) { Logger.Debug("Query requires post-filtering due to ItemIdsFromPersonFilters"); return true; } if (query.MinPlayers.HasValue) { Logger.Debug("Query requires post-filtering due to MinPlayers"); return true; } if (query.MaxPlayers.HasValue) { Logger.Debug("Query requires post-filtering due to MaxPlayers"); return true; } if (query.OfficialRatings.Length > 0) { Logger.Debug("Query requires post-filtering due to OfficialRatings"); return true; } if (query.IsMissing.HasValue) { Logger.Debug("Query requires post-filtering due to IsMissing"); return true; } if (query.IsUnaired.HasValue) { Logger.Debug("Query requires post-filtering due to IsUnaired"); return true; } if (query.IsVirtualUnaired.HasValue) { Logger.Debug("Query requires post-filtering due to IsVirtualUnaired"); return true; } if (UserViewBuilder.CollapseBoxSetItems(query, this, query.User)) { Logger.Debug("Query requires post-filtering due to CollapseBoxSetItems"); return true; } if (!string.IsNullOrWhiteSpace(query.AdjacentTo)) { Logger.Debug("Query requires post-filtering due to AdjacentTo"); return true; } if (query.AirDays.Length > 0) { Logger.Debug("Query requires post-filtering due to AirDays"); return true; } if (query.SeriesStatuses.Length > 0) { Logger.Debug("Query requires post-filtering due to SeriesStatuses"); return true; } if (query.AiredDuringSeason.HasValue) { Logger.Debug("Query requires post-filtering due to AiredDuringSeason"); return true; } if (!string.IsNullOrWhiteSpace(query.AlbumArtistStartsWithOrGreater)) { Logger.Debug("Query requires post-filtering due to AlbumArtistStartsWithOrGreater"); return true; } if (query.ArtistNames.Length > 0) { Logger.Debug("Query requires post-filtering due to ArtistNames"); return true; } return false; }
public override Task <QueryResult <BaseItem> > GetItems(InternalItemsQuery query) { return(new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager, CollectionManager) .GetUserItems(this, ViewType, query)); }
protected QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items, InternalItemsQuery query) { return UserViewBuilder.SortAndFilter(items, this, null, query, LibraryManager, UserDataManager); }
protected QueryResult <BaseItem> PostFilterAndSort(IEnumerable <BaseItem> items, InternalItemsQuery query) { return(UserViewBuilder.PostFilterAndSort(items, this, null, query, LibraryManager, ConfigurationManager)); }
/// <summary> /// Adds the children to list. /// </summary> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> private void AddChildren(User user, bool includeLinkedChildren, Dictionary <Guid, BaseItem> result, bool recursive, InternalItemsQuery query) { foreach (var child in GetEligibleChildrenForRecursiveChildren(user)) { if (child.IsVisible(user)) { if (query == null || UserViewBuilder.FilterItem(child, query)) { result[child.Id] = child; } if (recursive && child.IsFolder) { var folder = (Folder)child; folder.AddChildren(user, includeLinkedChildren, result, true, query); } } } if (includeLinkedChildren) { foreach (var child in GetLinkedChildren(user)) { if (child.IsVisible(user)) { if (query == null || UserViewBuilder.FilterItem(child, query)) { result[child.Id] = child; } } } } }
private async Task <QueryResult <BaseItem> > GetMusicFolders(Folder parent, User user, InternalItemsQuery query) { if (query.Recursive) { return(GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }), query)); } var list = new List <BaseItem>(); var category = "music"; list.Add(await GetUserView(category, CollectionType.MusicLatest, user, "0", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MusicAlbums, user, "1", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MusicAlbumArtists, user, "2", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MusicSongs, user, "3", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.MusicArtists, user, "3", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.MusicGenres, user, "5", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.MusicFavorites, user, "6", parent).ConfigureAwait(false)); return(GetResult(list, query)); }