|
@@ -1326,8 +1326,9 @@ namespace MediaBrowser.Controller.Entities
|
|
}
|
|
}
|
|
|
|
|
|
// Use some hackery to get the extra type based on foldername
|
|
// Use some hackery to get the extra type based on foldername
|
|
- Enum.TryParse(extraFolderName.Replace(" ", ""), true, out ExtraType extraType);
|
|
|
|
- item.ExtraType = extraType;
|
|
|
|
|
|
+ item.ExtraType = Enum.TryParse(extraFolderName.Replace(" ", string.Empty), true, out ExtraType extraType)
|
|
|
|
+ ? extraType
|
|
|
|
+ : Model.Entities.ExtraType.Unknown;
|
|
|
|
|
|
return item;
|
|
return item;
|
|
|
|
|
|
@@ -2877,14 +2878,29 @@ namespace MediaBrowser.Controller.Entities
|
|
/// <value>The remote trailers.</value>
|
|
/// <value>The remote trailers.</value>
|
|
public IReadOnlyList<MediaUrl> RemoteTrailers { get; set; }
|
|
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()
|
|
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);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// Get all extras with specific types that are associated with this item.
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="extraTypes">The types of extras to retrieve.</param>
|
|
|
|
+ /// <returns>An enumerable containing the extras.</returns>
|
|
public IEnumerable<BaseItem> GetExtras(IReadOnlyCollection<ExtraType> extraTypes)
|
|
public IEnumerable<BaseItem> GetExtras(IReadOnlyCollection<ExtraType> extraTypes)
|
|
{
|
|
{
|
|
- 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.ExtraType.HasValue && extraTypes.Contains(i.ExtraType.Value));
|
|
}
|
|
}
|
|
|
|
|
|
public IEnumerable<BaseItem> GetTrailers()
|
|
public IEnumerable<BaseItem> GetTrailers()
|
|
@@ -2895,11 +2911,6 @@ namespace MediaBrowser.Controller.Entities
|
|
return Array.Empty<BaseItem>();
|
|
return Array.Empty<BaseItem>();
|
|
}
|
|
}
|
|
|
|
|
|
- public IEnumerable<BaseItem> GetDisplayExtras()
|
|
|
|
- {
|
|
|
|
- return GetExtras(DisplayExtraTypes);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public virtual bool IsHD => Height >= 720;
|
|
public virtual bool IsHD => Height >= 720;
|
|
|
|
|
|
public bool IsShortcut { get; set; }
|
|
public bool IsShortcut { get; set; }
|
|
@@ -2917,8 +2928,19 @@ namespace MediaBrowser.Controller.Entities
|
|
return RunTimeTicks ?? 0;
|
|
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.Unknown,
|
|
|
|
+ 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;
|
|
public virtual bool SupportsExternalTransfer => false;
|
|
|
|
|