/// <summary> /// Initializes a new instance of the <see cref="TvServerEventArgs"/> class. /// </summary> /// <param name="eventType">Type of the event.</param> /// <param name="card">The card.</param> /// <param name="user">The user.</param> /// <param name="conflict">The conflict.</param> public TvServerEventArgs(TvServerEventType eventType, VirtualCard card, User user, Conflict conflict) { _eventType = eventType; _card = card; _user = user; _channel = channel; _conflict = conflict; }
/// <summary>Assign all schedules to cards</summary> /// <param name="Schedules">An IList containing all scheduled recordings</param> /// <returns>Array of List<Schedule> : one per card, index [0] contains unassigned schedules</returns> private List<Schedule>[] AssignSchedulesToCards(IList<Schedule> Schedules) { IList<Card> cardsList = Card.ListAllEnabled(); // creates an array of Schedule Lists // element [0] will be filled with conflicting schedules // element [x] will be filled with the schedules assigned to card with idcard=x List<Schedule>[] cardSchedules = new List<Schedule>[cardsList.Count + 1]; for (int i = 0; i < cardsList.Count + 1; i++) cardSchedules[i] = new List<Schedule>(); #region assigns schedules from table // Dictionary<int, int> cardno = new Dictionary<int, int>(); int n = 1; foreach (Card _card in _cards) { cardno.Add(_card.IdCard, n); n++; } // foreach (Schedule schedule in Schedules) { bool assigned = false; Schedule lastOverlappingSchedule = null; int lastBusyCard = 0; bool overlap = false; foreach (Card card in cardsList) { if (card.canViewTvChannel(schedule.IdChannel)) { // checks if any schedule assigned to this cards overlaps current parsed schedule bool free = true; foreach (Schedule assignedShedule in cardSchedules[cardno[card.IdCard]]) { if (schedule.IsOverlapping(assignedShedule)) { if (!(schedule.isSameTransponder(assignedShedule) && card.supportSubChannels)) { free = false; //_overlap = true; lastOverlappingSchedule = assignedShedule; lastBusyCard = card.IdCard; break; } } } if (free) { cardSchedules[cardno[card.IdCard]].Add(schedule); assigned = true; break; } } } if (!assigned) { cardSchedules[0].Add(schedule); Conflict newConflict = new Conflict(schedule.IdSchedule, lastOverlappingSchedule.IdSchedule, schedule.IdChannel, schedule.StartTime); newConflict.IdCard = lastBusyCard; newConflict.Persist(); Program prg = Program.RetrieveByTitleTimesAndChannel(schedule.ProgramName, schedule.StartTime, schedule.EndTime, schedule.IdChannel); if (prg != null) { prg.HasConflict = true; prg.Persist(); _conflictingPrograms.Add(prg); } } } #endregion return cardSchedules; }