Пример #1
0
        public ActionResult <IEnumerable <BaseItemDto> > GetLatestMedia(
            [FromRoute, Required] Guid userId,
            [FromQuery] Guid?parentId,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ItemFields[] fields,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
            [FromQuery] bool?isPlayed,
            [FromQuery] bool?enableImages,
            [FromQuery] int?imageTypeLimit,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes,
            [FromQuery] bool?enableUserData,
            [FromQuery] int limit       = 20,
            [FromQuery] bool groupItems = true)
        {
            var user = _userManager.GetUserById(userId);

            if (!isPlayed.HasValue)
            {
                if (user.HidePlayedInLatest)
                {
                    isPlayed = false;
                }
            }

            var dtoOptions = new DtoOptions {
                Fields = fields
            }
            .AddClientFields(Request)
            .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);

            var list = _userViewManager.GetLatestItems(
                new LatestItemsQuery
            {
                GroupItems       = groupItems,
                IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
                IsPlayed         = isPlayed,
                Limit            = limit,
                ParentId         = parentId ?? Guid.Empty,
                UserId           = userId,
            }, dtoOptions);

            var dtos = list.Select(i =>
            {
                var item       = i.Item2[0];
                var childCount = 0;

                if (i.Item1 != null && (i.Item2.Count > 1 || i.Item1 is MusicAlbum))
                {
                    item       = i.Item1;
                    childCount = i.Item2.Count;
                }

                var dto = _dtoService.GetBaseItemDto(item, dtoOptions, user);

                dto.ChildCount = childCount;

                return(dto);
            });

            return(Ok(dtos));
        }
Пример #2
0
        public ActionResult <SearchHintResult> Get(
            [FromQuery] int?startIndex,
            [FromQuery] int?limit,
            [FromQuery] Guid?userId,
            [FromQuery, Required] string searchTerm,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] excludeItemTypes,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] mediaTypes,
            [FromQuery] Guid?parentId,
            [FromQuery] bool?isMovie,
            [FromQuery] bool?isSeries,
            [FromQuery] bool?isNews,
            [FromQuery] bool?isKids,
            [FromQuery] bool?isSports,
            [FromQuery] bool includePeople  = true,
            [FromQuery] bool includeMedia   = true,
            [FromQuery] bool includeGenres  = true,
            [FromQuery] bool includeStudios = true,
            [FromQuery] bool includeArtists = true)
        {
            var result = _searchEngine.GetSearchHints(new SearchQuery
            {
                Limit            = limit,
                SearchTerm       = searchTerm,
                IncludeArtists   = includeArtists,
                IncludeGenres    = includeGenres,
                IncludeMedia     = includeMedia,
                IncludePeople    = includePeople,
                IncludeStudios   = includeStudios,
                StartIndex       = startIndex,
                UserId           = userId ?? Guid.Empty,
                IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
                ExcludeItemTypes = RequestHelpers.GetItemTypeStrings(excludeItemTypes),
                MediaTypes       = mediaTypes,
                ParentId         = parentId,

                IsKids   = isKids,
                IsMovie  = isMovie,
                IsNews   = isNews,
                IsSeries = isSeries,
                IsSports = isSports
            });

            return(new SearchHintResult
            {
                TotalRecordCount = result.TotalRecordCount,
                SearchHints = result.Items.Select(GetSearchHintResult).ToArray()
            });
        }
