private QueryResult <ServerItem> GetMusicAlbumArtists(BaseItem parent, User user, InternalItemsQuery query) { var artists = _libraryManager.GetAlbumArtists(new InternalItemsQuery(user) { AncestorIds = new[] { parent.Id }, StartIndex = query.StartIndex, Limit = query.Limit }); var result = new QueryResult <BaseItem> { TotalRecordCount = artists.TotalRecordCount, Items = artists.Items.Select(i => i.Item1).ToArray() }; return(ToResult(result)); }
public ActionResult <QueryResult <BaseItemDto> > GetAlbumArtists( [FromQuery] double?minCommunityRating, [FromQuery] int?startIndex, [FromQuery] int?limit, [FromQuery] string?searchTerm, [FromQuery] string?parentId, [FromQuery] string?fields, [FromQuery] string?excludeItemTypes, [FromQuery] string?includeItemTypes, [FromQuery] string?filters, [FromQuery] bool?isFavorite, [FromQuery] string?mediaTypes, [FromQuery] string?genres, [FromQuery] string?genreIds, [FromQuery] string?officialRatings, [FromQuery] string?tags, [FromQuery] string?years, [FromQuery] bool?enableUserData, [FromQuery] int?imageTypeLimit, [FromQuery] string?enableImageTypes, [FromQuery] string?person, [FromQuery] string?personIds, [FromQuery] string?personTypes, [FromQuery] string?studios, [FromQuery] string?studioIds, [FromQuery] Guid?userId, [FromQuery] string?nameStartsWithOrGreater, [FromQuery] string?nameStartsWith, [FromQuery] string?nameLessThan, [FromQuery] bool?enableImages = true, [FromQuery] bool enableTotalRecordCount = true) { var dtoOptions = new DtoOptions() .AddItemFields(fields) .AddClientFields(Request) .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes); User? user = null; BaseItem parentItem; if (userId.HasValue && !userId.Equals(Guid.Empty)) { user = _userManager.GetUserById(userId.Value); parentItem = string.IsNullOrEmpty(parentId) ? _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(parentId); } else { parentItem = string.IsNullOrEmpty(parentId) ? _libraryManager.RootFolder : _libraryManager.GetItemById(parentId); } var excludeItemTypesArr = RequestHelpers.Split(excludeItemTypes, ',', true); var includeItemTypesArr = RequestHelpers.Split(includeItemTypes, ',', true); var mediaTypesArr = RequestHelpers.Split(mediaTypes, ',', true); var query = new InternalItemsQuery(user) { ExcludeItemTypes = excludeItemTypesArr, IncludeItemTypes = includeItemTypesArr, MediaTypes = mediaTypesArr, StartIndex = startIndex, Limit = limit, IsFavorite = isFavorite, NameLessThan = nameLessThan, NameStartsWith = nameStartsWith, NameStartsWithOrGreater = nameStartsWithOrGreater, Tags = RequestHelpers.Split(tags, ',', true), OfficialRatings = RequestHelpers.Split(officialRatings, ',', true), Genres = RequestHelpers.Split(genres, ',', true), GenreIds = RequestHelpers.GetGuids(genreIds), StudioIds = RequestHelpers.GetGuids(studioIds), Person = person, PersonIds = RequestHelpers.GetGuids(personIds), PersonTypes = RequestHelpers.Split(personTypes, ',', true), Years = RequestHelpers.Split(years, ',', true).Select(int.Parse).ToArray(), MinCommunityRating = minCommunityRating, DtoOptions = dtoOptions, SearchTerm = searchTerm, EnableTotalRecordCount = enableTotalRecordCount }; if (!string.IsNullOrWhiteSpace(parentId)) { if (parentItem is Folder) { query.AncestorIds = new[] { new Guid(parentId) }; } else { query.ItemIds = new[] { new Guid(parentId) }; } } // Studios if (!string.IsNullOrEmpty(studios)) { query.StudioIds = studios.Split('|').Select(i => { try { return(_libraryManager.GetStudio(i)); } catch { return(null); } }).Where(i => i != null).Select(i => i !.Id).ToArray(); } foreach (var filter in RequestHelpers.GetFilters(filters)) { 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.IsResumable: query.IsResumable = true; break; case ItemFilter.IsUnplayed: query.IsPlayed = false; break; case ItemFilter.Likes: query.IsLiked = true; break; } } var result = _libraryManager.GetAlbumArtists(query); var dtos = result.Items.Select(i => { var(baseItem, itemCounts) = i; var dto = _dtoService.GetItemByNameDto(baseItem, dtoOptions, null, user); if (!string.IsNullOrWhiteSpace(includeItemTypes)) { dto.ChildCount = itemCounts.ItemCount; dto.ProgramCount = itemCounts.ProgramCount; dto.SeriesCount = itemCounts.SeriesCount; dto.EpisodeCount = itemCounts.EpisodeCount; dto.MovieCount = itemCounts.MovieCount; dto.TrailerCount = itemCounts.TrailerCount; dto.AlbumCount = itemCounts.AlbumCount; dto.SongCount = itemCounts.SongCount; dto.ArtistCount = itemCounts.ArtistCount; } return(dto); }); return(new QueryResult <BaseItemDto> { Items = dtos.ToArray(), TotalRecordCount = result.TotalRecordCount }); }
public ActionResult <QueryResult <BaseItemDto> > GetAlbumArtists( [FromQuery] double?minCommunityRating, [FromQuery] int?startIndex, [FromQuery] int?limit, [FromQuery] string?searchTerm, [FromQuery] Guid?parentId, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ItemFields[] fields, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] excludeItemTypes, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ItemFilter[] filters, [FromQuery] bool?isFavorite, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] mediaTypes, [FromQuery, ModelBinder(typeof(PipeDelimitedArrayModelBinder))] string[] genres, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] genreIds, [FromQuery, ModelBinder(typeof(PipeDelimitedArrayModelBinder))] string[] officialRatings, [FromQuery, ModelBinder(typeof(PipeDelimitedArrayModelBinder))] string[] tags, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] int[] years, [FromQuery] bool?enableUserData, [FromQuery] int?imageTypeLimit, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes, [FromQuery] string?person, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] personIds, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] personTypes, [FromQuery, ModelBinder(typeof(PipeDelimitedArrayModelBinder))] string[] studios, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] studioIds, [FromQuery] Guid?userId, [FromQuery] string?nameStartsWithOrGreater, [FromQuery] string?nameStartsWith, [FromQuery] string?nameLessThan, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] sortBy, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] SortOrder[] sortOrder, [FromQuery] bool?enableImages = true, [FromQuery] bool enableTotalRecordCount = true) { var dtoOptions = new DtoOptions { Fields = fields } .AddClientFields(Request) .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes); User? user = null; BaseItem parentItem = _libraryManager.GetParentItem(parentId, userId); if (userId.HasValue && !userId.Equals(Guid.Empty)) { user = _userManager.GetUserById(userId.Value); } var query = new InternalItemsQuery(user) { ExcludeItemTypes = excludeItemTypes, IncludeItemTypes = includeItemTypes, MediaTypes = mediaTypes, StartIndex = startIndex, Limit = limit, IsFavorite = isFavorite, NameLessThan = nameLessThan, NameStartsWith = nameStartsWith, NameStartsWithOrGreater = nameStartsWithOrGreater, Tags = tags, OfficialRatings = officialRatings, Genres = genres, GenreIds = genreIds, StudioIds = studioIds, Person = person, PersonIds = personIds, PersonTypes = personTypes, Years = years, MinCommunityRating = minCommunityRating, DtoOptions = dtoOptions, SearchTerm = searchTerm, EnableTotalRecordCount = enableTotalRecordCount, OrderBy = RequestHelpers.GetOrderBy(sortBy, sortOrder) }; if (parentId.HasValue) { if (parentItem is Folder) { query.AncestorIds = new[] { parentId.Value }; } else { query.ItemIds = new[] { parentId.Value }; } } // Studios if (studios.Length != 0) { query.StudioIds = studios.Select(i => { try { return(_libraryManager.GetStudio(i)); } catch { return(null); } }).Where(i => i != null).Select(i => i !.Id).ToArray(); } foreach (var filter in filters) { 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.IsResumable: query.IsResumable = true; break; case ItemFilter.IsUnplayed: query.IsPlayed = false; break; case ItemFilter.Likes: query.IsLiked = true; break; } } var result = _libraryManager.GetAlbumArtists(query); var dtos = result.Items.Select(i => { var(baseItem, itemCounts) = i; var dto = _dtoService.GetItemByNameDto(baseItem, dtoOptions, null, user); if (includeItemTypes.Length != 0) { dto.ChildCount = itemCounts.ItemCount; dto.ProgramCount = itemCounts.ProgramCount; dto.SeriesCount = itemCounts.SeriesCount; dto.EpisodeCount = itemCounts.EpisodeCount; dto.MovieCount = itemCounts.MovieCount; dto.TrailerCount = itemCounts.TrailerCount; dto.AlbumCount = itemCounts.AlbumCount; dto.SongCount = itemCounts.SongCount; dto.ArtistCount = itemCounts.ArtistCount; } return(dto); }); return(new QueryResult <BaseItemDto>( query.StartIndex, result.TotalRecordCount, dtos.ToArray())); }