diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-04-15 15:45:33 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-04-15 15:45:33 -0400 |
| commit | 8eb4c034b44f9c414ec19e7f0ab40c2070a8cf64 (patch) | |
| tree | a196142c1f5f4771f64955109a9da7f3049e1d91 /MediaBrowser.Api/SuggestionsService.cs | |
| parent | 508edad222d46a7cee80c2eda68494e4f701cfec (diff) | |
update audio sync params
Diffstat (limited to 'MediaBrowser.Api/SuggestionsService.cs')
| -rw-r--r-- | MediaBrowser.Api/SuggestionsService.cs | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/MediaBrowser.Api/SuggestionsService.cs b/MediaBrowser.Api/SuggestionsService.cs new file mode 100644 index 000000000..7196c0f39 --- /dev/null +++ b/MediaBrowser.Api/SuggestionsService.cs @@ -0,0 +1,104 @@ +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Net; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Services; +using System; +using System.Linq; +using System.Threading.Tasks; +using MediaBrowser.Controller.Library; + +namespace MediaBrowser.Api +{ + [Route("/Users/{UserId}/Suggestions", "GET", Summary = "Gets items based on a query.")] + public class GetSuggestedItems : IReturn<QueryResult<BaseItem>> + { + public string MediaType { get; set; } + public string Type { get; set; } + public string UserId { get; set; } + public bool EnableTotalRecordCount { get; set; } + public int? StartIndex { get; set; } + public int? Limit { get; set; } + + public string[] GetMediaTypes() + { + return (MediaType ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + } + + public string[] GetIncludeItemTypes() + { + return (Type ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + } + } + + public class SuggestionsService : BaseApiService + { + private readonly IDtoService _dtoService; + private readonly IAuthorizationContext _authContext; + private readonly IUserManager _userManager; + private readonly ILibraryManager _libraryManager; + + public SuggestionsService(IDtoService dtoService, IAuthorizationContext authContext, IUserManager userManager, ILibraryManager libraryManager) + { + _dtoService = dtoService; + _authContext = authContext; + _userManager = userManager; + _libraryManager = libraryManager; + } + + public async Task<object> Get(GetSuggestedItems request) + { + var result = await GetResultItems(request).ConfigureAwait(false); + + return ToOptimizedResult(result); + } + + private async Task<QueryResult<BaseItemDto>> GetResultItems(GetSuggestedItems request) + { + var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; + + var dtoOptions = GetDtoOptions(_authContext, request); + var result = GetItems(request, user, dtoOptions); + + var dtoList = await _dtoService.GetBaseItemDtos(result.Items, dtoOptions, user).ConfigureAwait(false); + + if (dtoList == null) + { + throw new InvalidOperationException("GetBaseItemDtos returned null"); + } + + return new QueryResult<BaseItemDto> + { + TotalRecordCount = result.TotalRecordCount, + Items = dtoList.ToArray() + }; + } + + private QueryResult<BaseItem> GetItems(GetSuggestedItems request, User user, DtoOptions dtoOptions) + { + var query = new InternalItemsQuery(user) + { + SortBy = new string[] { ItemSortBy.Random }, + MediaTypes = request.GetMediaTypes(), + IncludeItemTypes = request.GetIncludeItemTypes(), + IsVirtualItem = false, + StartIndex = request.StartIndex, + Limit = request.Limit, + DtoOptions = dtoOptions + }; + + if (request.EnableTotalRecordCount) + { + return _libraryManager.GetItemsResult(query); + } + + var items = _libraryManager.GetItemList(query).ToArray(); + + return new QueryResult<BaseItem> + { + Items = items + }; + } + } +} |
