diff --git a/CHANGELOG.md b/CHANGELOG.md index cc8712006..bcaa8cb5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ 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/). ## [Unreleased] +### Fixed +- Fix song page links in UI +- Show song artist in playout detail +- Include song artist and cover art in channel guide (xmltv) ## [0.3.0-alpha] - 2021-11-25 ### Fixed diff --git a/ErsatzTV.Application/Playouts/Mapper.cs b/ErsatzTV.Application/Playouts/Mapper.cs index 9740c9fc4..1dc658877 100644 --- a/ErsatzTV.Application/Playouts/Mapper.cs +++ b/ErsatzTV.Application/Playouts/Mapper.cs @@ -49,8 +49,11 @@ namespace ErsatzTV.Application.Playouts .Map(s => string.IsNullOrWhiteSpace(playoutItem.ChapterTitle) ? s : $"{s} ({playoutItem.ChapterTitle})") .IfNone("[unknown video]"); case Song s: + string songArtist = s.SongMetadata.HeadOrNone() + .Map(sm => string.IsNullOrWhiteSpace(sm.Artist) ? string.Empty : $"{sm.Artist} - ") + .IfNone(string.Empty); return s.SongMetadata.HeadOrNone() - .Map(sm => sm.Title ?? string.Empty) + .Map(sm => $"{songArtist}{sm.Title ?? string.Empty}") .Map(t => string.IsNullOrWhiteSpace(playoutItem.ChapterTitle) ? t : $"{s} ({playoutItem.ChapterTitle})") .IfNone("[unknown song]"); default: diff --git a/ErsatzTV.Core/Iptv/ChannelGuide.cs b/ErsatzTV.Core/Iptv/ChannelGuide.cs index 8a15358b6..3db54c818 100644 --- a/ErsatzTV.Core/Iptv/ChannelGuide.cs +++ b/ErsatzTV.Core/Iptv/ChannelGuide.cs @@ -213,6 +213,29 @@ namespace ErsatzTV.Core.Iptv } } } + + if (!hasCustomTitle && displayItem.MediaItem is Song song) + { + xml.WriteStartElement("category"); + xml.WriteAttributeString("lang", "en"); + xml.WriteString("Music"); + xml.WriteEndElement(); // category + + foreach (SongMetadata metadata in song.SongMetadata.HeadOrNone()) + { + string thumbnail = Optional(metadata.Artwork).Flatten() + .Filter(a => a.ArtworkKind == ArtworkKind.Thumbnail) + .HeadOrNone() + .Match(a => GetArtworkUrl(a, ArtworkKind.Thumbnail), () => string.Empty); + + if (!string.IsNullOrWhiteSpace(thumbnail)) + { + xml.WriteStartElement("icon"); + xml.WriteAttributeString("src", thumbnail); + xml.WriteEndElement(); // icon + } + } + } if (displayItem.MediaItem is Episode episode && (!hasCustomTitle || isSameCustomShow)) { @@ -344,8 +367,8 @@ namespace ErsatzTV.Core.Iptv .IfNone("[unknown artist]"), OtherVideo ov => ov.OtherVideoMetadata.HeadOrNone().Map(vm => vm.Title ?? string.Empty) .IfNone("[unknown video]"), - Song s => s.SongMetadata.HeadOrNone().Map(sm => sm.Title ?? string.Empty) - .IfNone("[unknown song]"), + Song s => s.SongMetadata.HeadOrNone().Map(sm => sm.Artist ?? string.Empty) + .IfNone("[unknown artist]"), _ => "[unknown]" }; } @@ -365,6 +388,9 @@ namespace ErsatzTV.Core.Iptv MusicVideo mv => mv.MusicVideoMetadata.HeadOrNone().Match( mvm => mvm.Title ?? string.Empty, () => string.Empty), + Song s => s.SongMetadata.HeadOrNone().Match( + mvm => mvm.Title ?? string.Empty, + () => string.Empty), _ => string.Empty }; } diff --git a/ErsatzTV/Pages/SongList.razor b/ErsatzTV/Pages/SongList.razor index ee53e487c..8ded07f45 100644 --- a/ErsatzTV/Pages/SongList.razor +++ b/ErsatzTV/Pages/SongList.razor @@ -1,5 +1,5 @@ -@page "/music/songs" -@page "/music/songs/page/{PageNumber:int}" +@page "/media/music/songs" +@page "/media/music/songs/page/{PageNumber:int}" @using LanguageExt.UnsafeValueAccess @using ErsatzTV.Application.MediaCards @using ErsatzTV.Application.MediaCollections @@ -69,7 +69,7 @@ @if (_data.PageMap.IsSome) { } @@ -101,7 +101,7 @@ private void PrevPage() { - var uri = $"/music/songs/page/{PageNumber - 1}"; + var uri = $"/media/music/songs/page/{PageNumber - 1}"; if (!string.IsNullOrWhiteSpace(_query)) { (string key, string value) = _query.EncodeQuery(); @@ -112,7 +112,7 @@ private void NextPage() { - var uri = $"/music/songs/page/{PageNumber + 1}"; + var uri = $"/media/music/songs/page/{PageNumber + 1}"; if (!string.IsNullOrWhiteSpace(_query)) { (string key, string value) = _query.EncodeQuery(); diff --git a/ErsatzTV/Shared/MainLayout.razor b/ErsatzTV/Shared/MainLayout.razor index 2940eef86..0aa741497 100644 --- a/ErsatzTV/Shared/MainLayout.razor +++ b/ErsatzTV/Shared/MainLayout.razor @@ -54,7 +54,7 @@ Movies Music Other Videos - Songs + Songs Collections