48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
using ErsatzTV.Core.Domain;
|
|
|
|
namespace ErsatzTV.Core.Scheduling;
|
|
|
|
public class MultiCollectionGroup : GroupedMediaItem
|
|
{
|
|
public MultiCollectionGroup(CollectionWithItems collectionWithItems)
|
|
{
|
|
if (collectionWithItems.UseCustomOrder)
|
|
{
|
|
if (collectionWithItems.MediaItems.Count > 0)
|
|
{
|
|
First = collectionWithItems.MediaItems.Head();
|
|
Additional = collectionWithItems.MediaItems.Tail().ToList();
|
|
}
|
|
else
|
|
{
|
|
throw new InvalidOperationException("Collection has no items");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (collectionWithItems.PlaybackOrder)
|
|
{
|
|
case PlaybackOrder.Chronological:
|
|
{
|
|
var sortedItems = collectionWithItems.MediaItems.OrderBy(identity, new ChronologicalMediaComparer())
|
|
.ToList();
|
|
First = sortedItems.Head();
|
|
Additional = sortedItems.Tail().ToList();
|
|
}
|
|
break;
|
|
case PlaybackOrder.SeasonEpisode:
|
|
{
|
|
var sortedItems = collectionWithItems.MediaItems.OrderBy(identity, new SeasonEpisodeMediaComparer())
|
|
.ToList();
|
|
First = sortedItems.Head();
|
|
Additional = sortedItems.Tail().ToList();
|
|
}
|
|
break;
|
|
default:
|
|
throw new NotSupportedException(
|
|
$"Unsupported MultiCollection PlaybackOrder: {collectionWithItems.PlaybackOrder}");
|
|
}
|
|
}
|
|
}
|
|
}
|