mirror of https://github.com/jellyfin/jellyfin.git
Add ability to exclude active sessions from resumable items
This commit is contained in:
parent
17a273d237
commit
8295a3be0d
|
@ -10,6 +10,7 @@ using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using MediaBrowser.Controller.Session;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
|
@ -33,6 +34,7 @@ namespace Jellyfin.Api.Controllers
|
||||||
private readonly ILocalizationManager _localization;
|
private readonly ILocalizationManager _localization;
|
||||||
private readonly IDtoService _dtoService;
|
private readonly IDtoService _dtoService;
|
||||||
private readonly ILogger<ItemsController> _logger;
|
private readonly ILogger<ItemsController> _logger;
|
||||||
|
private readonly ISessionManager _sessionManager;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ItemsController"/> class.
|
/// Initializes a new instance of the <see cref="ItemsController"/> class.
|
||||||
|
@ -42,18 +44,21 @@ namespace Jellyfin.Api.Controllers
|
||||||
/// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param>
|
/// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param>
|
||||||
/// <param name="dtoService">Instance of the <see cref="IDtoService"/> interface.</param>
|
/// <param name="dtoService">Instance of the <see cref="IDtoService"/> interface.</param>
|
||||||
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
||||||
|
/// <param name="sessionManager">Instance of the <see cref="ISessionManager"/> interface.</param>
|
||||||
public ItemsController(
|
public ItemsController(
|
||||||
IUserManager userManager,
|
IUserManager userManager,
|
||||||
ILibraryManager libraryManager,
|
ILibraryManager libraryManager,
|
||||||
ILocalizationManager localization,
|
ILocalizationManager localization,
|
||||||
IDtoService dtoService,
|
IDtoService dtoService,
|
||||||
ILogger<ItemsController> logger)
|
ILogger<ItemsController> logger,
|
||||||
|
ISessionManager sessionManager)
|
||||||
{
|
{
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
_libraryManager = libraryManager;
|
_libraryManager = libraryManager;
|
||||||
_localization = localization;
|
_localization = localization;
|
||||||
_dtoService = dtoService;
|
_dtoService = dtoService;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_sessionManager = sessionManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -763,6 +768,7 @@ namespace Jellyfin.Api.Controllers
|
||||||
/// <param name="includeItemTypes">Optional. If specified, results will be filtered based on the item type. This allows multiple, comma delimited.</param>
|
/// <param name="includeItemTypes">Optional. If specified, results will be filtered based on the item type. This allows multiple, comma delimited.</param>
|
||||||
/// <param name="enableTotalRecordCount">Optional. Enable the total record count.</param>
|
/// <param name="enableTotalRecordCount">Optional. Enable the total record count.</param>
|
||||||
/// <param name="enableImages">Optional. Include image information in output.</param>
|
/// <param name="enableImages">Optional. Include image information in output.</param>
|
||||||
|
/// <param name="excludeActiveSessions">Optional. Whether to exclude the currently active sessions.</param>
|
||||||
/// <response code="200">Items returned.</response>
|
/// <response code="200">Items returned.</response>
|
||||||
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the items that are resumable.</returns>
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the items that are resumable.</returns>
|
||||||
[HttpGet("Users/{userId}/Items/Resume")]
|
[HttpGet("Users/{userId}/Items/Resume")]
|
||||||
|
@ -781,7 +787,8 @@ namespace Jellyfin.Api.Controllers
|
||||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] excludeItemTypes,
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] excludeItemTypes,
|
||||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
|
||||||
[FromQuery] bool enableTotalRecordCount = true,
|
[FromQuery] bool enableTotalRecordCount = true,
|
||||||
[FromQuery] bool? enableImages = true)
|
[FromQuery] bool? enableImages = true,
|
||||||
|
[FromQuery] bool excludeActiveSessions = false)
|
||||||
{
|
{
|
||||||
var user = _userManager.GetUserById(userId);
|
var user = _userManager.GetUserById(userId);
|
||||||
var parentIdGuid = parentId ?? Guid.Empty;
|
var parentIdGuid = parentId ?? Guid.Empty;
|
||||||
|
@ -801,6 +808,15 @@ namespace Jellyfin.Api.Controllers
|
||||||
.ToArray();
|
.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var excludeItemIds = Array.Empty<Guid>();
|
||||||
|
if (excludeActiveSessions)
|
||||||
|
{
|
||||||
|
excludeItemIds = _sessionManager.Sessions
|
||||||
|
.Where(s => s.UserId == userId && s.NowPlayingItem != null)
|
||||||
|
.Select(s => s.NowPlayingItem.Id)
|
||||||
|
.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
var itemsResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user)
|
var itemsResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
OrderBy = new[] { (ItemSortBy.DatePlayed, SortOrder.Descending) },
|
OrderBy = new[] { (ItemSortBy.DatePlayed, SortOrder.Descending) },
|
||||||
|
@ -817,7 +833,8 @@ namespace Jellyfin.Api.Controllers
|
||||||
AncestorIds = ancestorIds,
|
AncestorIds = ancestorIds,
|
||||||
IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
|
IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
|
||||||
ExcludeItemTypes = RequestHelpers.GetItemTypeStrings(excludeItemTypes),
|
ExcludeItemTypes = RequestHelpers.GetItemTypeStrings(excludeItemTypes),
|
||||||
SearchTerm = searchTerm
|
SearchTerm = searchTerm,
|
||||||
|
ExcludeItemIds = excludeItemIds
|
||||||
});
|
});
|
||||||
|
|
||||||
var returnItems = _dtoService.GetBaseItemDtos(itemsResult.Items, dtoOptions, user);
|
var returnItems = _dtoService.GetBaseItemDtos(itemsResult.Items, dtoOptions, user);
|
||||||
|
|
Loading…
Reference in New Issue