private bool AssignSchedulesToCard(Schedule schedule, List<Schedule>[] cardSchedules,
out List<Schedule> overlappingSchedules, out List<Schedule> notViewabledSchedules)
{
overlappingSchedules = new List<Schedule>();
notViewabledSchedules = new List<Schedule>();
Log.Info("AssignSchedulesToCard: schedule = " + schedule);
IList<Card> cards = Card.ListAllEnabled();
bool assigned = false;
bool canView = false;
int count = 0;
foreach (Card card in cards)
{
if (card.canViewTvChannel(schedule.IdChannel))
{
canView = true;
// checks if any schedule assigned to this cards overlaps current parsed schedule
bool free = true;
foreach (Schedule assignedSchedule in cardSchedules[count])
{
Log.Info("AssignSchedulesToCard: card {0}, ID = {1} has schedule = " + assignedSchedule, count, card.IdCard);
bool hasOverlappingSchedule = schedule.IsOverlapping(assignedSchedule);
if (hasOverlappingSchedule)
{
bool _isSameTransponder = (isSameTransponder(schedule, assignedSchedule) && card.supportSubChannels);
if (!_isSameTransponder)
{
overlappingSchedules.Add(assignedSchedule);
Log.Info("AssignSchedulesToCard: overlapping with " + assignedSchedule + " on card {0}, ID = {1}", count,
card.IdCard);
free = false;
}
}
}
if (free)
{
Log.Info("AssignSchedulesToCard: free on card {0}, ID = {1}", count, card.IdCard);
cardSchedules[count].Add(schedule);
assigned = true;
break;
}
}
count++;
}
if (!canView)
{
notViewabledSchedules.Add(schedule);
}
return (canView && assigned);
}