diff --git a/ErsatzTV.Core/Iptv/ChannelGuide.cs b/ErsatzTV.Core/Iptv/ChannelGuide.cs index fcc8d4484..9198de556 100644 --- a/ErsatzTV.Core/Iptv/ChannelGuide.cs +++ b/ErsatzTV.Core/Iptv/ChannelGuide.cs @@ -64,11 +64,19 @@ namespace ErsatzTV.Core.Iptv { Movie m => m.MovieMetadata.HeadOrNone().Map(mm => mm.Title ?? string.Empty) .IfNone("[unknown movie]"), - Episode e => e.EpisodeMetadata.HeadOrNone().Map(em => em.Title ?? string.Empty) - .IfNone("[unknown episode]"), + Episode e => e.Season.Show.ShowMetadata.HeadOrNone().Map(em => em.Title ?? string.Empty) + .IfNone("[unknown show]"), _ => "[unknown]" }; + string subtitle = playoutItem.MediaItem switch + { + Episode e => e.EpisodeMetadata.HeadOrNone().Match( + em => em.Title ?? string.Empty, + () => string.Empty), + _ => string.Empty + }; + string description = playoutItem.MediaItem switch { Movie m => m.MovieMetadata.HeadOrNone().Map(mm => mm.Plot ?? string.Empty).IfNone(string.Empty), @@ -89,11 +97,27 @@ namespace ErsatzTV.Core.Iptv xml.WriteAttributeString("stop", stop); xml.WriteAttributeString("channel", channel.Number); + if (playoutItem.MediaItem is Movie) + { + xml.WriteStartElement("category"); + xml.WriteAttributeString("lang", "en"); + xml.WriteString("Movie"); + xml.WriteEndElement(); // category + } + xml.WriteStartElement("title"); xml.WriteAttributeString("lang", "en"); xml.WriteString(title); xml.WriteEndElement(); // title + if (!string.IsNullOrWhiteSpace(subtitle)) + { + xml.WriteStartElement("sub-title"); + xml.WriteAttributeString("lang", "en"); + xml.WriteString(subtitle); + xml.WriteEndElement(); // subtitle + } + xml.WriteStartElement("previously-shown"); xml.WriteEndElement(); // previously-shown diff --git a/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs index 97b3553ba..289d0b820 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs @@ -53,6 +53,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories .ThenInclude(p => p.Items) .ThenInclude(i => i.MediaItem) .ThenInclude(i => (i as Episode).Season) + .ThenInclude(s => s.Show) + .ThenInclude(s => s.ShowMetadata) .Include(c => c.Playouts) .ThenInclude(p => p.Items) .ThenInclude(i => i.MediaItem)