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