Пример #3
0
        public ActionResult <QueryResult <BaseItemDto> > GetGenres(
            [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] bool?isFavorite,
            [FromQuery] int?imageTypeLimit,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes,
            [FromQuery] Guid?userId,
            [FromQuery] string?nameStartsWithOrGreater,
            [FromQuery] string?nameStartsWith,
            [FromQuery] string?nameLessThan,
            [FromQuery] bool?enableImages           = true,
            [FromQuery] bool enableTotalRecordCount = true)
        {
            var dtoOptions = new DtoOptions {
                Fields = fields
            }
            .AddClientFields(Request)
            .AddAdditionalDtoOptions(enableImages, false, imageTypeLimit, enableImageTypes);

            User?user = userId.HasValue && userId != Guid.Empty ? _userManager.GetUserById(userId.Value) : null;

            var parentItem = _libraryManager.GetParentItem(parentId, userId);

            var query = new InternalItemsQuery(user)
            {
                ExcludeItemTypes        = RequestHelpers.GetItemTypeStrings(excludeItemTypes),
                IncludeItemTypes        = RequestHelpers.GetItemTypeStrings(includeItemTypes),
                StartIndex              = startIndex,
                Limit                   = limit,
                IsFavorite              = isFavorite,
                NameLessThan            = nameLessThan,
                NameStartsWith          = nameStartsWith,
                NameStartsWithOrGreater = nameStartsWithOrGreater,
                DtoOptions              = dtoOptions,
                SearchTerm              = searchTerm,
                EnableTotalRecordCount  = enableTotalRecordCount
            };

            if (parentId.HasValue)
            {
                if (parentItem is Folder)
                {
                    query.AncestorIds = new[] { parentId.Value };
                }
                else
                {
                    query.ItemIds = new[] { parentId.Value };
                }
            }

            QueryResult <(BaseItem, ItemCounts)> result;

            if (parentItem is ICollectionFolder parentCollectionFolder &&
                (string.Equals(parentCollectionFolder.CollectionType, CollectionType.Music, StringComparison.Ordinal) ||
                 string.Equals(parentCollectionFolder.CollectionType, CollectionType.MusicVideos, StringComparison.Ordinal)))
            {
                result = _libraryManager.GetMusicGenres(query);
            }
Пример #4
0
        public ActionResult <QueryResult <BaseItemDto> > GetArtists(
            [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] 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        = RequestHelpers.GetItemTypeStrings(excludeItemTypes),
                IncludeItemTypes        = RequestHelpers.GetItemTypeStrings(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
            };

            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.GetArtists(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>
            {
                Items = dtos.ToArray(),
                TotalRecordCount = result.TotalRecordCount
            });
        }
Пример #5
0
        public ActionResult <QueryFiltersLegacy> GetQueryFiltersLegacy(
            [FromQuery] Guid?userId,
            [FromQuery] Guid?parentId,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] mediaTypes)
        {
            var user = userId.HasValue && !userId.Equals(Guid.Empty)
                ? _userManager.GetUserById(userId.Value)
                : null;

            BaseItem?item = null;

            if (includeItemTypes.Length != 1 ||
                !(includeItemTypes[0] == BaseItemKind.BoxSet ||
                  includeItemTypes[0] == BaseItemKind.Playlist ||
                  includeItemTypes[0] == BaseItemKind.Trailer ||
                  includeItemTypes[0] == BaseItemKind.Program))
            {
                item = _libraryManager.GetParentItem(parentId, user?.Id);
            }

            var query = new InternalItemsQuery
            {
                User                   = user,
                MediaTypes             = mediaTypes,
                IncludeItemTypes       = RequestHelpers.GetItemTypeStrings(includeItemTypes),
                Recursive              = true,
                EnableTotalRecordCount = false,
                DtoOptions             = new DtoOptions
                {
                    Fields         = new[] { ItemFields.Genres, ItemFields.Tags },
                    EnableImages   = false,
                    EnableUserData = false
                }
            };

            if (item is not Folder folder)
            {
                return(new QueryFiltersLegacy());
            }

            var itemList = folder.GetItemList(query);

            return(new QueryFiltersLegacy
            {
                Years = itemList.Select(i => i.ProductionYear ?? -1)
                        .Where(i => i > 0)
                        .Distinct()
                        .OrderBy(i => i)
                        .ToArray(),

                Genres = itemList.SelectMany(i => i.Genres)
                         .DistinctNames()
                         .OrderBy(i => i)
                         .ToArray(),

                Tags = itemList
                       .SelectMany(i => i.Tags)
                       .Distinct(StringComparer.OrdinalIgnoreCase)
                       .OrderBy(i => i)
                       .ToArray(),

                OfficialRatings = itemList
                                  .Select(i => i.OfficialRating)
                                  .Where(i => !string.IsNullOrWhiteSpace(i))
                                  .Distinct(StringComparer.OrdinalIgnoreCase)
                                  .OrderBy(i => i)
                                  .ToArray()
            });
        }
