Browse Source

song fixes (#506)

* fix song page links

* show song artist in playout detail

* show more song details in channel guide
pull/507/head
Jason Dove 5 years ago committed by GitHub
parent
commit
9195ef7878
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      CHANGELOG.md
  2. 5
      ErsatzTV.Application/Playouts/Mapper.cs
  3. 30
      ErsatzTV.Core/Iptv/ChannelGuide.cs
  4. 10
      ErsatzTV/Pages/SongList.razor
  5. 2
      ErsatzTV/Shared/MainLayout.razor

4
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/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased] ## [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 ## [0.3.0-alpha] - 2021-11-25
### Fixed ### Fixed

5
ErsatzTV.Application/Playouts/Mapper.cs

@ -49,8 +49,11 @@ namespace ErsatzTV.Application.Playouts
.Map(s => string.IsNullOrWhiteSpace(playoutItem.ChapterTitle) ? s : $"{s} ({playoutItem.ChapterTitle})") .Map(s => string.IsNullOrWhiteSpace(playoutItem.ChapterTitle) ? s : $"{s} ({playoutItem.ChapterTitle})")
.IfNone("[unknown video]"); .IfNone("[unknown video]");
case Song s: 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() 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})") .Map(t => string.IsNullOrWhiteSpace(playoutItem.ChapterTitle) ? t : $"{s} ({playoutItem.ChapterTitle})")
.IfNone("[unknown song]"); .IfNone("[unknown song]");
default: default:

30
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)) if (displayItem.MediaItem is Episode episode && (!hasCustomTitle || isSameCustomShow))
{ {
@ -344,8 +367,8 @@ namespace ErsatzTV.Core.Iptv
.IfNone("[unknown artist]"), .IfNone("[unknown artist]"),
OtherVideo ov => ov.OtherVideoMetadata.HeadOrNone().Map(vm => vm.Title ?? string.Empty) OtherVideo ov => ov.OtherVideoMetadata.HeadOrNone().Map(vm => vm.Title ?? string.Empty)
.IfNone("[unknown video]"), .IfNone("[unknown video]"),
Song s => s.SongMetadata.HeadOrNone().Map(sm => sm.Title ?? string.Empty) Song s => s.SongMetadata.HeadOrNone().Map(sm => sm.Artist ?? string.Empty)
.IfNone("[unknown song]"), .IfNone("[unknown artist]"),
_ => "[unknown]" _ => "[unknown]"
}; };
} }
@ -365,6 +388,9 @@ namespace ErsatzTV.Core.Iptv
MusicVideo mv => mv.MusicVideoMetadata.HeadOrNone().Match( MusicVideo mv => mv.MusicVideoMetadata.HeadOrNone().Match(
mvm => mvm.Title ?? string.Empty, mvm => mvm.Title ?? string.Empty,
() => string.Empty), () => string.Empty),
Song s => s.SongMetadata.HeadOrNone().Match(
mvm => mvm.Title ?? string.Empty,
() => string.Empty),
_ => string.Empty _ => string.Empty
}; };
} }

10
ErsatzTV/Pages/SongList.razor

@ -1,5 +1,5 @@
@page "/music/songs" @page "/media/music/songs"
@page "/music/songs/page/{PageNumber:int}" @page "/media/music/songs/page/{PageNumber:int}"
@using LanguageExt.UnsafeValueAccess @using LanguageExt.UnsafeValueAccess
@using ErsatzTV.Application.MediaCards @using ErsatzTV.Application.MediaCards
@using ErsatzTV.Application.MediaCollections @using ErsatzTV.Application.MediaCollections
@ -69,7 +69,7 @@
@if (_data.PageMap.IsSome) @if (_data.PageMap.IsSome)
{ {
<LetterBar PageMap="@_data.PageMap.ValueUnsafe()" <LetterBar PageMap="@_data.PageMap.ValueUnsafe()"
BaseUri="/music/songs" BaseUri="/media/music/songs"
Query="@_query"/> Query="@_query"/>
} }
@ -101,7 +101,7 @@
private void PrevPage() private void PrevPage()
{ {
var uri = $"/music/songs/page/{PageNumber - 1}"; var uri = $"/media/music/songs/page/{PageNumber - 1}";
if (!string.IsNullOrWhiteSpace(_query)) if (!string.IsNullOrWhiteSpace(_query))
{ {
(string key, string value) = _query.EncodeQuery(); (string key, string value) = _query.EncodeQuery();
@ -112,7 +112,7 @@
private void NextPage() private void NextPage()
{ {
var uri = $"/music/songs/page/{PageNumber + 1}"; var uri = $"/media/music/songs/page/{PageNumber + 1}";
if (!string.IsNullOrWhiteSpace(_query)) if (!string.IsNullOrWhiteSpace(_query))
{ {
(string key, string value) = _query.EncodeQuery(); (string key, string value) = _query.EncodeQuery();

2
ErsatzTV/Shared/MainLayout.razor

@ -54,7 +54,7 @@
<MudNavLink Href="/media/movies">Movies</MudNavLink> <MudNavLink Href="/media/movies">Movies</MudNavLink>
<MudNavLink Href="/media/music/artists">Music</MudNavLink> <MudNavLink Href="/media/music/artists">Music</MudNavLink>
<MudNavLink Href="/media/other/videos">Other Videos</MudNavLink> <MudNavLink Href="/media/other/videos">Other Videos</MudNavLink>
<MudNavLink Href="/music/songs">Songs</MudNavLink> <MudNavLink Href="/media/music/songs">Songs</MudNavLink>
</MudNavGroup> </MudNavGroup>
<MudNavGroup Title="Lists" Expanded="true"> <MudNavGroup Title="Lists" Expanded="true">
<MudNavLink Href="/media/collections">Collections</MudNavLink> <MudNavLink Href="/media/collections">Collections</MudNavLink>

Loading…
Cancel
Save