Browse Source

add yaml marathon search content source (#1845)

* use search queries to populate marathons

* group marathon by artist

* add marathon group by album
pull/1846/head
Jason Dove 1 year ago committed by GitHub
parent
commit
521e4eac41
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      ErsatzTV.Core/Scheduling/PlaylistEnumerator.cs
  2. 2
      ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutContentMarathonItem.cs
  3. 40
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutMarathonHelper.cs

4
ErsatzTV.Core/Scheduling/PlaylistEnumerator.cs

@ -24,7 +24,9 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator
public CollectionEnumeratorState State { get; private set; } public CollectionEnumeratorState State { get; private set; }
public Option<MediaItem> Current => _sortedEnumerators[_enumeratorIndex].Current; public Option<MediaItem> Current => _sortedEnumerators.Count > 0
? _sortedEnumerators[_enumeratorIndex].Current
: Option<MediaItem>.None;
public Option<bool> CurrentIncludeInProgramGuide public Option<bool> CurrentIncludeInProgramGuide
{ {

2
ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutContentMarathonItem.cs

@ -8,6 +8,8 @@ public class YamlPlayoutContentMarathonItem : YamlPlayoutContentItem
public List<YamlPlayoutContentGuid> Guids { get; set; } = []; public List<YamlPlayoutContentGuid> Guids { get; set; } = [];
public List<string> Searches { get; set; } = [];
[YamlMember(Alias = "group_by", ApplyNamingConventions = false)] [YamlMember(Alias = "group_by", ApplyNamingConventions = false)]
public string GroupBy { get; set; } public string GroupBy { get; set; }

40
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutMarathonHelper.cs

@ -25,6 +25,12 @@ public class YamlPlayoutMarathonHelper(IMediaCollectionRepository mediaCollectio
allMediaItems.AddRange(await mediaCollectionRepository.GetShowItemsByShowGuids([showGuid])); allMediaItems.AddRange(await mediaCollectionRepository.GetShowItemsByShowGuids([showGuid]));
} }
// grab items from each search
foreach (string query in marathon.Searches)
{
allMediaItems.AddRange(await mediaCollectionRepository.GetSmartCollectionItems(query));
}
List<IGrouping<GroupKey, MediaItem>> groups = []; List<IGrouping<GroupKey, MediaItem>> groups = [];
// group by show // group by show
@ -37,6 +43,16 @@ public class YamlPlayoutMarathonHelper(IMediaCollectionRepository mediaCollectio
{ {
groups.AddRange(allMediaItems.GroupBy(MediaItemKeyBySeason)); groups.AddRange(allMediaItems.GroupBy(MediaItemKeyBySeason));
} }
// group by artist
else if (string.Equals(marathon.GroupBy, "artist", StringComparison.OrdinalIgnoreCase))
{
groups.AddRange(allMediaItems.GroupBy(MediaItemKeyByArtist));
}
// group by album
else if (string.Equals(marathon.GroupBy, "album", StringComparison.OrdinalIgnoreCase))
{
groups.AddRange(allMediaItems.GroupBy(MediaItemKeyByAlbum));
}
Dictionary<PlaylistItem, List<MediaItem>> itemMap = []; Dictionary<PlaylistItem, List<MediaItem>> itemMap = [];
@ -78,6 +94,30 @@ public class YamlPlayoutMarathonHelper(IMediaCollectionRepository mediaCollectio
_ => new GroupKey(ProgramScheduleItemCollectionType.TelevisionSeason, null, null, null, 0) _ => new GroupKey(ProgramScheduleItemCollectionType.TelevisionSeason, null, null, null, 0)
}; };
private static GroupKey MediaItemKeyByArtist(MediaItem mediaItem) =>
mediaItem switch
{
MusicVideo mv => new GroupKey(
ProgramScheduleItemCollectionType.Artist,
null,
null,
null,
mv.ArtistId),
_ => new GroupKey(ProgramScheduleItemCollectionType.Artist, null, null, null, 0)
};
private static GroupKey MediaItemKeyByAlbum(MediaItem mediaItem) =>
mediaItem switch
{
Song s => new GroupKey(
ProgramScheduleItemCollectionType.Collection,
s.SongMetadata.HeadOrNone().Map(sm => sm.Album.GetHashCode()).IfNone(0),
null,
null,
null),
_ => new GroupKey(ProgramScheduleItemCollectionType.Collection, 0, null, null, null)
};
private static PlaylistItem GroupToPlaylistItem( private static PlaylistItem GroupToPlaylistItem(
int index, int index,
YamlPlayoutContentMarathonItem marathon, YamlPlayoutContentMarathonItem marathon,

Loading…
Cancel
Save