diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d27a801f..e813e4461 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `Blocks` - ordered list of items to play within the specified duration - `Templates` - a generic "day" that consists of blocks scheduled at specific times - `Playout Templates` - templates to schedule using the specified criteria. Only one template will be selected each day - - Much more to come on this feature as development continues + - Much more to come on this feature as development continues +- Show chapter markers in movie and episode media info ### Fixed - Fix error loading path replacements when using MySql diff --git a/ErsatzTV.Application/MediaItems/MediaItemInfo.cs b/ErsatzTV.Application/MediaItems/MediaItemInfo.cs index 90fb1e982..0cc97d767 100644 --- a/ErsatzTV.Application/MediaItems/MediaItemInfo.cs +++ b/ErsatzTV.Application/MediaItems/MediaItemInfo.cs @@ -16,4 +16,5 @@ public record MediaItemInfo( VideoScanKind VideoScanKind, int Width, int Height, - List Streams); + List Streams, + List Chapters); diff --git a/ErsatzTV.Application/MediaItems/MediaItemInfoChapter.cs b/ErsatzTV.Application/MediaItems/MediaItemInfoChapter.cs new file mode 100644 index 000000000..d99c11f09 --- /dev/null +++ b/ErsatzTV.Application/MediaItems/MediaItemInfoChapter.cs @@ -0,0 +1,3 @@ +namespace ErsatzTV.Application.MediaItems; + +public record MediaItemInfoChapter(string Title, TimeSpan StartTime, TimeSpan EndTime); diff --git a/ErsatzTV.Application/MediaItems/Queries/GetMediaItemInfoHandler.cs b/ErsatzTV.Application/MediaItems/Queries/GetMediaItemInfoHandler.cs index 739df9976..cfc232d26 100644 --- a/ErsatzTV.Application/MediaItems/Queries/GetMediaItemInfoHandler.cs +++ b/ErsatzTV.Application/MediaItems/Queries/GetMediaItemInfoHandler.cs @@ -31,8 +31,12 @@ public class GetMediaItemInfoHandler : IRequestHandler (i as Movie).MovieMetadata) .ThenInclude(mv => mv.Subtitles) .Include(i => (i as Movie).MediaVersions) + .ThenInclude(mv => mv.Chapters) + .Include(i => (i as Movie).MediaVersions) .ThenInclude(mv => mv.Streams) .Include(i => (i as Episode).MediaVersions) + .ThenInclude(mv => mv.Chapters) + .Include(i => (i as Episode).MediaVersions) .ThenInclude(mv => mv.Streams) .Include(i => (i as Episode).EpisodeMetadata) .ThenInclude(mv => mv.Subtitles) @@ -71,6 +75,8 @@ public class GetMediaItemInfoHandler : IRequestHandler s.SubtitleKind is SubtitleKind.Sidecar).Map(ProjectToStream)); + var allChapters = (version.Chapters ?? []).OrderBy(c => c.StartTime).Map(Project).ToList(); + return new MediaItemInfo( mediaItem.Id, mediaItem.GetType().Name, @@ -85,7 +91,8 @@ public class GetMediaItemInfoHandler : IRequestHandler @@ -129,4 +136,7 @@ public class GetMediaItemInfoHandler : IRequestHandler + new(chapter.Title, chapter.StartTime, chapter.EndTime); }