} // GetUtcProgram public static EpgService FromSchedule(TvAnytime.TvaSchedule schedule) { if (schedule == null) { return(null); } var result = new EpgService() { Version = TryParseInt(schedule.Version, -1), ServiceIdReference = schedule.ServiceIdRef }; if (schedule.Events == null) { return(result); } // if var programs = from item in schedule.Events let program = EpgProgram.FromScheduleEvent(item) select program; result.Programs = new LinkedList <EpgProgram>(programs); return(result); } // FromSchedule
} // Sort /// <summary> /// Fills-in the blanks /// </summary> /// <param name="epgService"></param> private void Fill(EpgService epgService) { if ((epgService.Programs == null) || (epgService.Programs.Count == 0)) { return; } var current = epgService.Programs.First.Next; while (current != null) { var previous = current.Previous.Value; var utcEndTime = previous.UtcStartTime + previous.Duration; if (utcEndTime < current.Value.UtcStartTime) { var empty = new EpgProgram() { Title = Properties.Texts.EpgBlankTitle, IsBlank = true, UtcStartTime = utcEndTime, Duration = current.Value.UtcStartTime - utcEndTime }; current.List.AddBefore(current, empty); } // if current = current.Next; } // while } // Fill
} // IsAfter public static EpgProgram FromScheduleEvent(TvAnytime.TvaScheduleEvent item) { if (item == null) { return(null); } var utcStartTime = item.StartTime ?? item.PublishedStartTime; if (utcStartTime == null) { return(null); } var result = new EpgProgram() { CRID = item.Program.CRID, Duration = (item.Duration.TotalSeconds > 0) ? item.Duration : item.PublishedDuration, UtcStartTime = utcStartTime.Value }; if (item.Description == null) { result.Title = Properties.Texts.EpgBlankTitle; result.IsBlank = true; return(result); } result.Title = item.Description.Title; result.Genre = EpgCodedValue.ToCodedValue(item.Description.Genre); result.ParentalRating = (item.Description.ParentalGuidance != null)? EpgCodedValue.ToCodedValue(item.Description.ParentalGuidance.ParentalRating) : null; return(result); } // FromScheduleEvent
} // Merge private IEpgLinkedList GetLinkedList(EpgService service, DateTime?localTime) { LinkedListNode <EpgProgram> node; EpgProgram program; EpgProgram phantomProgram; if ((service.Programs == null) || (service.Programs.First == null)) { return(null); } if (localTime == null) { localTime = DateTime.Now; } var utcTime = localTime.Value.ToUniversalTime(); var truncatedUtcTime = utcTime.TruncateToMinutes(); program = service.Programs.First.Value; if (utcTime < program.UtcStartTime) { phantomProgram = new EpgProgram() { Title = Properties.Texts.EpgBlankTitle, IsBlank = true, UtcStartTime = truncatedUtcTime, Duration = program.UtcStartTime - truncatedUtcTime - new TimeSpan(0, 15, 0) }; return(new EpgLinkedListWrapper(service.ServiceIdReference, service.Programs, phantomProgram)); } // if program = service.Programs.Last.Value; if (utcTime >= program.UtcEndTime) { phantomProgram = new EpgProgram() { Title = Properties.Texts.EpgBlankTitle, IsBlank = true, UtcStartTime = program.UtcEndTime, Duration = (truncatedUtcTime - program.UtcEndTime) + new TimeSpan(0, 15, 0) }; return(new EpgLinkedListWrapper(service.ServiceIdReference, service.Programs, phantomProgram, false)); } // if node = service.Programs.First; while (node != null) { if (node.Value.IsCurrent(utcTime)) { break; } // if node = node.Next; } // while return(new EpgLinkedListWrapper(service.ServiceIdReference, service.Programs, node)); } // GetLinkedList
public EpgLinkedListPhantomNode(EpgLinkedListWrapper list, EpgProgram program, bool first) { LinkedList = list; Program = program; IsFirst = first; if (first) { Previous = null; Next = new EpgLinkedListNodeWrapper(list, list.List.First); } else { Previous = new EpgLinkedListNodeWrapper(list, list.List.Last); Next = null; } // if-else } // constructor
/// <summary> /// Sorts the list programs by start time /// </summary> /// <param name="epgService">Service to sort</param> private void Sort(EpgService epgService) { if ((epgService.Programs == null) || (epgService.Programs.Count == 0)) { return; } var programs = new EpgProgram[epgService.Programs.Count]; var index = 0; foreach (var program in epgService.Programs) { programs[index++] = program; } // foreach var sortedPrograms = from program in programs orderby program.UtcStartTime select program; epgService.Programs = new LinkedList <EpgProgram>(sortedPrograms); } // Sort
} // constructor public EpgLinkedListWrapper(string serviceIdRef, LinkedList <EpgProgram> linkedList, EpgProgram phantomEmptyProgram, bool first = true) { ServiceIdRef = serviceIdRef; List = linkedList; PhantomNode = new EpgLinkedListPhantomNode(this, phantomEmptyProgram, first); } // constructor