Пример #6
0
        public ActionResult <QueryFilters> GetQueryFilters(
            [FromQuery] Guid?userId,
            [FromQuery] Guid?parentId,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
            [FromQuery] bool?isAiring,
            [FromQuery] bool?isMovie,
            [FromQuery] bool?isSports,
            [FromQuery] bool?isKids,
            [FromQuery] bool?isNews,
            [FromQuery] bool?isSeries,
            [FromQuery] bool?recursive)
        {
            var user = userId.HasValue && !userId.Equals(Guid.Empty)
                ? _userManager.GetUserById(userId.Value)
                : null;

            BaseItem?parentItem = null;

            if (includeItemTypes.Length == 1 &&
                (includeItemTypes[0] == BaseItemKind.BoxSet ||
                 includeItemTypes[0] == BaseItemKind.Playlist ||
                 includeItemTypes[0] == BaseItemKind.Trailer ||
                 includeItemTypes[0] == BaseItemKind.Program))
            {
                parentItem = null;
            }
            else if (parentId.HasValue)
            {
                parentItem = _libraryManager.GetItemById(parentId.Value);
            }

            var filters    = new QueryFilters();
            var genreQuery = new InternalItemsQuery(user)
            {
                IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
                DtoOptions       = new DtoOptions
                {
                    Fields         = Array.Empty <ItemFields>(),
                    EnableImages   = false,
                    EnableUserData = false
                },
                IsAiring = isAiring,
                IsMovie  = isMovie,
                IsSports = isSports,
                IsKids   = isKids,
                IsNews   = isNews,
                IsSeries = isSeries
            };

            if ((recursive ?? true) || parentItem is UserView || parentItem is ICollectionFolder)
            {
                genreQuery.AncestorIds = parentItem == null?Array.Empty <Guid>() : new[] { parentItem.Id };
            }
            else
            {
                genreQuery.Parent = parentItem;
            }

            if (includeItemTypes.Length == 1 &&
                (includeItemTypes[0] == BaseItemKind.MusicAlbum ||
                 includeItemTypes[0] == BaseItemKind.MusicVideo ||
                 includeItemTypes[0] == BaseItemKind.MusicArtist ||
                 includeItemTypes[0] == BaseItemKind.Audio))
            {
                filters.Genres = _libraryManager.GetMusicGenres(genreQuery).Items.Select(i => new NameGuidPair
                {
                    Name = i.Item1.Name,
                    Id   = i.Item1.Id
                }).ToArray();
            }
            else
            {
                filters.Genres = _libraryManager.GetGenres(genreQuery).Items.Select(i => new NameGuidPair
                {
                    Name = i.Item1.Name,
                    Id   = i.Item1.Id
                }).ToArray();
            }

            return(filters);
        }
