Browse Source

add some graphics engine template data fields (#2586)

* move resolution out of media item template data key

* add some media item template data
pull/2587/head
Jason Dove 9 months ago committed by GitHub
parent
commit
b24617fe7c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      CHANGELOG.md
  2. 6
      ErsatzTV.Core/Metadata/FFmpegProfileTemplateDataKey.cs
  3. 5
      ErsatzTV.Core/Metadata/MediaItemTemplateDataKey.cs
  4. 25
      ErsatzTV.Infrastructure/Data/Repositories/TemplateDataRepository.cs
  5. 6
      ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs

4
CHANGELOG.md

@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
### Added
- Show playout warnings count badge in left menu
- Graphics Engine:
- Add `MediaItem_Resolution` template data (the current `Resolution` variable is the FFmpeg Profile resolution)
- Add `MediaItem_Start` template data (DateTimeOffset)
- Add `MediaItem_Stop` template data (DateTimeOffset)
### Fixed
- Fix HLS Direct playback with Jellyfin 10.11

6
ErsatzTV.Core/Metadata/FFmpegProfileTemplateDataKey.cs

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
namespace ErsatzTV.Core.Metadata;
public static class FFmpegProfileTemplateDataKey
{
public static readonly string Resolution = "Resolution";
}

5
ErsatzTV.Core/Metadata/MediaItemTemplateDataKey.cs

@ -2,10 +2,11 @@ namespace ErsatzTV.Core.Metadata; @@ -2,10 +2,11 @@ namespace ErsatzTV.Core.Metadata;
public static class MediaItemTemplateDataKey
{
public static readonly string Resolution = "Resolution";
public static readonly string Resolution = "MediaItem_Resolution";
public static readonly string Duration = "MediaItem_Duration";
public static readonly string StreamSeek = "MediaItem_StreamSeek";
public static readonly string Start = "MediaItem_Start";
public static readonly string Stop = "MediaItem_Stop";
// common
public static readonly string Path = "MediaItem_Path";

25
ErsatzTV.Infrastructure/Data/Repositories/TemplateDataRepository.cs

@ -143,6 +143,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -143,6 +143,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
{
foreach (MovieMetadata metadata in movie.MovieMetadata.HeadOrNone())
{
var headVersion = movie.GetHeadVersion();
var result = new Dictionary<string, object>
{
[MediaItemTemplateDataKey.Title] = metadata.Title,
@ -152,7 +154,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -152,7 +154,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
[MediaItemTemplateDataKey.Directors] =
(metadata.Directors ?? []).Map(d => d.Name).OrderBy(identity),
[MediaItemTemplateDataKey.Genres] = (metadata.Genres ?? []).Map(g => g.Name).OrderBy(identity),
[MediaItemTemplateDataKey.Duration] = movie.GetHeadVersion().Duration,
[MediaItemTemplateDataKey.Resolution] = new Resolution
{ Height = headVersion.Height, Width = headVersion.Width },
[MediaItemTemplateDataKey.Duration] = headVersion.Duration,
[MediaItemTemplateDataKey.ContentRating] = metadata.ContentRating
};
@ -206,6 +210,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -206,6 +210,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
(showMetadata.Genres ?? []).Map(s => s.Name).OrderBy(identity));
}
var headVersion = episode.GetHeadVersion();
foreach (EpisodeMetadata metadata in episode.EpisodeMetadata.HeadOrNone())
{
result.Add(MediaItemTemplateDataKey.Title, metadata.Title);
@ -220,7 +226,10 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -220,7 +226,10 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
result.Add(
MediaItemTemplateDataKey.Genres,
(metadata.Genres ?? []).Map(s => s.Name).OrderBy(identity));
result.Add(MediaItemTemplateDataKey.Duration, episode.GetHeadVersion().Duration);
result.Add(
MediaItemTemplateDataKey.Resolution,
new Resolution { Height = headVersion.Height, Width = headVersion.Width });
result.Add(MediaItemTemplateDataKey.Duration, headVersion.Duration);
}
foreach (var version in episode.MediaVersions.HeadOrNone())
@ -269,6 +278,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -269,6 +278,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
artist = artistMetadata.Title;
}
var headVersion = musicVideo.GetHeadVersion();
var result = new Dictionary<string, object>
{
[MediaItemTemplateDataKey.Title] = metadata.Title,
@ -282,7 +293,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -282,7 +293,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
[MediaItemTemplateDataKey.Directors] =
(metadata.Directors ?? []).Map(d => d.Name).OrderBy(identity),
[MediaItemTemplateDataKey.Genres] = (metadata.Genres ?? []).Map(g => g.Name).OrderBy(identity),
[MediaItemTemplateDataKey.Duration] = musicVideo.GetHeadVersion().Duration
[MediaItemTemplateDataKey.Resolution] = new Resolution
{ Height = headVersion.Height, Width = headVersion.Width },
[MediaItemTemplateDataKey.Duration] = headVersion.Duration
};
foreach (var version in musicVideo.MediaVersions.HeadOrNone())
@ -323,6 +336,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -323,6 +336,8 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
{
foreach (OtherVideoMetadata metadata in otherVideo.OtherVideoMetadata.HeadOrNone())
{
var headVersion = otherVideo.GetHeadVersion();
var result = new Dictionary<string, object>
{
[MediaItemTemplateDataKey.Title] = metadata.Title,
@ -332,7 +347,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext @@ -332,7 +347,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
[MediaItemTemplateDataKey.Directors] =
(metadata.Directors ?? []).Map(d => d.Name).OrderBy(identity),
[MediaItemTemplateDataKey.Genres] = (metadata.Genres ?? []).Map(g => g.Name).OrderBy(identity),
[MediaItemTemplateDataKey.Duration] = otherVideo.GetHeadVersion().Duration
[MediaItemTemplateDataKey.Resolution] = new Resolution
{ Height = headVersion.Height, Width = headVersion.Width },
[MediaItemTemplateDataKey.Duration] = headVersion.Duration
};
foreach (var version in otherVideo.MediaVersions.HeadOrNone())

6
ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs

@ -175,8 +175,10 @@ public partial class GraphicsElementLoader( @@ -175,8 +175,10 @@ public partial class GraphicsElementLoader(
// common variables
var result = new Dictionary<string, object>
{
[MediaItemTemplateDataKey.Resolution] = context.FrameSize,
[MediaItemTemplateDataKey.StreamSeek] = context.Seek
[FFmpegProfileTemplateDataKey.Resolution] = context.FrameSize,
[MediaItemTemplateDataKey.StreamSeek] = context.Seek,
[MediaItemTemplateDataKey.Start] = context.ContentStartTime,
[MediaItemTemplateDataKey.Stop] = context.ContentStartTime + context.Duration
};
// media item variables

Loading…
Cancel
Save