Stream custom live channels using your own media
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

63 lines
1.6 KiB

using System.Diagnostics;
using ErsatzTV.Core.Domain;
namespace ErsatzTV.Core.Scheduling;
[DebuggerDisplay("{" + nameof(First) + "}")]
public class GroupedMediaItem : IEquatable<GroupedMediaItem>
{
public GroupedMediaItem()
{
}
public GroupedMediaItem(MediaItem first, List<MediaItem> additional)
{
First = first;
Additional = additional ?? new List<MediaItem>();
}
public MediaItem First { get; init; }
public List<MediaItem> Additional { get; protected init; }
public bool Equals(GroupedMediaItem other) =>
Equals(First.Id, other?.First.Id) && Equals(Additional?.Count, other?.Additional?.Count) &&
Equals(Additional?.Map(x => x.Id), other?.Additional?.Map(x => x.Id));
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != GetType())
{
return false;
}
return Equals((GroupedMediaItem)obj);
}
public override int GetHashCode() => HashCode.Combine(First.Id, Additional?.Map(x => x.Id));
public static IList<MediaItem> FlattenGroups(IEnumerable<GroupedMediaItem> copy, int mediaItemCount)
{
var result = new MediaItem[mediaItemCount];
var i = 0;
foreach (GroupedMediaItem group in copy)
{
result[i++] = group.First;
foreach (MediaItem additional in Optional(group.Additional).Flatten())
{
result[i++] = additional;
}
}
return result;
}
}