Files
stream-cinema/CinemaJellyfin/CinemaVideoExtensions.cs
Roman Vaníček 0bcb6d571f
All checks were successful
continuous-integration/drone/push Build is passing
Rename to Cinema
2024-11-30 00:50:10 +01:00

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;
}
}