All checks were successful
continuous-integration/drone/push Build is passing
53 lines
1.8 KiB
C#
53 lines
1.8 KiB
C#
|
|
using MediaBrowser.Controller.Entities;
|
|
using MediaBrowser.Model.Dto;
|
|
|
|
namespace Jellyfin.Plugin.Cinema;
|
|
|
|
static class CinemaVideoExtensions
|
|
{
|
|
public static IEnumerable<(BaseItem Item, MediaSourceType MediaSourceType)>? VideoGetAllItemsForMediaSources<T>(this T @this)
|
|
where T : Video, new()
|
|
{
|
|
// Non-primary version items use default implementation
|
|
if (!string.IsNullOrEmpty(@this.PrimaryVersionId))
|
|
{
|
|
return null; // means call base.GetAllItemsForMediaSources
|
|
}
|
|
|
|
// Our media source manager must be present
|
|
CinemaMediaSourceManager? msm;
|
|
if (!CinemaMediaSourceManager.TryGetInstance(out msm))
|
|
return Enumerable.Empty<(BaseItem Item, MediaSourceType MediaSourceType)>();
|
|
|
|
// Generate item for each CinemaLib.API.Stream. Obtaining the file sub-streams themselves
|
|
// is intercepted in CinemaMediaSourceManager.GetMediaStreams
|
|
return GetAllItemsForMediaSourcesEnumerate(@this, msm);
|
|
}
|
|
|
|
private static IEnumerable<(BaseItem Item, MediaSourceType MediaSourceType)> GetAllItemsForMediaSourcesEnumerate<T>(T @this, CinemaMediaSourceManager msm)
|
|
where T : Video, new()
|
|
{
|
|
IEnumerable<T>? versions = msm.GetVideoVersions(@this, default).GetAwaiter().GetResult();
|
|
if (versions != null)
|
|
foreach (T i in versions)
|
|
yield return (i, MediaSourceType.Grouping);
|
|
}
|
|
|
|
public static List<MediaSourceInfo> VideoGetMediaSources<T>(this T @this, bool enablePathSubstitution)
|
|
where T : Video, new()
|
|
{
|
|
List<MediaSourceInfo> result = new List<MediaSourceInfo>();
|
|
|
|
// Our media source manager must be present
|
|
CinemaMediaSourceManager? msm;
|
|
if (!CinemaMediaSourceManager.TryGetInstance(out msm))
|
|
return result;
|
|
|
|
var a = msm.GetVersionInfo(@this, default).GetAwaiter().GetResult();
|
|
if (a != null)
|
|
result.Add(a);
|
|
|
|
return result;
|
|
}
|
|
} |