group music videos by album (#1849)
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user