Browse Source

xmltv category improvements (#604)

pull/605/head
Jason Dove 4 years ago committed by GitHub
parent
commit
b972947747
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      CHANGELOG.md
  2. 36
      ErsatzTV.Core/Iptv/ChannelGuide.cs
  3. 12
      ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs

3
CHANGELOG.md

@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased] ## [Unreleased]
### Added
- Include `Series` category tag for all episodes in XMLTV
- Include movie, episode (show) genres as `category` tags in XMLTV
## [0.4.0-alpha] - 2022-01-29 ## [0.4.0-alpha] - 2022-01-29
### Fixed ### Fixed

36
ErsatzTV.Core/Iptv/ChannelGuide.cs

@ -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()

12
ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs

@ -70,11 +70,23 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.Include(c => c.Playouts) .Include(c => c.Playouts)
.ThenInclude(p => p.Items) .ThenInclude(p => p.Items)
.ThenInclude(i => i.MediaItem) .ThenInclude(i => i.MediaItem)
.ThenInclude(i => (i as Episode).Season)
.ThenInclude(s => s.Show)
.ThenInclude(s => s.ShowMetadata)
.ThenInclude(em => em.Genres)
.Include(c => c.Playouts)
.ThenInclude(p => p.Items)
.ThenInclude(i => i.MediaItem)
.ThenInclude(i => (i as Movie).MovieMetadata) .ThenInclude(i => (i as Movie).MovieMetadata)
.ThenInclude(mm => mm.Artwork) .ThenInclude(mm => mm.Artwork)
.Include(c => c.Playouts) .Include(c => c.Playouts)
.ThenInclude(p => p.Items) .ThenInclude(p => p.Items)
.ThenInclude(i => i.MediaItem) .ThenInclude(i => i.MediaItem)
.ThenInclude(i => (i as Movie).MovieMetadata)
.ThenInclude(mm => mm.Genres)
.Include(c => c.Playouts)
.ThenInclude(p => p.Items)
.ThenInclude(i => i.MediaItem)
.ThenInclude(i => (i as MusicVideo).MusicVideoMetadata) .ThenInclude(i => (i as MusicVideo).MusicVideoMetadata)
.ThenInclude(mm => mm.Artwork) .ThenInclude(mm => mm.Artwork)
.Include(c => c.Playouts) .Include(c => c.Playouts)

Loading…
Cancel
Save