song fixes (#506)
* fix song page links * show song artist in playout detail * show more song details in channel guide
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user