SuggestionsService.cs 3.6 KB

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