group music videos by album (#1849)

This commit is contained in:
Jason Dove
2024-07-31 16:13:13 -05:00
committed by GitHub
parent 39ca27cb3d
commit efdf0bb6d4
3 changed files with 33 additions and 1 deletions
@@ -0,0 +1,23 @@
namespace ErsatzTV.Core.Extensions;
public static class StringExtensions
{
public static int GetStableHashCode(this string str)
{
unchecked
{
int hash1 = 5381;
int hash2 = hash1;
for (int i = 0; i < str.Length && str[i] != '\0'; i += 2)
{
hash1 = ((hash1 << 5) + hash1) ^ str[i];
if (i == str.Length - 1 || str[i + 1] == '\0')
break;
hash2 = ((hash2 << 5) + hash2) ^ str[i + 1];
}
return hash1 + (hash2 * 1566083941);
}
}
}
@@ -1,4 +1,5 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Extensions;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Interfaces.Scheduling;
using ErsatzTV.Core.Scheduling.YamlScheduling.Models;
@@ -111,7 +112,14 @@ public class YamlPlayoutMarathonHelper(IMediaCollectionRepository mediaCollectio
{
Song s => new GroupKey(
ProgramScheduleItemCollectionType.Collection,
s.SongMetadata.HeadOrNone().Map(sm => sm.Album.GetHashCode()).IfNone(0),
s.SongMetadata.HeadOrNone().Map(sm => sm.Album.GetStableHashCode()).IfNone(0),
null,
null,
null),
MusicVideo mv => new GroupKey(
ProgramScheduleItemCollectionType.Collection,
mv.MusicVideoMetadata.HeadOrNone()
.Map(mvm => $"{mv.ArtistId}-${mvm.Album}".GetStableHashCode()).IfNone(0),
null,
null,
null),
@@ -1069,6 +1069,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository
.Include(m => m.Artist)
.ThenInclude(a => a.ArtistMetadata)
.Include(m => m.MusicVideoMetadata)
.ThenInclude(mvm => mvm.Artists)
.Include(m => m.MediaVersions)
.ThenInclude(mv => mv.Chapters)
.Include(m => m.MediaVersions)