From c99086b6665848314a02c389ce6d24261de32fce Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sat, 13 Mar 2021 05:55:03 -0600 Subject: [PATCH] add movie poster to xmltv --- ErsatzTV.Core/Iptv/ChannelGuide.cs | 32 ++++++++++++++++--- .../Data/Repositories/ChannelRepository.cs | 1 + 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/ErsatzTV.Core/Iptv/ChannelGuide.cs b/ErsatzTV.Core/Iptv/ChannelGuide.cs index aebbfdea6..b7b342480 100644 --- a/ErsatzTV.Core/Iptv/ChannelGuide.cs +++ b/ErsatzTV.Core/Iptv/ChannelGuide.cs @@ -4,6 +4,8 @@ using System.Linq; using System.Text; using System.Xml; using ErsatzTV.Core.Domain; +using LanguageExt; +using LanguageExt.UnsafeValueAccess; using static LanguageExt.Prelude; namespace ErsatzTV.Core.Iptv @@ -104,10 +106,32 @@ namespace ErsatzTV.Core.Iptv xml.WriteString("Movie"); xml.WriteEndElement(); // category - int year = movie.MovieMetadata.HeadOrNone().Match(mm => mm.Year ?? 0, () => 0); - xml.WriteStartElement("date"); - xml.WriteString(year.ToString()); - xml.WriteEndElement(); // date + Option maybeMetadata = movie.MovieMetadata.HeadOrNone(); + if (maybeMetadata.IsSome) + { + MovieMetadata metadata = maybeMetadata.ValueUnsafe(); + + if (metadata.Year.HasValue) + { + xml.WriteStartElement("date"); + xml.WriteString(metadata.Year.Value.ToString()); + xml.WriteEndElement(); // date + } + + string poster = Optional(metadata.Artwork).Flatten() + .Filter(a => a.ArtworkKind == ArtworkKind.Poster) + .HeadOrNone() + .Match( + artwork => $"{_scheme}://{_host}/artwork/posters/{artwork.Path}", + () => string.Empty); + + if (!string.IsNullOrWhiteSpace(poster)) + { + xml.WriteStartElement("icon"); + xml.WriteAttributeString("src", poster); + xml.WriteEndElement(); // icon + } + } } xml.WriteStartElement("title"); diff --git a/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs index 289d0b820..575096e66 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs @@ -59,6 +59,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories .ThenInclude(p => p.Items) .ThenInclude(i => i.MediaItem) .ThenInclude(i => (i as Movie).MovieMetadata) + .ThenInclude(mm => mm.Artwork) .ToListAsync(); public async Task Update(Channel channel)