Browse Source

add some media item template data

pull/2586/head
Jason Dove 9 months ago
parent
commit
a7f39b92ca
No known key found for this signature in database
  1. 4
      CHANGELOG.md
  2. 4
      ErsatzTV.Core/Metadata/MediaItemTemplateDataKey.cs
  3. 25
      ErsatzTV.Infrastructure/Data/Repositories/TemplateDataRepository.cs
  4. 4
      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/).
## [Unreleased] ## [Unreleased]
### Added ### Added
- Show playout warnings count badge in left menu - 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 ### Fixed
- Fix HLS Direct playback with Jellyfin 10.11 - Fix HLS Direct playback with Jellyfin 10.11

4
ErsatzTV.Core/Metadata/MediaItemTemplateDataKey.cs

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

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

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

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

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

Loading…
Cancel
Save