fix chronological and shuffle-in-order song sorting (#659)

This commit is contained in:
Jason Dove
2022-02-28 13:41:22 -06:00
committed by GitHub
parent fd3ef90880
commit 19161b12ea
3 changed files with 92 additions and 1 deletions
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ErsatzTV.Core.Domain;
namespace ErsatzTV.Core.Scheduling
@@ -47,6 +46,23 @@ namespace ErsatzTV.Core.Scheduling
return date1.CompareTo(date2);
}
string songDate1 = x switch
{
Song s => s.SongMetadata.HeadOrNone().Match(sm => sm.Date ?? string.Empty, () => string.Empty),
_ => string.Empty
};
string songDate2 = y switch
{
Song s => s.SongMetadata.HeadOrNone().Match(sm => sm.Date ?? string.Empty, () => string.Empty),
_ => string.Empty
};
if (songDate1 != songDate2)
{
return string.Compare(songDate1, songDate2, StringComparison.Ordinal);
}
int season1 = x switch
{
Episode e => e.Season?.SeasonNumber ?? int.MaxValue,
@@ -85,6 +101,40 @@ namespace ErsatzTV.Core.Scheduling
return episode1.CompareTo(episode2);
}
string album1 = x switch
{
Song s => s.SongMetadata.HeadOrNone().Match(sm => sm.Album ?? string.Empty, () => string.Empty),
_ => string.Empty
};
string album2 = y switch
{
Song s => s.SongMetadata.HeadOrNone().Match(sm => sm.Album ?? string.Empty, () => string.Empty),
_ => string.Empty
};
if (album1 != album2)
{
return string.Compare(album1, album2, StringComparison.Ordinal);
}
string track1 = x switch
{
Song s => s.SongMetadata.HeadOrNone().Match(sm => sm.Track ?? string.Empty, () => string.Empty),
_ => string.Empty
};
string track2 = y switch
{
Song s => s.SongMetadata.HeadOrNone().Match(sm => sm.Track ?? string.Empty, () => string.Empty),
_ => string.Empty
};
if (track1 != track2)
{
return string.Compare(track1, track2, StringComparison.Ordinal);
}
return x.Id.CompareTo(y.Id);
}
}