private ItemsResult GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func <BaseItem, List <PersonInfo>, List <PersonInfo>, BaseItem, int> getSimilarityScore) { var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var inputItems = _libraryManager.GetArtists(user.RootFolder.GetRecursiveChildren(user, i => i is IHasArtist).OfType <IHasArtist>()); var list = inputItems.ToList(); var items = SimilarItemsHelper.GetSimilaritems(item, _libraryManager, list, getSimilarityScore).ToList(); IEnumerable <BaseItem> returnItems = items; if (request.Limit.HasValue) { returnItems = returnItems.Take(request.Limit.Value); } var dtoOptions = GetDtoOptions(request); var result = new ItemsResult { Items = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user).ToArray(), TotalRecordCount = items.Count }; return(result); }
private ItemsResult GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func<BaseItem, List<PersonInfo>, List<PersonInfo>, BaseItem, int> getSimilarityScore) { var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var inputItems = _libraryManager.GetArtists(user.RootFolder.GetRecursiveChildren(user, i => i is IHasArtist).OfType<IHasArtist>()); var list = inputItems.ToList(); var items = SimilarItemsHelper.GetSimilaritems(item, _libraryManager, list, getSimilarityScore).ToList(); IEnumerable<BaseItem> returnItems = items; if (request.Limit.HasValue) { returnItems = returnItems.Take(request.Limit.Value); } var dtoOptions = GetDtoOptions(request); var result = new ItemsResult { Items = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user).ToArray(), TotalRecordCount = items.Count }; return result; }
private async Task <QueryResult <BaseItemDto> > GetSimilarItemsResult(BaseGetSimilarItemsFromItem request) { var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user) { Limit = request.Limit, IncludeItemTypes = new[] { typeof(Movie).Name, typeof(Trailer).Name, typeof(LiveTvProgram).Name }, IsMovie = true, SimilarTo = item, EnableGroupByMetadataKey = true }).ToList(); var dtoOptions = GetDtoOptions(request); var result = new QueryResult <BaseItemDto> { Items = (await _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user).ConfigureAwait(false)).ToArray(), TotalRecordCount = itemsResult.Count }; return(result); }
private async Task <ItemsResult> GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func <BaseItem, List <PersonInfo>, List <PersonInfo>, BaseItem, int> getSimilarityScore) { var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var query = new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Movie).Name } }; if (user == null || user.Configuration.IncludeTrailersInSuggestions) { var includeList = query.IncludeItemTypes.ToList(); includeList.Add(typeof(Trailer).Name); query.IncludeItemTypes = includeList.ToArray(); } var parentIds = new string[] { }; var list = _libraryManager.GetItemList(query, parentIds) .DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString("N")) .ToList(); if (item is Video) { var imdbId = item.GetProviderId(MetadataProviders.Imdb); // Use imdb id to try to filter duplicates of the same item if (!string.IsNullOrWhiteSpace(imdbId)) { list = list .Where(i => !string.Equals(imdbId, i.GetProviderId(MetadataProviders.Imdb), StringComparison.OrdinalIgnoreCase)) .ToList(); } } var items = SimilarItemsHelper.GetSimilaritems(item, _libraryManager, list, getSimilarityScore).ToList(); IEnumerable <BaseItem> returnItems = items; if (request.Limit.HasValue) { returnItems = returnItems.Take(request.Limit.Value); } var dtoOptions = GetDtoOptions(request); var result = new ItemsResult { Items = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user).ToArray(), TotalRecordCount = items.Count }; return(result); }
private async Task <ItemsResult> GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func <BaseItem, bool> includeInSearch, Func <BaseItem, BaseItem, int> getSimilarityScore) { var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; var item = string.IsNullOrEmpty(request.Id) ? (request.UserId.HasValue ? user.RootFolder : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var fields = request.GetItemFields().ToList(); var inputItems = user == null ? _libraryManager.RootFolder.GetRecursiveChildren().Where(i => i.Id != item.Id) : user.RootFolder.GetRecursiveChildren(user).Where(i => i.Id != item.Id); inputItems = inputItems.Where(includeInSearch); var list = inputItems.ToList(); if (item is Movie && user != null && user.Configuration.IncludeTrailersInSuggestions) { var trailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery { ContentTypes = new[] { ChannelMediaContentType.MovieExtra }, ExtraTypes = new[] { ExtraType.Trailer }, UserId = user.Id.ToString("N") }, CancellationToken.None).ConfigureAwait(false); var newTrailers = trailerResult.Items; list.AddRange(newTrailers); list = list .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase) .DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString(), StringComparer.OrdinalIgnoreCase) .ToList(); } var items = SimilarItemsHelper.GetSimilaritems(item, list, getSimilarityScore).ToList(); IEnumerable <BaseItem> returnItems = items; if (request.Limit.HasValue) { returnItems = returnItems.Take(request.Limit.Value); } var result = new ItemsResult { Items = returnItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(), TotalRecordCount = items.Count }; return(result); }
private QueryResult <BaseItemDto> GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, string[] includeItemTypes) { var user = !request.UserId.Equals(Guid.Empty) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!request.UserId.Equals(Guid.Empty) ? _libraryManager.GetUserRootFolder() : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var dtoOptions = GetDtoOptions(_authContext, request); var query = new InternalItemsQuery(user) { Limit = request.Limit, IncludeItemTypes = includeItemTypes, SimilarTo = item, DtoOptions = dtoOptions, EnableTotalRecordCount = false }; // ExcludeArtistIds if (!string.IsNullOrEmpty(request.ExcludeArtistIds)) { query.ExcludeArtistIds = BaseApiService.GetGuids(request.ExcludeArtistIds); } List <BaseItem> itemsResult; if (item is MusicArtist) { query.IncludeItemTypes = Array.Empty <string>(); itemsResult = _libraryManager.GetArtists(query).Items.Select(i => i.Item1).ToList(); } else { itemsResult = _libraryManager.GetItemList(query); } var returnList = _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user); var result = new QueryResult <BaseItemDto> { Items = returnList, TotalRecordCount = itemsResult.Count }; return(result); }
public QueryResult <BaseItemDto> GetSimilarItemsResult(BaseGetSimilarItemsFromItem request) { var user = !request.UserId.Equals(Guid.Empty) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!request.UserId.Equals(Guid.Empty) ? _libraryManager.GetUserRootFolder() : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var itemTypes = new List <string> { typeof(Movie).Name }; if (ServerConfigurationManager.Configuration.EnableExternalContentInSuggestions) { itemTypes.Add(typeof(Trailer).Name); itemTypes.Add(typeof(LiveTvProgram).Name); } var dtoOptions = GetDtoOptions(_authContext, request); var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user) { Limit = request.Limit, IncludeItemTypes = itemTypes.ToArray(), IsMovie = true, SimilarTo = item, EnableGroupByMetadataKey = true, DtoOptions = dtoOptions }); var returnList = _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user); var result = new QueryResult <BaseItemDto> { Items = returnList, TotalRecordCount = itemsResult.Count }; return(result); }
private async Task <ItemsResult> GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func <BaseItem, bool> includeInSearch, Func <BaseItem, BaseItem, int> getSimilarityScore) { var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); Func <BaseItem, bool> filter = i => i.Id != item.Id && includeInSearch(i); var inputItems = user == null ? _libraryManager.RootFolder.GetRecursiveChildren(filter) : user.RootFolder.GetRecursiveChildren(user, filter); var list = inputItems.ToList(); if (item is Movie && user != null && user.Configuration.IncludeTrailersInSuggestions) { var trailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery { ContentTypes = new[] { ChannelMediaContentType.MovieExtra }, ExtraTypes = new[] { ExtraType.Trailer }, UserId = user.Id.ToString("N") }, CancellationToken.None).ConfigureAwait(false); var newTrailers = trailerResult.Items; list.AddRange(newTrailers); list = list .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase) .DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString(), StringComparer.OrdinalIgnoreCase) .ToList(); } if (item is Video) { var imdbId = item.GetProviderId(MetadataProviders.Imdb); // Use imdb id to try to filter duplicates of the same item if (!string.IsNullOrWhiteSpace(imdbId)) { list = list .Where(i => !string.Equals(imdbId, i.GetProviderId(MetadataProviders.Imdb), StringComparison.OrdinalIgnoreCase)) .ToList(); } } var items = SimilarItemsHelper.GetSimilaritems(item, list, getSimilarityScore).ToList(); IEnumerable <BaseItem> returnItems = items; if (request.Limit.HasValue) { returnItems = returnItems.Take(request.Limit.Value); } var dtoOptions = GetDtoOptions(request); var result = new ItemsResult { Items = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user).ToArray(), TotalRecordCount = items.Count }; return(result); }