@ -10,6 +10,7 @@ using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Entities.Audio ;
using MediaBrowser.Controller.Library ;
using MediaBrowser.Controller.Session ;
using MediaBrowser.Model.Dto ;
using MediaBrowser.Model.Entities ;
using MediaBrowser.Model.Globalization ;
@ -33,6 +34,7 @@ namespace Jellyfin.Api.Controllers
private readonly ILocalizationManager _localization ;
private readonly IDtoService _dtoService ;
private readonly ILogger < ItemsController > _logger ;
private readonly ISessionManager _sessionManager ;
/// <summary>
/// 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="dtoService">Instance of the <see cref="IDtoService"/> 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 (
IUserManager userManager ,
ILibraryManager libraryManager ,
ILocalizationManager localization ,
IDtoService dtoService ,
ILogger < ItemsController > logger )
ILogger < ItemsController > logger ,
ISessionManager sessionManager )
{
_userManager = userManager ;
_libraryManager = libraryManager ;
_localization = localization ;
_dtoService = dtoService ;
_logger = logger ;
_sessionManager = sessionManager ;
}
/// <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="enableTotalRecordCount">Optional. Enable the total record count.</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>
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the items that are resumable.</returns>
[HttpGet("Users/{userId}/Items/Resume")]
@ -781,7 +787,8 @@ namespace Jellyfin.Api.Controllers
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind [ ] excludeItemTypes ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind [ ] includeItemTypes ,
[FromQuery] bool enableTotalRecordCount = true ,
[FromQuery] bool? enableImages = true )
[FromQuery] bool? enableImages = true ,
[FromQuery] bool excludeActiveSessions = false )
{
var user = _userManager . GetUserById ( userId ) ;
var parentIdGuid = parentId ? ? Guid . Empty ;
@ -801,6 +808,15 @@ namespace Jellyfin.Api.Controllers
. 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 )
{
OrderBy = new [ ] { ( ItemSortBy . DatePlayed , SortOrder . Descending ) } ,
@ -817,7 +833,8 @@ namespace Jellyfin.Api.Controllers
AncestorIds = ancestorIds ,
IncludeItemTypes = RequestHelpers . GetItemTypeStrings ( includeItemTypes ) ,
ExcludeItemTypes = RequestHelpers . GetItemTypeStrings ( excludeItemTypes ) ,
SearchTerm = searchTerm
SearchTerm = searchTerm ,
ExcludeItemIds = excludeItemIds
} ) ;
var returnItems = _dtoService . GetBaseItemDtos ( itemsResult . Items , dtoOptions , user ) ;