mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-11-16 10:29:01 -07:00
Display extras with an unknown type
This commit is contained in:
parent
bd4269cb59
commit
5fcbedc194
@ -1055,31 +1055,20 @@ namespace Emby.Server.Implementations.Dto
|
||||
BaseItem[] allExtras = null;
|
||||
|
||||
if (options.ContainsField(ItemFields.SpecialFeatureCount))
|
||||
{
|
||||
if (allExtras == null)
|
||||
{
|
||||
allExtras = item.GetExtras().ToArray();
|
||||
}
|
||||
|
||||
dto.SpecialFeatureCount = allExtras.Count(i => i.ExtraType.HasValue && BaseItem.DisplayExtraTypes.Contains(i.ExtraType.Value));
|
||||
dto.SpecialFeatureCount = allExtras.Count(i => i.HasExtraType(BaseItem.DisplayExtraTypes, true));
|
||||
}
|
||||
|
||||
if (options.ContainsField(ItemFields.LocalTrailerCount))
|
||||
{
|
||||
int trailerCount = 0;
|
||||
if (allExtras == null)
|
||||
{
|
||||
allExtras = item.GetExtras().ToArray();
|
||||
}
|
||||
|
||||
trailerCount += allExtras.Count(i => i.ExtraType.HasValue && i.ExtraType.Value == ExtraType.Trailer);
|
||||
allExtras = allExtras ?? item.GetExtras().ToArray();
|
||||
dto.LocalTrailerCount = allExtras.Count(i => i.HasExtraType(new[] { ExtraType.Trailer }, false));
|
||||
|
||||
if (item is IHasTrailers hasTrailers)
|
||||
{
|
||||
trailerCount += hasTrailers.GetTrailerCount();
|
||||
dto.LocalTrailerCount += hasTrailers.GetTrailerCount();
|
||||
}
|
||||
|
||||
dto.LocalTrailerCount = trailerCount;
|
||||
}
|
||||
|
||||
// Add EpisodeInfo
|
||||
|
@ -380,7 +380,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
|
||||
var dtoOptions = GetDtoOptions(_authContext, request);
|
||||
|
||||
var dtosExtras = item.GetExtras(new[] { ExtraType.Trailer })
|
||||
var dtosExtras = item.GetExtras(new[] { ExtraType.Trailer }, false)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item))
|
||||
.ToArray();
|
||||
|
||||
|
@ -2878,14 +2878,30 @@ namespace MediaBrowser.Controller.Entities
|
||||
/// <value>The remote trailers.</value>
|
||||
public IReadOnlyList<MediaUrl> RemoteTrailers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get all extras associated with this item, sorted by <see cref="SortName"/>.
|
||||
/// </summary>
|
||||
/// <returns>An enumerable containing the items.</returns>
|
||||
public IEnumerable<BaseItem> GetExtras()
|
||||
{
|
||||
return ExtraIds.Select(LibraryManager.GetItemById).Where(i => i != null).OrderBy(i => i.SortName);
|
||||
return ExtraIds
|
||||
.Select(LibraryManager.GetItemById)
|
||||
.Where(i => i != null)
|
||||
.OrderBy(i => i.SortName);
|
||||
}
|
||||
|
||||
public IEnumerable<BaseItem> GetExtras(IReadOnlyCollection<ExtraType> extraTypes)
|
||||
/// <summary>
|
||||
/// Get all extras with specific types that are associated with this item.
|
||||
/// </summary>
|
||||
/// <param name="extraTypes">The types of extras to retrieve.</param>
|
||||
/// <param name="includeUnknownTypes">If true, include extras whose type could not be determined.</param>
|
||||
/// <returns>An enumerable containing the extras.</returns>
|
||||
public IEnumerable<BaseItem> GetExtras(IReadOnlyCollection<ExtraType> extraTypes, bool includeUnknownTypes)
|
||||
{
|
||||
return ExtraIds.Select(LibraryManager.GetItemById).Where(i => i?.ExtraType != null && extraTypes.Contains(i.ExtraType.Value));
|
||||
return ExtraIds
|
||||
.Select(LibraryManager.GetItemById)
|
||||
.Where(i => i != null)
|
||||
.Where(i => i.HasExtraType(extraTypes, includeUnknownTypes));
|
||||
}
|
||||
|
||||
public IEnumerable<BaseItem> GetTrailers()
|
||||
@ -2896,9 +2912,27 @@ namespace MediaBrowser.Controller.Entities
|
||||
return Array.Empty<BaseItem>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get all extras associated with this item that should be displayed as "Special Features" in the UI. This is
|
||||
/// all extras with either an unknown type, or a type contained in <see cref="DisplayExtraTypes"/>.
|
||||
/// </summary>
|
||||
/// <returns>An IEnumerable containing the extra items.</returns>
|
||||
public IEnumerable<BaseItem> GetDisplayExtras()
|
||||
{
|
||||
return GetExtras(DisplayExtraTypes);
|
||||
return GetExtras(DisplayExtraTypes, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if this item is an extra with a type that matches a given set.
|
||||
/// </summary>
|
||||
/// <param name="extraTypes">The types of extras to match with.</param>
|
||||
/// <param name="includeUnknownTypes">If true, include extras whose type could not be determined.</param>
|
||||
/// <returns>True if this item matches, otherwise false.</returns>
|
||||
public bool HasExtraType(IReadOnlyCollection<ExtraType> extraTypes, bool includeUnknownTypes)
|
||||
{
|
||||
return
|
||||
(includeUnknownTypes && (ExtraType == null || ExtraType == 0))
|
||||
|| (ExtraType.HasValue && extraTypes.Contains(ExtraType.Value));
|
||||
}
|
||||
|
||||
public virtual bool IsHD => Height >= 720;
|
||||
@ -2918,8 +2952,18 @@ namespace MediaBrowser.Controller.Entities
|
||||
return RunTimeTicks ?? 0;
|
||||
}
|
||||
|
||||
// Possible types of extra videos
|
||||
public static readonly IReadOnlyCollection<ExtraType> DisplayExtraTypes = new[] { Model.Entities.ExtraType.BehindTheScenes, Model.Entities.ExtraType.Clip, Model.Entities.ExtraType.DeletedScene, Model.Entities.ExtraType.Interview, Model.Entities.ExtraType.Sample, Model.Entities.ExtraType.Scene };
|
||||
/// <summary>
|
||||
/// Extra types that should be counted and displayed as "Special Features" in the UI.
|
||||
/// </summary>
|
||||
public static readonly IReadOnlyCollection<ExtraType> DisplayExtraTypes = new HashSet<ExtraType>
|
||||
{
|
||||
Model.Entities.ExtraType.BehindTheScenes,
|
||||
Model.Entities.ExtraType.Clip,
|
||||
Model.Entities.ExtraType.DeletedScene,
|
||||
Model.Entities.ExtraType.Interview,
|
||||
Model.Entities.ExtraType.Sample,
|
||||
Model.Entities.ExtraType.Scene
|
||||
};
|
||||
|
||||
public virtual bool SupportsExternalTransfer => false;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user