Пример #7
0
        public ActionResult <QueryResult <BaseItemDto> > GetYears(
            [FromQuery] int?startIndex,
            [FromQuery] int?limit,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] SortOrder[] sortOrder,
            [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))] string[] mediaTypes,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] sortBy,
            [FromQuery] bool?enableUserData,
            [FromQuery] int?imageTypeLimit,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes,
            [FromQuery] Guid?userId,
            [FromQuery] bool recursive    = true,
            [FromQuery] bool?enableImages = 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);
            }

            IList <BaseItem> items;

            var query = new InternalItemsQuery(user)
            {
                ExcludeItemTypes = RequestHelpers.GetItemTypeStrings(excludeItemTypes),
                IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
                MediaTypes       = mediaTypes,
                DtoOptions       = dtoOptions
            };

            bool Filter(BaseItem i) => FilterItem(i, excludeItemTypes, includeItemTypes, mediaTypes);

            if (parentItem.IsFolder)
            {
                var folder = (Folder)parentItem;

                if (!userId.Equals(Guid.Empty))
                {
                    items = recursive ? folder.GetRecursiveChildren(user, query).ToList() : folder.GetChildren(user, true).Where(Filter).ToList();
                }
                else
                {
                    items = recursive ? folder.GetRecursiveChildren(Filter) : folder.Children.Where(Filter).ToList();
                }
            }
            else
            {
                items = new[] { parentItem }.Where(Filter).ToList();
            }

            var extractedItems = GetAllItems(items);

            var filteredItems = _libraryManager.Sort(extractedItems, user, RequestHelpers.GetOrderBy(sortBy, sortOrder));

            var ibnItemsArray = filteredItems.ToList();

            IEnumerable <BaseItem> ibnItems = ibnItemsArray;

            var result = new QueryResult <BaseItemDto> {
                TotalRecordCount = ibnItemsArray.Count
            };

            if (startIndex.HasValue || limit.HasValue)
            {
                if (startIndex.HasValue)
                {
                    ibnItems = ibnItems.Skip(startIndex.Value);
                }

                if (limit.HasValue)
                {
                    ibnItems = ibnItems.Take(limit.Value);
                }
            }

            var tuples = ibnItems.Select(i => new Tuple <BaseItem, List <BaseItem> >(i, new List <BaseItem>()));

            var dtos = tuples.Select(i => _dtoService.GetItemByNameDto(i.Item1, dtoOptions, i.Item2, user));

            result.Items = dtos.Where(i => i != null).ToArray();

            return(result);
        }
Пример #8
0
        public ActionResult <QueryResult <BaseItemDto> > GetStudios(
            [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] bool?isFavorite,
            [FromQuery] bool?enableUserData,
            [FromQuery] int?imageTypeLimit,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes,
            [FromQuery] Guid?userId,
            [FromQuery] string?nameStartsWithOrGreater,
            [FromQuery] string?nameStartsWith,
            [FromQuery] string?nameLessThan,
            [FromQuery] bool?enableImages           = true,
            [FromQuery] bool enableTotalRecordCount = true)
        {
            var dtoOptions = new DtoOptions {
                Fields = fields
            }
            .AddClientFields(Request)
            .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);

            User?user = userId.HasValue && userId != Guid.Empty ? _userManager.GetUserById(userId.Value) : null;

            var parentItem = _libraryManager.GetParentItem(parentId, userId);

            var query = new InternalItemsQuery(user)
            {
                ExcludeItemTypes        = RequestHelpers.GetItemTypeStrings(excludeItemTypes),
                IncludeItemTypes        = RequestHelpers.GetItemTypeStrings(includeItemTypes),
                StartIndex              = startIndex,
                Limit                   = limit,
                IsFavorite              = isFavorite,
                NameLessThan            = nameLessThan,
                NameStartsWith          = nameStartsWith,
                NameStartsWithOrGreater = nameStartsWithOrGreater,
                DtoOptions              = dtoOptions,
                SearchTerm              = searchTerm,
                EnableTotalRecordCount  = enableTotalRecordCount
            };

            if (parentId.HasValue)
            {
                if (parentItem is Folder)
                {
                    query.AncestorIds = new[] { parentId.Value };
                }
                else
                {
                    query.ItemIds = new[] { parentId.Value };
                }
            }

            var result = _libraryManager.GetStudios(query);
            var shouldIncludeItemTypes = includeItemTypes.Length != 0;

            return(RequestHelpers.CreateQueryResult(result, dtoOptions, _dtoService, shouldIncludeItemTypes, user));
        }