SuggestionsService.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using System.Linq;
  3. using Jellyfin.Data.Entities;
  4. using MediaBrowser.Controller.Configuration;
  5. using MediaBrowser.Controller.Dto;
  6. using MediaBrowser.Controller.Entities;
  7. using MediaBrowser.Controller.Library;
  8. using MediaBrowser.Controller.Net;
  9. using MediaBrowser.Model.Dto;
  10. using MediaBrowser.Model.Entities;
  11. using MediaBrowser.Model.Querying;
  12. using MediaBrowser.Model.Services;
  13. using Microsoft.Extensions.Logging;
  14. namespace MediaBrowser.Api
  15. {
  16. [Route("/Users/{UserId}/Suggestions", "GET", Summary = "Gets items based on a query.")]
  17. public class GetSuggestedItems : IReturn<QueryResult<BaseItemDto>>
  18. {
  19. public string MediaType { get; set; }
  20. public string Type { get; set; }
  21. public Guid UserId { get; set; }
  22. public bool EnableTotalRecordCount { get; set; }
  23. public int? StartIndex { get; set; }
  24. public int? Limit { get; set; }
  25. public string[] GetMediaTypes()
  26. {
  27. return (MediaType ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  28. }
  29. public string[] GetIncludeItemTypes()
  30. {
  31. return (Type ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  32. }
  33. }
  34. public class SuggestionsService : BaseApiService
  35. {
  36. private readonly IDtoService _dtoService;
  37. private readonly IAuthorizationContext _authContext;
  38. private readonly IUserManager _userManager;
  39. private readonly ILibraryManager _libraryManager;
  40. public SuggestionsService(
  41. ILogger<SuggestionsService> logger,
  42. IServerConfigurationManager serverConfigurationManager,
  43. IHttpResultFactory httpResultFactory,
  44. IDtoService dtoService,
  45. IAuthorizationContext authContext,
  46. IUserManager userManager,
  47. ILibraryManager libraryManager)
  48. : base(logger, serverConfigurationManager, httpResultFactory)
  49. {
  50. _dtoService = dtoService;
  51. _authContext = authContext;
  52. _userManager = userManager;
  53. _libraryManager = libraryManager;
  54. }
  55. public object Get(GetSuggestedItems request)
  56. {
  57. return GetResultItems(request);
  58. }
  59. private QueryResult<BaseItemDto> GetResultItems(GetSuggestedItems request)
  60. {
  61. var user = !request.UserId.Equals(Guid.Empty) ? _userManager.GetUserById(request.UserId) : null;
  62. var dtoOptions = GetDtoOptions(_authContext, request);
  63. var result = GetItems(request, user, dtoOptions);
  64. var dtoList = _dtoService.GetBaseItemDtos(result.Items, dtoOptions, user);
  65. return new QueryResult<BaseItemDto>
  66. {
  67. TotalRecordCount = result.TotalRecordCount,
  68. Items = dtoList
  69. };
  70. }
  71. private QueryResult<BaseItem> GetItems(GetSuggestedItems request, User user, DtoOptions dtoOptions)
  72. {
  73. return _libraryManager.GetItemsResult(new InternalItemsQuery(user)
  74. {
  75. OrderBy = new[] { ItemSortBy.Random }.Select(i => new ValueTuple<string, SortOrder>(i, SortOrder.Descending)).ToArray(),
  76. MediaTypes = request.GetMediaTypes(),
  77. IncludeItemTypes = request.GetIncludeItemTypes(),
  78. IsVirtualItem = false,
  79. StartIndex = request.StartIndex,
  80. Limit = request.Limit,
  81. DtoOptions = dtoOptions,
  82. EnableTotalRecordCount = request.EnableTotalRecordCount,
  83. Recursive = true
  84. });
  85. }
  86. }
  87. }