mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-30 04:18:27 +01:00
Add more channel features
This commit is contained in:
@@ -18,6 +18,21 @@ namespace MediaBrowser.Api
|
||||
public int? Limit { get; set; }
|
||||
}
|
||||
|
||||
[Route("/Channels/{Id}/Items", "GET")]
|
||||
[Api(("Gets channel items"))]
|
||||
public class GetChannelItems : IReturn<QueryResult<BaseItemDto>>
|
||||
{
|
||||
public string Id { get; set; }
|
||||
|
||||
public string CategoryId { get; set; }
|
||||
|
||||
public string UserId { get; set; }
|
||||
|
||||
public int? StartIndex { get; set; }
|
||||
|
||||
public int? Limit { get; set; }
|
||||
}
|
||||
|
||||
public class ChannelService : BaseApiService
|
||||
{
|
||||
private readonly IChannelManager _channelManager;
|
||||
@@ -39,5 +54,20 @@ namespace MediaBrowser.Api
|
||||
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
public object Get(GetChannelItems request)
|
||||
{
|
||||
var result = _channelManager.GetChannelItems(new ChannelItemQuery
|
||||
{
|
||||
Limit = request.Limit,
|
||||
StartIndex = request.StartIndex,
|
||||
UserId = request.UserId,
|
||||
ChannelId = request.Id,
|
||||
CategoryId = request.CategoryId
|
||||
|
||||
}, CancellationToken.None).Result;
|
||||
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Controller.Channels;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
@@ -6,6 +7,7 @@ using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Channels;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Querying;
|
||||
@@ -242,18 +244,20 @@ namespace MediaBrowser.Api.Library
|
||||
private readonly IUserDataManager _userDataManager;
|
||||
|
||||
private readonly IDtoService _dtoService;
|
||||
private readonly IChannelManager _channelManager;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LibraryService" /> class.
|
||||
/// </summary>
|
||||
public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager,
|
||||
IDtoService dtoService, IUserDataManager userDataManager)
|
||||
IDtoService dtoService, IUserDataManager userDataManager, IChannelManager channelManager)
|
||||
{
|
||||
_itemRepo = itemRepo;
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
_dtoService = dtoService;
|
||||
_userDataManager = userDataManager;
|
||||
_channelManager = channelManager;
|
||||
}
|
||||
|
||||
public object Get(GetMediaFolders request)
|
||||
@@ -417,6 +421,21 @@ namespace MediaBrowser.Api.Library
|
||||
var songs = filteredItems.OfType<Audio>().ToList();
|
||||
var series = filteredItems.OfType<Series>().ToList();
|
||||
|
||||
var channelCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
channelCount = _channelManager.GetChannels(new ChannelQuery
|
||||
{
|
||||
UserId = request.UserId.HasValue ? request.UserId.Value.ToString("N") : null
|
||||
|
||||
}, CancellationToken.None).Result.TotalRecordCount;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.ErrorException("Error getting channels", ex);
|
||||
}
|
||||
|
||||
var counts = new ItemCounts
|
||||
{
|
||||
AlbumCount = albums.Count,
|
||||
@@ -432,7 +451,9 @@ namespace MediaBrowser.Api.Library
|
||||
BoxSetCount = boxsets.Count,
|
||||
BookCount = books.Count,
|
||||
|
||||
UniqueTypes = items.Select(i => i.GetClientTypeName()).Distinct().ToList()
|
||||
UniqueTypes = items.Select(i => i.GetClientTypeName()).Distinct().ToList(),
|
||||
|
||||
ChannelCount = channelCount
|
||||
};
|
||||
|
||||
return ToOptimizedSerializedResultUsingCache(counts);
|
||||
|
||||
@@ -113,7 +113,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
|
||||
[ApiMember(Name = "NameStartsWith", Description = "Optional filter by items whose name is sorted equally than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
public string NameStartsWith { get; set; }
|
||||
|
||||
|
||||
[ApiMember(Name = "NameLessThan", Description = "Optional filter by items whose name is equally or lesser than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
public string NameLessThan { get; set; }
|
||||
|
||||
@@ -240,7 +240,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
public bool? HasOfficialRating { get; set; }
|
||||
|
||||
[ApiMember(Name = "CollapseBoxSetItems", Description = "Whether or not to hide items behind their boxsets.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
||||
public bool CollapseBoxSetItems { get; set; }
|
||||
public bool? CollapseBoxSetItems { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -318,7 +318,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
|
||||
items = items.AsEnumerable();
|
||||
|
||||
if (request.CollapseBoxSetItems && AllowBoxSetCollapsing(request))
|
||||
if (CollapseBoxSetItems(request))
|
||||
{
|
||||
items = CollapseItemsWithinBoxSets(items, user);
|
||||
}
|
||||
@@ -346,6 +346,22 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
};
|
||||
}
|
||||
|
||||
private bool CollapseBoxSetItems(GetItems request)
|
||||
{
|
||||
var param = request.CollapseBoxSetItems;
|
||||
|
||||
if (!param.HasValue)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(request.IncludeItemTypes) &&
|
||||
request.IncludeItemTypes.Split(',').Contains("Movie", StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
param = true;
|
||||
}
|
||||
}
|
||||
|
||||
return param.HasValue && param.Value && AllowBoxSetCollapsing(request);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the items to serialize.
|
||||
/// </summary>
|
||||
@@ -786,7 +802,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
{
|
||||
items = items.Where(i => string.Compare(request.NameStartsWith, i.SortName.Substring(0, 1), StringComparison.CurrentCultureIgnoreCase) == 0);
|
||||
}
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(request.NameLessThan))
|
||||
{
|
||||
items = items.Where(i => string.Compare(request.NameLessThan, i.SortName, StringComparison.CurrentCultureIgnoreCase) == 1);
|
||||
|
||||
Reference in New Issue
Block a user