|
|
|
@ -9,7 +9,6 @@ using ErsatzTV.Core.Domain.Filler; |
|
|
|
using ErsatzTV.Core.Emby; |
|
|
|
using ErsatzTV.Core.Emby; |
|
|
|
using ErsatzTV.Core.Jellyfin; |
|
|
|
using ErsatzTV.Core.Jellyfin; |
|
|
|
using LanguageExt; |
|
|
|
using LanguageExt; |
|
|
|
using LanguageExt.UnsafeValueAccess; |
|
|
|
|
|
|
|
using Serilog; |
|
|
|
using Serilog; |
|
|
|
using static LanguageExt.Prelude; |
|
|
|
using static LanguageExt.Prelude; |
|
|
|
|
|
|
|
|
|
|
|
@ -158,15 +157,20 @@ namespace ErsatzTV.Core.Iptv |
|
|
|
xml.WriteString(metadata.Year.Value.ToString()); |
|
|
|
xml.WriteString(metadata.Year.Value.ToString()); |
|
|
|
xml.WriteEndElement(); // date
|
|
|
|
xml.WriteEndElement(); // date
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xml.WriteStartElement("category"); |
|
|
|
xml.WriteStartElement("category"); |
|
|
|
xml.WriteAttributeString("lang", "en"); |
|
|
|
xml.WriteAttributeString("lang", "en"); |
|
|
|
xml.WriteString("Movie"); |
|
|
|
xml.WriteString("Movie"); |
|
|
|
xml.WriteEndElement(); // category
|
|
|
|
xml.WriteEndElement(); // category
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (Genre genre in Optional(metadata.Genres).Flatten()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
xml.WriteStartElement("category"); |
|
|
|
|
|
|
|
xml.WriteAttributeString("lang", "en"); |
|
|
|
|
|
|
|
xml.WriteString(genre.Name); |
|
|
|
|
|
|
|
xml.WriteEndElement(); // category
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
foreach (MovieMetadata metadata in movie.MovieMetadata.HeadOrNone()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string poster = Optional(metadata.Artwork).Flatten() |
|
|
|
string poster = Optional(metadata.Artwork).Flatten() |
|
|
|
.Filter(a => a.ArtworkKind == ArtworkKind.Poster) |
|
|
|
.Filter(a => a.ArtworkKind == ArtworkKind.Poster) |
|
|
|
.HeadOrNone() |
|
|
|
.HeadOrNone() |
|
|
|
@ -241,9 +245,21 @@ namespace ErsatzTV.Core.Iptv |
|
|
|
{ |
|
|
|
{ |
|
|
|
Option<ShowMetadata> maybeMetadata = |
|
|
|
Option<ShowMetadata> maybeMetadata = |
|
|
|
Optional(episode.Season?.Show?.ShowMetadata.HeadOrNone()).Flatten(); |
|
|
|
Optional(episode.Season?.Show?.ShowMetadata.HeadOrNone()).Flatten(); |
|
|
|
if (maybeMetadata.IsSome) |
|
|
|
foreach (ShowMetadata metadata in maybeMetadata) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ShowMetadata metadata = maybeMetadata.ValueUnsafe(); |
|
|
|
xml.WriteStartElement("category"); |
|
|
|
|
|
|
|
xml.WriteAttributeString("lang", "en"); |
|
|
|
|
|
|
|
xml.WriteString("Series"); |
|
|
|
|
|
|
|
xml.WriteEndElement(); // category
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (Genre genre in Optional(metadata.Genres).Flatten()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
xml.WriteStartElement("category"); |
|
|
|
|
|
|
|
xml.WriteAttributeString("lang", "en"); |
|
|
|
|
|
|
|
xml.WriteString(genre.Name); |
|
|
|
|
|
|
|
xml.WriteEndElement(); // category
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
string artwork = Optional(metadata.Artwork).Flatten() |
|
|
|
string artwork = Optional(metadata.Artwork).Flatten() |
|
|
|
.Filter(a => a.ArtworkKind == ArtworkKind.Thumbnail) |
|
|
|
.Filter(a => a.ArtworkKind == ArtworkKind.Thumbnail) |
|
|
|
.HeadOrNone() |
|
|
|
.HeadOrNone() |
|
|
|
|