mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-19 23:35:25 +03:00
update audio sync params
This commit is contained in:
104
MediaBrowser.Api/SuggestionsService.cs
Normal file
104
MediaBrowser.Api/SuggestionsService.cs
Normal file
@@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user