コード例 #1
0
        }     // 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
コード例 #2
0
        } // 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
コード例 #3
0
        } // 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
コード例 #4
0
        } // 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
コード例 #5
0
 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
コード例 #6
0
        /// <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
コード例 #7
0
        } // constructor

        public EpgLinkedListWrapper(string serviceIdRef, LinkedList <EpgProgram> linkedList, EpgProgram phantomEmptyProgram, bool first = true)
        {
            ServiceIdRef = serviceIdRef;
            List         = linkedList;
            PhantomNode  = new EpgLinkedListPhantomNode(this, phantomEmptyProgram, first);
        } // constructor