Exemplo n.º 1
0
        private static void processStationEPG(XmlWriter xmlWriter, TVStation tvStation)
        {
            Regex whitespace = new Regex(@"\s+");

            string channelNumber;

            if (tvStation.ChannelID == null)
            {
                if (!RunParameters.Instance.Options.Contains("USECHANNELID"))
                {
                    channelNumber = tvStation.ServiceID.ToString();
                }
                else
                {
                    if (tvStation.LogicalChannelNumber != -1)
                    {
                        channelNumber = tvStation.LogicalChannelNumber.ToString();
                    }
                    else
                    {
                        channelNumber = tvStation.ServiceID.ToString();
                    }
                }
            }
            else
            {
                channelNumber = tvStation.ChannelID;
            }

            for (int index = 0; index < tvStation.EPGCollection.Count; index++)
            {
                EPGEntry epgEntry = tvStation.EPGCollection[index];
                processEPGEntry(xmlWriter, channelNumber, epgEntry);
            }
        }
Exemplo n.º 2
0
        private void addChannelInNameOrder(Collection <Channel> sortedChannels, Channel newChannel)
        {
            TVStation newStation = TVStation.FindStation(newChannel.OriginalNetworkID, newChannel.TransportStreamID, newChannel.ServiceID);

            if (newStation == null)
            {
                newStation = new TVStation("No Name");
            }

            foreach (Channel oldChannel in sortedChannels)
            {
                TVStation oldStation = TVStation.FindStation(oldChannel.OriginalNetworkID, oldChannel.TransportStreamID, oldChannel.ServiceID);
                if (oldStation == null)
                {
                    oldStation = new TVStation("No Name");
                }

                if (oldStation.Name.CompareTo(newStation.Name) > 0)
                {
                    sortedChannels.Insert(sortedChannels.IndexOf(oldChannel), newChannel);
                    return;
                }
            }

            sortedChannels.Add(newChannel);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Map the channel to a TV station.
        /// </summary>
        /// <param name="station">The TV station to be mapped.</param>
        public void CreateChannelMapping(TVStation station)
        {
            if (station.LogicalChannelNumber != -1)
            {
                return;
            }

            station.LogicalChannelNumber = UserChannel;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Create a station instance.
        /// </summary>
        /// <param name="serviceID">The service ID of the station.</param>
        /// <returns>A TVStation instance.</returns>
        public static TVStation CreateStation(int serviceID)
        {
            TVStation station = new TVStation(serviceID.ToString(CultureInfo.InvariantCulture));

            station.ServiceID = serviceID;

            AddStation(station);

            return(station);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Create a station instance.
        /// </summary>
        /// <param name="originalNetworkID">The ONID of the station.</param>
        /// <param name="transportStreamID">The TSID of the station.</param>
        /// <param name="serviceID">The SID of the station.</param>
        /// <returns>A TVStation instance.</returns>
        public static TVStation CreateStation(int originalNetworkID, int transportStreamID, int serviceID)
        {
            TVStation station = new TVStation(originalNetworkID + ":" + transportStreamID + ":" + serviceID);

            station.OriginalNetworkID = originalNetworkID;
            station.TransportStreamID = transportStreamID;
            station.ServiceID         = serviceID;

            AddStation(station);

            return(station);
        }
Exemplo n.º 6
0
        private static void addStation(Collection <TVStation> stations, TVStation newStation)
        {
            foreach (TVStation oldStation in stations)
            {
                if (oldStation.OriginalNetworkID == newStation.OriginalNetworkID &&
                    oldStation.TransportStreamID == newStation.TransportStreamID &&
                    oldStation.ServiceID == newStation.ServiceID)
                {
                    return;
                }
            }

            stations.Add(newStation);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Add a station to the collection of stations to be processed rejecting duplicates.
        /// </summary>
        /// <param name="newStation">The station to be added.</param>
        public static bool AddStation(TVStation newStation)
        {
            if (newStation == null)
            {
                throw (new ArgumentException("The new station cannot be null", "newStation"));
            }

            foreach (TVStation oldStation in StationCollection)
            {
                if (oldStation.OriginalNetworkID != -1)
                {
                    if (oldStation.OriginalNetworkID == newStation.OriginalNetworkID &&
                        oldStation.TransportStreamID == newStation.TransportStreamID &&
                        oldStation.ServiceID == newStation.ServiceID)
                    {
                        oldStation.Name = newStation.Name;
                        return(false);
                    }
                }
                else
                {
                    if (oldStation.Frequency != -1)
                    {
                        if (oldStation.Frequency == newStation.Frequency &&
                            oldStation.ServiceID == newStation.ServiceID)
                        {
                            oldStation.Name = newStation.Name;
                            oldStation.OriginalNetworkID = newStation.OriginalNetworkID;
                            oldStation.TransportStreamID = newStation.TransportStreamID;
                            return(false);
                        }
                    }
                    else
                    {
                        if (oldStation.ServiceID == newStation.ServiceID)
                        {
                            oldStation.Name = newStation.Name;
                            oldStation.OriginalNetworkID = newStation.OriginalNetworkID;
                            oldStation.TransportStreamID = newStation.TransportStreamID;
                            oldStation.Frequency         = newStation.Frequency;
                            return(false);
                        }
                    }
                }
            }

            StationCollection.Add(newStation);

            return(true);
        }
Exemplo n.º 8
0
        private static void processStationHeader(XmlWriter xmlWriter, TVStation tvStation)
        {
            xmlWriter.WriteAttributeString("Name", tvStation.Name.Trim());

            xmlWriter.WriteAttributeString("ID", tvStation.OriginalNetworkID.ToString() + ":" +
                                           tvStation.TransportStreamID.ToString() + ":" +
                                           tvStation.ServiceID.ToString());
            xmlWriter.WriteAttributeString("NID", tvStation.OriginalNetworkID.ToString());
            xmlWriter.WriteAttributeString("TID", tvStation.TransportStreamID.ToString());
            xmlWriter.WriteAttributeString("SID", tvStation.ServiceID.ToString());
            xmlWriter.WriteAttributeString("Count", tvStation.EPGCollection.Count.ToString());
            xmlWriter.WriteAttributeString("FirstStart", getStartTime(tvStation.EPGCollection[0]));
            xmlWriter.WriteAttributeString("LastStart", getStartTime(tvStation.EPGCollection[tvStation.EPGCollection.Count - 1]));
        }
Exemplo n.º 9
0
        /// <summary>
        /// Update this instance from another.
        /// </summary>
        /// <param name="station">The instance containing the update data.</param>
        public void Update(TVStation station)
        {
            if (station == null)
            {
                throw (new ArgumentException("The station cannot be null", "Station"));
            }

            audioPID  = station.AudioPID;
            dsmccPID  = station.DSMCCPID;
            encrypted = station.Encrypted;
            frequency = station.Frequency;
            name      = station.Name;
            nextFollowingAvailable = station.NextFollowingAvailable;
            providerName           = station.ProviderName;
            scheduleAvailable      = station.ScheduleAvailable;
            serviceType            = station.ServiceType;
            videoPID = station.VideoPID;
        }
Exemplo n.º 10
0
        private static void processStationEPG(XmlWriter xmlWriter, TVStation tvStation)
        {
            xmlWriter.WriteStartElement("dvblink_epg");

            for (int index = 0; index < tvStation.EPGCollection.Count; index++)
            {
                EPGEntry epgEntry = tvStation.EPGCollection[index];

                if (TuningFrequency.HasMHEG5Frequency)
                {
                    checkMidnightBreak(tvStation, epgEntry, index);
                }

                processEPGEntry(xmlWriter, epgEntry);
            }

            xmlWriter.WriteEndElement();
        }
Exemplo n.º 11
0
        /// <summary>
        /// Checks this instance for equality with another.
        /// </summary>
        /// <param name="station">The other instance.</param>
        /// <returns>True if the other instance is equal; false otherwise.</returns>
        public bool EqualTo(TVStation station)
        {
            if (excluded != station.Excluded)
            {
                return(false);
            }

            if (newName != station.NewName)
            {
                return(false);
            }

            if (logicalChannelNumber != station.LogicalChannelNumber)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 12
0
        private static void checkMidnightBreak(TVStation tvStation, EPGEntry currentEntry, int index)
        {
            if (index == tvStation.EPGCollection.Count - 1)
            {
                return;
            }

            EPGEntry nextEntry = tvStation.EPGCollection[index + 1];

            if (currentEntry.EventName != nextEntry.EventName)
            {
                return;
            }

            bool combined = false;

            if (RunParameters.Instance.CountryCode == null)
            {
                combined = checkNZLTimes(currentEntry, nextEntry);
            }
            else
            {
                switch (RunParameters.Instance.CountryCode)
                {
                case "NZL":
                    combined = checkNZLTimes(currentEntry, nextEntry);
                    break;

                case "AUS":
                    combined = checkAUSTimes(currentEntry, nextEntry);
                    break;

                default:
                    break;
                }
            }

            if (combined)
            {
                tvStation.EPGCollection.RemoveAt(index + 1);
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// Log all the channel mappings.
        /// </summary>
        /// <param name="logger">The logger instance to be used.</param>
        public void LogChannelMapping(Logger logger)
        {
            TVStation station = TVStation.FindStation(OriginalNetworkID, TransportStreamID, ServiceID);

            string stationName;

            if (station != null)
            {
                stationName = station.Name;
            }
            else
            {
                stationName = "** No Station **";
            }

            StringBuilder flagString = new StringBuilder();

            if (Flags != null)
            {
                flagString.Append("0x");

                foreach (byte flagByte in Flags)
                {
                    flagString.Append(flagByte.ToString("X").PadLeft(2, '0'));
                }
            }
            else
            {
                flagString.Append("N/A");
            }

            logger.Write("Channel: ONID " + OriginalNetworkID +
                         " TSID " + TransportStreamID +
                         " SID " + ServiceID +
                         " Channel ID: " + ChannelID +
                         " User Channel: " + UserChannel +
                         " Bouquet: " + BouquetID +
                         " Region: " + Region +
                         " Flags: " + flagString +
                         " Name: " + stationName);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Get a description of this instance.
        /// </summary>
        /// <returns>A string describing this instance.</returns>
        public override string ToString()
        {
            TVStation station = TVStation.FindStation(originalNetworkID, transportStreamID, serviceID);
            string    stationName;

            if (station != null)
            {
                stationName = station.Name;
            }
            else
            {
                stationName = "** No Station **";
            }

            return("ONID " + OriginalNetworkID +
                   " TSID " + TransportStreamID +
                   " SID " + ServiceID +
                   " Channel ID: " + ChannelID +
                   " User Channel: " + UserChannel +
                   " Bouquet: " + BouquetID +
                   " Region: " + Region +
                   " Station: " + stationName);
        }
Exemplo n.º 15
0
        /// <summary>
        /// Return a copy of this instance.
        /// </summary>
        /// <returns>A new instance with the same properties as this instance.</returns>
        public TVStation Clone()
        {
            TVStation newStation = new TVStation(name);

            newStation.Frequency              = frequency;
            newStation.OriginalNetworkID      = originalNetworkID;
            newStation.TransportStreamID      = transportStreamID;
            newStation.ServiceID              = serviceID;
            newStation.AudioPID               = audioPID;
            newStation.VideoPID               = videoPID;
            newStation.DSMCCPID               = dsmccPID;
            newStation.Encrypted              = encrypted;
            newStation.ServiceType            = serviceType;
            newStation.NextFollowingAvailable = nextFollowingAvailable;
            newStation.ScheduleAvailable      = scheduleAvailable;
            newStation.CollectionType         = collectionType;
            newStation.ProviderName           = providerName;
            newStation.Excluded               = Excluded;
            newStation.NewName = newName;
            newStation.LogicalChannelNumber = logicalChannelNumber;
            newStation.MinorChannelNumber   = minorChannelNumber;

            return(newStation);
        }
Exemplo n.º 16
0
 /// <summary>
 /// Initialize a new instance of the TimeOffsetChannel.
 /// </summary>
 /// <param name="sourceChannel">The source channel.</param>
 /// <param name="destinationChannel">The destination channel.</param>
 /// <param name="offset">The time offset in hours.</param>
 public TimeOffsetChannel(TVStation sourceChannel, TVStation destinationChannel, int offset)
 {
     this.sourceChannel = sourceChannel;
     this.destinationChannel = destinationChannel;
     this.offset = offset;
 }
Exemplo n.º 17
0
        /// <summary>
        /// Create the EPG entries from the stored title and summary data.
        /// </summary>
        /// <param name="station">The station that the EPG records are for.</param>
        /// <param name="titleLogger">A Logger instance for the program titles.</param>
        /// <param name="descriptionLogger">A Logger instance for the program descriptions.</param>
        /// <param name="extendedDescriptionLogger">A Logger instance for the extended program descriptions.</param>
        /// <param name="undefinedRecordLogger">A Logger instance for the undefined records.</param>
        public void ProcessChannelForEPG(TVStation station, Logger titleLogger, Logger descriptionLogger, Logger extendedDescriptionLogger, Logger undefinedRecordLogger)
        {
            bool first = true;
            DateTime expectedStartTime = new DateTime();

            foreach (OpenTVTitleData titleData in TitleData)
            {
                EPGEntry epgEntry = new EPGEntry();
                epgEntry.OriginalNetworkID = OriginalNetworkID;
                epgEntry.TransportStreamID = TransportStreamID;
                epgEntry.ServiceID = ServiceID;
                epgEntry.EventID = titleData.EventID;
                epgEntry.StartTime = Utils.RoundTime(TimeOffsetEntry.GetAdjustedTime(titleData.StartTime));
                epgEntry.Duration = Utils.RoundTime(titleData.Duration);

                getEventName(epgEntry, titleData);
                OpenTVSummaryData summary = getShortDescription(epgEntry, titleData);

                getParentalRating(titleData, epgEntry);
                getAspectRatio(titleData, epgEntry);
                getVideoQuality(titleData, epgEntry);
                getAudioQuality(titleData, epgEntry);
                getSubTitles(titleData, epgEntry);
                getEventCategory(titleData, epgEntry);

                getSeasonEpisode(epgEntry);
                getSeriesLink(epgEntry, summary);

                getExtendedRatings(epgEntry);
                getDirector(epgEntry);
                getCast(epgEntry);
                getDate(epgEntry);

                getSubTitle(epgEntry);

                epgEntry.EPGSource = EPGSource.OpenTV;
                epgEntry.PID = titleData.PID;
                epgEntry.Table = titleData.Table;
                epgEntry.TimeStamp = titleData.TimeStamp;

                epgEntry.UnknownData = titleData.Flags;

                station.AddEPGEntry(epgEntry);

                if (first)
                {
                    expectedStartTime = new DateTime();
                    first = false;
                }
                else
                {
                    if (epgEntry.StartTime < expectedStartTime)
                    {
                        if (titleLogger != null)
                            titleLogger.Write(" ** Overlap In Schedule **");
                    }
                    else
                    {
                        if (RunParameters.Instance.Options.Contains("ACCEPTBREAKS"))
                        {
                            if (epgEntry.StartTime > expectedStartTime + new TimeSpan(0, 5, 0))
                            {
                                if (titleLogger != null)
                                    titleLogger.Write(" ** Gap In Schedule **");
                            }
                        }
                        else
                        {
                            if (epgEntry.StartTime > expectedStartTime)
                            {
                                if (titleLogger != null)
                                    titleLogger.Write(" ** Gap In Schedule **");
                            }
                        }
                    }
                }

                expectedStartTime = epgEntry.StartTime + epgEntry.Duration;

                if (titleLogger != null)
                {
                    string seriesLink = "No ";
                    if (summary != null && summary.SeriesLink != -1)
                        seriesLink = "0x" + summary.SeriesLink.ToString("X");

                    titleLogger.Write(epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                        " Cat ID " + titleData.CategoryID.ToString("000 ") +
                        " Flags " + Utils.ConvertToHex(titleData.Flags) +
                        " SLink " + seriesLink + " " +
                        epgEntry.StartTime.ToShortDateString() + " " +
                        epgEntry.StartTime.ToString("HH:mm") + " - " +
                        epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                        titleData.EventName);

                    if (RunParameters.Instance.DebugIDs.Contains("BITPATTERN"))
                        titleLogger.Write("Bit pattern: " + Utils.ConvertToBits(titleData.EventNameBytes));
                }

                if (descriptionLogger != null && summary != null)
                {
                    descriptionLogger.Write(epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                        epgEntry.StartTime.ToShortDateString() + " " +
                        epgEntry.StartTime.ToString("HH:mm") + " - " +
                        epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                        summary.ShortDescription);

                    if (RunParameters.Instance.DebugIDs.Contains("BITPATTERN"))
                        descriptionLogger.Write("Bit pattern: " + Utils.ConvertToBits(summary.ShortDescriptionBytes));
                }

                if (extendedDescriptionLogger != null && summary != null)
                {
                    string extendedDescription = summary.ExtendedDescription;
                    if (extendedDescription != null)
                        extendedDescriptionLogger.Write(epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                            epgEntry.StartTime.ToShortDateString() + " " +
                            epgEntry.StartTime.ToString("HH:mm") + " - " +
                            epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                            extendedDescription);
                }

                if (undefinedRecordLogger != null)
                {
                    Collection<OpenTVRecordBase> undefinedTitleRecords = titleData.UndefinedRecords;

                    if (undefinedTitleRecords != null)
                    {
                        foreach (OpenTVRecordBase record in undefinedTitleRecords)
                        {
                            if (record.Data != null)
                                undefinedRecordLogger.Write("Title records: " + epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                                    epgEntry.StartTime.ToShortDateString() + " " +
                                    epgEntry.StartTime.ToString("HH:mm") + " - " +
                                    epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                                    titleData.EventName +
                                    " Tag: " + record.Tag.ToString("X") +
                                    " Data: " + Utils.ConvertToHex(record.Data));
                            else
                                undefinedRecordLogger.Write("Title records: " + epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                                    epgEntry.StartTime.ToShortDateString() + " " +
                                    epgEntry.StartTime.ToString("HH:mm") + " - " +
                                    epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                                    titleData.EventName +
                                    " Tag: 0x" + record.Tag.ToString("X") +
                                    " Data: No data");
                        }
                    }

                    if (summary != null)
                    {
                        Collection<OpenTVRecordBase> undefinedSummaryRecords = summary.UndefinedRecords;

                        if (undefinedSummaryRecords != null)
                        {
                            foreach (OpenTVRecordBase record in undefinedSummaryRecords)
                            {
                                if (record.Data != null)
                                    undefinedRecordLogger.Write("Summary records: " + epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                                        epgEntry.StartTime.ToShortDateString() + " " +
                                        epgEntry.StartTime.ToString("HH:mm") + " - " +
                                        epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") +
                                        " Tag: " + record.Tag.ToString("X") +
                                        " Data: " + Utils.ConvertToHex(record.Data));
                                else
                                    undefinedRecordLogger.Write("Summary records: " + epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                                        epgEntry.StartTime.ToShortDateString() + " " +
                                        epgEntry.StartTime.ToString("HH:mm") + " - " +
                                        epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") +
                                        " Tag: ox" + record.Tag.ToString("X") +
                                        " Data: No data");
                            }
                        }
                    }
                }

                if (RunParameters.Instance.DebugIDs.Contains("CATXREF"))
                    updateCategoryEntries(OriginalNetworkID, TransportStreamID, ServiceID, epgEntry.StartTime, epgEntry.EventName, titleData.CategoryID);

                if (!RunParameters.Instance.Options.Contains("ACCEPTBREAKS"))
                {
                    if (epgEntry.StartTime.Second != 0)
                    {
                        if (titleLogger != null)
                            titleLogger.Write("** Suspect Start Time **");
                    }
                }
            }

            foreach (OpenTVTitleData titleData in SuspectTimeTitleData)
            {
                if (titleLogger != null)
                    titleLogger.Write("** Suspect time: " + titleData.StartTime + " " + titleData.EventName);
            }
        }
Exemplo n.º 18
0
        private int processStation(string parts)
        {
            string[] parameters = parts.Split(new char[] { ',' });
            if (parameters.Length < 3 || parameters.Length > 5)
            {
                Logger.Instance.Write("INI file format error: A Station line is wrong.");
                return (errorCodeFormatError);
            }

            TVStation tvStation;
            if (parameters.Length == 3)
                tvStation = new TVStation("Excluded Station");
            else
                tvStation = new TVStation("Changed Station");

            try
            {
                tvStation.OriginalNetworkID = Int32.Parse(parameters[0].Trim());
                tvStation.TransportStreamID = Int32.Parse(parameters[1].Trim());
                tvStation.ServiceID = Int32.Parse(parameters[2].Trim());

                if (parameters.Length == 3)
                {
                    tvStation.Excluded = true;

                    TVStation oldStation = TVStation.FindStation(tvStation.OriginalNetworkID, tvStation.TransportStreamID, tvStation.ServiceID);
                    if (oldStation == null)
                        TVStation.AddStation(tvStation);
                    else
                        oldStation.Excluded = tvStation.Excluded;
                    return (errorCodeNoError);
                }

                try
                {
                    tvStation.LogicalChannelNumber = Int32.Parse(parameters[3].Trim());
                    if (parameters.Length == 5)
                        tvStation.NewName = parameters[4].Trim().Replace("%%", ",");

                    TVStation oldStation = TVStation.FindStation(tvStation.OriginalNetworkID, tvStation.TransportStreamID, tvStation.ServiceID);
                    if (oldStation == null)
                        TVStation.AddStation(tvStation);
                    else
                    {
                        oldStation.LogicalChannelNumber = tvStation.LogicalChannelNumber;
                        oldStation.NewName = tvStation.NewName;
                    }

                    return (errorCodeNoError);
                }
                catch (FormatException)
                {
                    if (parameters.Length == 5)
                    {
                        Logger.Instance.Write("INI file format error: A Station line is wrong.");
                        return (errorCodeFormatError);
                    }
                    else
                    {
                        tvStation.NewName = parameters[3].Trim().Replace("%%", ",");

                        TVStation oldStation = TVStation.FindStation(tvStation.OriginalNetworkID, tvStation.TransportStreamID, tvStation.ServiceID);
                        if (oldStation == null)
                            TVStation.AddStation(tvStation);
                        else
                            oldStation.NewName = tvStation.NewName;
                    }
                }
                catch (ArithmeticException)
                {
                    Logger.Instance.Write("INI file format error: A Station line is wrong.");
                    return (errorCodeFormatError);
                }
            }
            catch (FormatException)
            {
                Logger.Instance.Write("INI file format error: A Station line is wrong.");
                return (errorCodeFormatError);
            }
            catch (ArithmeticException)
            {
                Logger.Instance.Write("INI file format error: A Station line is wrong.");
                return (errorCodeFormatError);
            }

            return (errorCodeNoError);
        }
Exemplo n.º 19
0
        private int processOffsetChannel(string parts)
        {
            string[] parameters = parts.Split(new char[] { ',' });
            if (parameters.Length != 9)
            {
                Logger.Instance.Write("INI file format error: An Offset line is wrong.");
                return (errorCodeFormatError);
            }

            try
            {
                TVStation sourceChannel = new TVStation(parameters[0].Trim().Replace("%%", ","));
                sourceChannel.OriginalNetworkID = Int32.Parse(parameters[1].Trim());
                sourceChannel.TransportStreamID = Int32.Parse(parameters[2].Trim());
                sourceChannel.ServiceID = Int32.Parse(parameters[3].Trim());

                TVStation destinationChannel = new TVStation(parameters[4].Trim().Replace("%%", ","));
                destinationChannel.OriginalNetworkID = Int32.Parse(parameters[5].Trim());
                destinationChannel.TransportStreamID = Int32.Parse(parameters[6].Trim());
                destinationChannel.ServiceID = Int32.Parse(parameters[7].Trim());

                TimeOffsetChannel channel = new TimeOffsetChannel(sourceChannel, destinationChannel, Int32.Parse(parameters[8].Trim()));
                TimeOffsetChannel.Channels.Add(channel);
            }
            catch (FormatException)
            {
                Logger.Instance.Write("INI file format error: An Offset line is wrong.");
                return (errorCodeFormatError);
            }
            catch (ArithmeticException)
            {
                Logger.Instance.Write("INI file format error: An Offset line is wrong.");
                return (errorCodeFormatError);
            }

            return (errorCodeNoError);
        }
Exemplo n.º 20
0
        private void processServiceDescriptionSection(ServiceDescriptionSection serviceDescriptionSection, Collection<TVStation> tvStations, TuningFrequency frequency)
        {
            foreach (ServiceDescription serviceDescription in serviceDescriptionSection.ServiceDescriptions)
            {
                bool processStation = checkServiceInfo(serviceDescription);

                if (processStation)
                {
                    TVStation tvStation = new TVStation(serviceDescription.ServiceName);
                    tvStation.ProviderName = serviceDescription.ProviderName;
                    if (useActualFrequency)
                    {
                        tvStation.Frequency = NetworkInformationSection.GetFrequency(serviceDescriptionSection.OriginalNetworkID, serviceDescriptionSection.TransportStreamID) * 10;
                        if (tvStation.Frequency == 0)
                        {
                            tvStation.Frequency = frequency.Frequency;
                            Logger.Instance.Write("Station : " + tvStation.Name + " not found in Network Information Table");
                        }
                    }
                    else
                        tvStation.Frequency = frequency.Frequency;

                    tvStation.OriginalNetworkID = serviceDescriptionSection.OriginalNetworkID;
                    tvStation.TransportStreamID = serviceDescriptionSection.TransportStreamID;
                    tvStation.ServiceID = serviceDescription.ServiceID;
                    tvStation.Encrypted = serviceDescription.Scrambled;
                    tvStation.ServiceType = serviceDescription.ServiceType;
                    tvStation.ScheduleAvailable = serviceDescription.EITSchedule;
                    tvStation.NextFollowingAvailable = serviceDescription.EITPresentFollowing;

                    tvStation.TunerType = frequency.TunerType;
                    if (frequency.TunerType == TunerType.Satellite)
                    {
                        Satellite satellite = ((SatelliteFrequency)frequency).Provider as Satellite;
                        if (satellite != null)
                            tvStation.Satellite = satellite;
                    }

                    if (RunParameters.Instance.Options.Contains("USECHANNELID"))
                    {
                        if (serviceDescription.ChannelNumber != -1)
                            tvStation.OriginalChannelNumber = serviceDescription.ChannelNumber;
                    }

                    addStation(tvStations, tvStation);
                }
            }
        }
Exemplo n.º 21
0
        private void addStation(Collection<TVStation> tvStations, TVStation newStation)
        {
            foreach (TVStation oldStation in tvStations)
            {
                if (oldStation.OriginalNetworkID == newStation.OriginalNetworkID &&
                    oldStation.TransportStreamID == newStation.TransportStreamID &&
                    oldStation.ServiceID == newStation.ServiceID)
                {
                    oldStation.Frequency = newStation.Frequency;
                    oldStation.Name = newStation.Name;
                    return;
                }
            }

            tvStations.Add(newStation);
        }
Exemplo n.º 22
0
        private void updateCategoryEntries(TVStation tvStation, EITEntry eitEntry)
        {
            if (categoryEntries == null)
                categoryEntries = new Collection<CategoryEntry>();

            CategoryEntry newEntry = new CategoryEntry(tvStation.OriginalNetworkID, tvStation.TransportStreamID, tvStation.ServiceID, eitEntry.StartTime, eitEntry.EventName, eitEntry.ContentType, eitEntry.ContentSubType);

            foreach (CategoryEntry oldEntry in categoryEntries)
            {
                if (oldEntry.NetworkID == newEntry.NetworkID &&
                    oldEntry.TransportStreamID == newEntry.TransportStreamID &&
                    oldEntry.ServiceID == newEntry.ServiceID &&
                    oldEntry.StartTime == newEntry.StartTime)
                    return;

                if (oldEntry.NetworkID > newEntry.NetworkID)
                {
                    categoryEntries.Insert(categoryEntries.IndexOf(oldEntry), newEntry);
                    return;
                }

                if (oldEntry.NetworkID == newEntry.NetworkID &&
                    oldEntry.TransportStreamID > newEntry.TransportStreamID)
                {
                    categoryEntries.Insert(categoryEntries.IndexOf(oldEntry), newEntry);
                    return;
                }

                if (oldEntry.NetworkID == newEntry.NetworkID &&
                    oldEntry.TransportStreamID == newEntry.TransportStreamID &&
                    oldEntry.ServiceID > newEntry.ServiceID)
                {
                    categoryEntries.Insert(categoryEntries.IndexOf(oldEntry), newEntry);
                    return;
                }

                if (oldEntry.NetworkID == newEntry.NetworkID &&
                    oldEntry.TransportStreamID == newEntry.TransportStreamID &&
                    oldEntry.ServiceID == newEntry.ServiceID &&
                    oldEntry.StartTime > newEntry.StartTime)
                {
                    categoryEntries.Insert(categoryEntries.IndexOf(oldEntry), newEntry);
                    return;
                }
            }

            categoryEntries.Add(newEntry);
        }
Exemplo n.º 23
0
        private static void createAreaRegionChannelFile(string fileName)
        {
            string regionChannelFileName = Path.Combine(Path.GetDirectoryName(fileName), "AreaRegionChannelInfo.xml");

            try
            {
                Logger.Instance.Write("Deleting any existing version of Area/Region channel file");
                File.SetAttributes(regionChannelFileName, FileAttributes.Normal);
                File.Delete(regionChannelFileName);
            }
            catch (IOException e)
            {
                Logger.Instance.Write("File delete exception: " + e.Message);
            }

            Logger.Instance.Write("Creating Area/Region channel file: " + regionChannelFileName);

            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent = true;
            settings.NewLineOnAttributes = true;
            settings.Encoding            = new UTF8Encoding(false);
            settings.CloseOutput         = true;

            using (XmlWriter xmlWriter = XmlWriter.Create(regionChannelFileName, settings))
            {
                xmlWriter.WriteStartDocument();
                xmlWriter.WriteStartElement("areas");

                foreach (Bouquet bouquet in Bouquet.Bouquets)
                {
                    bool writeStart = true;

                    foreach (Region region in bouquet.Regions)
                    {
                        bool include = checkArea(bouquet.BouquetID, region.Code);
                        if (include)
                        {
                            if (writeStart)
                            {
                                xmlWriter.WriteStartElement("area");
                                xmlWriter.WriteAttributeString("id", bouquet.BouquetID.ToString());
                                xmlWriter.WriteAttributeString("name", bouquet.Name.ToString());
                                writeStart = false;
                            }

                            xmlWriter.WriteStartElement("region");
                            xmlWriter.WriteAttributeString("id", region.Code.ToString());

                            foreach (Channel channel in region.GetChannelsInChannelNumberOrder())
                            {
                                {
                                    TVStation station = TVStation.FindStation(channel.OriginalNetworkID, channel.TransportStreamID, channel.ServiceID);
                                    if (station != null)
                                    {
                                        xmlWriter.WriteStartElement("channel");

                                        xmlWriter.WriteAttributeString("id", channel.UserChannel.ToString());
                                        xmlWriter.WriteAttributeString("nid", channel.OriginalNetworkID.ToString());
                                        xmlWriter.WriteAttributeString("tid", channel.TransportStreamID.ToString());
                                        xmlWriter.WriteAttributeString("sid", channel.ServiceID.ToString());

                                        if (station.NewName == null)
                                        {
                                            xmlWriter.WriteAttributeString("name", station.Name);
                                        }
                                        else
                                        {
                                            xmlWriter.WriteAttributeString("name", station.NewName);
                                        }

                                        xmlWriter.WriteEndElement();
                                    }
                                }
                            }

                            xmlWriter.WriteEndElement();
                        }
                    }

                    if (!writeStart)
                    {
                        xmlWriter.WriteEndElement();
                    }
                }

                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndDocument();

                xmlWriter.Flush();
                xmlWriter.Close();
            }
        }
Exemplo n.º 24
0
        private static void processStationEPG(XmlWriter xmlWriter, TVStation tvStation)
        {
            Regex whitespace = new Regex(@"\s+");

            string channelNumber;
            if (tvStation.ChannelID == null)
            {
                if (!RunParameters.Instance.Options.Contains("USECHANNELID"))
                    channelNumber = tvStation.ServiceID.ToString();
                else
                {
                    if (tvStation.LogicalChannelNumber != -1)
                        channelNumber = tvStation.LogicalChannelNumber.ToString();
                    else
                        channelNumber = tvStation.ServiceID.ToString();
                }
            }
            else
                channelNumber = tvStation.ChannelID;

            for (int index = 0; index < tvStation.EPGCollection.Count; index++)
            {
                EPGEntry epgEntry = tvStation.EPGCollection[index];
                processEPGEntry(xmlWriter, channelNumber, epgEntry);
            }
        }
Exemplo n.º 25
0
        private static void processStationHeader(XmlWriter xmlWriter, TVStation tvStation)
        {
            xmlWriter.WriteStartElement("channel");

            if (tvStation.ChannelID == null)
            {
                if (!RunParameters.Instance.Options.Contains("USECHANNELID"))
                    xmlWriter.WriteAttributeString("id", tvStation.ServiceID.ToString());
                else
                {
                    if (tvStation.LogicalChannelNumber != -1)
                        xmlWriter.WriteAttributeString("id", tvStation.LogicalChannelNumber.ToString());
                    else
                        xmlWriter.WriteAttributeString("id", tvStation.ServiceID.ToString());
                }
            }
            else
                xmlWriter.WriteAttributeString("id", tvStation.ChannelID);

            if (tvStation.NewName == null)
                xmlWriter.WriteElementString("display-name", tvStation.Name);
            else
                xmlWriter.WriteElementString("display-name", tvStation.NewName);

            if (RunParameters.Instance.Options.Contains("USELCN"))
            {
                if (tvStation.ChannelID != null)
                    xmlWriter.WriteElementString("lcn", tvStation.ChannelID);
                else
                {
                    if (tvStation.LogicalChannelNumber != -1)
                        xmlWriter.WriteElementString("lcn", tvStation.LogicalChannelNumber.ToString());
                }
            }

            if (RunParameters.Instance.Options.Contains("USEIMAGE"))
            {
                if (File.Exists(RunParameters.DataDirectory + "\\Images\\" + tvStation.ServiceID + ".png"))
                {
                    xmlWriter.WriteStartElement("icon");
                    xmlWriter.WriteAttributeString("src", "file://" + RunParameters.DataDirectory + "\\Images\\" + tvStation.ServiceID + ".png");
                    xmlWriter.WriteEndElement();
                }
            }

            xmlWriter.WriteEndElement();
        }
Exemplo n.º 26
0
        private bool checkChannelMapping(TVStation tvStation)
        {
            Bouquet bouquet = Bouquet.FindBouquet(RunParameters.Instance.ChannelBouquet);
            if (bouquet == null)
                return (false);

            Region region = bouquet.FindRegion(RunParameters.Instance.ChannelRegion);
            if (region == null)
                return (false);

            Channel channel = region.FindChannel(tvStation.OriginalNetworkID, tvStation.TransportStreamID, tvStation.ServiceID);
            if (channel == null)
                return (false);

            if (tvStation.LogicalChannelNumber != -1)
                return (true);

            tvStation.LogicalChannelNumber = channel.UserChannel;

            return (true);
        }
Exemplo n.º 27
0
        /// <summary>
        /// Create the EPG entries from the stored title and summary data.
        /// </summary>
        /// <param name="station">The station that the EPG records are for.</param>
        /// <param name="titleLogger">A Logger instance for the program titles.</param>
        /// <param name="descriptionLogger">A Logger instance for the program descriptions.</param>
        /// <param name="collectionType">The type of collection, MHW1 or MHW2.</param>
        public void ProcessChannelForEPG(TVStation station, Logger titleLogger, Logger descriptionLogger, CollectionType collectionType)
        {
            bool first = true;
            DateTime expectedStartTime = new DateTime();

            foreach (MediaHighwayTitle title in Titles)
            {
                EPGEntry epgEntry = new EPGEntry();
                epgEntry.OriginalNetworkID = OriginalNetworkID;
                epgEntry.TransportStreamID = TransportStreamID;
                epgEntry.ServiceID = ServiceID;
                epgEntry.EventID = title.EventID;

                processEventName(epgEntry, title.EventName);

                MediaHighwaySummary summary = null;

                if (title.SummaryAvailable)
                {
                    summary = findSummary(title.EventID);
                    if (summary != null)
                        processShortDescription(epgEntry, summary.ShortDescription);
                    else
                    {
                        if (RunParameters.Instance.DebugIDs.Contains("MHW2SUMMARYMISSING"))
                            Logger.Instance.Write("Summary missing for event ID " + title.EventID);
                    }
                }
                if (summary == null)
                    epgEntry.ShortDescription = "No Synopsis Available";

                if (collectionType == CollectionType.MediaHighway1)
                    epgEntry.StartTime = Utils.RoundTime(TimeOffsetEntry.GetOffsetTime(title.StartTime));
                else
                    epgEntry.StartTime = Utils.RoundTime(TimeOffsetEntry.GetAdjustedTime(title.StartTime));
                epgEntry.Duration = Utils.RoundTime(title.Duration);

                epgEntry.EventCategory = getEventCategory(epgEntry.EventName, epgEntry.ShortDescription, title.CategoryID);

                if (collectionType == CollectionType.MediaHighway1)
                    epgEntry.EPGSource = EPGSource.MediaHighway1;
                else
                    epgEntry.EPGSource = EPGSource.MediaHighway2;

                epgEntry.VideoQuality = getVideoQuality(epgEntry.EventName);

                epgEntry.PreviousPlayDate = title.PreviousPlayDate;

                station.AddEPGEntry(epgEntry);

                if (first)
                {
                    expectedStartTime = new DateTime();
                    first = false;
                }
                else
                {
                    if (epgEntry.StartTime < expectedStartTime)
                    {
                        if (titleLogger != null)
                            titleLogger.Write(" ** Overlap In Schedule **");
                    }
                    else
                    {
                        if (RunParameters.Instance.Options.Contains("ACCEPTBREAKS"))
                        {
                            if (epgEntry.StartTime > expectedStartTime + new TimeSpan(0, 5, 0))
                            {
                                if (titleLogger != null)
                                    titleLogger.Write(" ** Gap In Schedule **");
                            }
                        }
                        else
                        {
                            if (epgEntry.StartTime > expectedStartTime)
                            {
                                if (titleLogger != null)
                                    titleLogger.Write(" ** Gap In Schedule **");
                            }
                        }
                    }
                }

                expectedStartTime = epgEntry.StartTime + epgEntry.Duration;

                if (titleLogger != null)
                {
                    if (collectionType == CollectionType.MediaHighway1)
                        titleLogger.Write(epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                            " Evt ID " + title.EventID +
                            " Cat ID " + title.CategoryID.ToString("00") +
                            " Summary " + title.SummaryAvailable + ":" + (summary != null) + " " +
                            " Orig Day " + title.LogDay +
                            " Orig Hours " + title.LogHours +
                            " YDay " + title.LogYesterday +
                            " Day " + title.Day +
                            " Hours " + title.Hours +
                            " Mins " + title.Minutes + " " +
                            epgEntry.StartTime.ToShortDateString() + " " +
                            epgEntry.StartTime.ToString("HH:mm") + " - " +
                            epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                            title.EventName);
                    else
                        titleLogger.Write(epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                            " Evt ID " + title.EventID +
                            " Cat ID " + title.CategoryID.ToString("000") +
                            " Main cat " + title.MainCategory +
                            " Sub cat " + title.SubCategory +
                            " Summary " + title.SummaryAvailable + ":" + (summary != null) +
                            " Unknown " + Utils.ConvertToHex(title.Unknown) + " " +
                            epgEntry.StartTime.ToShortDateString() + " " +
                            epgEntry.StartTime.ToString("HH:mm") + " - " +
                            epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                            title.EventName);

                }

                if (descriptionLogger != null && summary != null)
                {
                    if (collectionType == CollectionType.MediaHighway1)
                        descriptionLogger.Write(epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                            " Evt ID " + title.EventID +
                            " Rpts: " + summary.ReplayCount + " " +
                            epgEntry.StartTime.ToShortDateString() + " " +
                            epgEntry.StartTime.ToString("HH:mm") + " - " +
                            epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                            summary.ShortDescription);
                    else
                        descriptionLogger.Write(epgEntry.OriginalNetworkID + ":" + epgEntry.TransportStreamID + ":" + epgEntry.ServiceID + " " +
                            " Evt ID " + title.EventID + " " +
                            " Unknown " + Utils.ConvertToHex(summary.Unknown) + " " +
                            epgEntry.StartTime.ToShortDateString() + " " +
                            epgEntry.StartTime.ToString("HH:mm") + " - " +
                            epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                            summary.ShortDescription);
                }

                if (!RunParameters.Instance.Options.Contains("ACCEPTBREAKS"))
                {
                    if (epgEntry.StartTime.Second != 0)
                    {
                        if (titleLogger != null)
                            titleLogger.Write("** Suspect Start Time **");
                    }
                }
            }
        }
Exemplo n.º 28
0
        /// <summary>
        /// Load the station collection from an XML file.
        /// </summary>
        /// <param name="fileName">The full name of the xml file.</param>
        /// <returns>A collection of stations or null if the file cannot be opened.</returns>
        public static Collection <TVStation> Load(string fileName)
        {
            TVStation station = null;
            XmlReader reader  = null;

            XmlReaderSettings settings = new XmlReaderSettings();

            settings.IgnoreWhitespace = true;

            try
            {
                reader = XmlReader.Create(fileName, settings);
            }
            catch (IOException)
            {
                Logger.Instance.Write("Failed to open station store from " + fileName);
                return(null);
            }

            Collection <TVStation> stations = new Collection <TVStation>();

            try
            {
                while (!reader.EOF)
                {
                    reader.Read();
                    if (reader.IsStartElement())
                    {
                        switch (reader.Name)
                        {
                        case "Station":
                            if (station != null)
                            {
                                addStation(stations, station);
                            }

                            station = new TVStation("");

                            break;

                        default:
                            if (station != null)
                            {
                                station.load(reader);
                            }
                            break;
                        }
                    }
                }

                if (station != null)
                {
                    addStation(stations, station);
                }
            }
            catch (XmlException e)
            {
                Logger.Instance.Write("Failed to load file " + fileName);
                Logger.Instance.Write("Data exception: " + e.Message);
                stations = null;
            }
            catch (IOException e)
            {
                Logger.Instance.Write("Failed to load file " + fileName);
                Logger.Instance.Write("I/O exception: " + e.Message);
                stations = null;
            }

            if (reader != null)
            {
                reader.Close();
            }

            return(stations);
        }
Exemplo n.º 29
0
        private string getStationDescription(TVStation station)
        {
            StringBuilder description = new StringBuilder(station.FixedLengthName);

            description.Append(" (");

            description.Append(station.FullID);
            description.Append(" Type: " + station.ServiceType);
            description.Append(" " + (station.Encrypted ? "Encrypted" : "Clear"));

            string epg;

            if (station.NextFollowingAvailable)
            {
                if (station.ScheduleAvailable)
                    epg = "NN&S";
                else
                    epg = "NN";
            }
            else
            {
                if (station.ScheduleAvailable)
                    epg = "S";
                else
                    epg = "None";
            }

            description.Append(" EPG: " + epg);
            description.Append(")");

            return (description.ToString());
        }
Exemplo n.º 30
0
        private static void processStationEPG(XmlWriter xmlWriter, TVStation tvStation)
        {
            foreach (EPGEntry epgEntry in tvStation.EPGCollection)
            {
                xmlWriter.WriteStartElement("programme");

                xmlWriter.WriteAttributeString("start", epgEntry.StartTime.ToString("yyyyMMddHHmmss").Replace(":", ""));
                xmlWriter.WriteAttributeString("stop", (epgEntry.StartTime + epgEntry.Duration).ToString("yyyyMMddHHmmss").Replace(":", ""));
                xmlWriter.WriteAttributeString("channel", ((tvStation.TransportStreamID << 16) + tvStation.ServiceID).ToString());

                xmlWriter.WriteElementString("eventid", epgEntry.EventID.ToString());

                if (epgEntry.EventCategory != null)
                {
                    try
                    {
                        xmlWriter.WriteElementString("content", Int32.Parse(epgEntry.EventCategory.Trim()).ToString());
                    }
                    catch (FormatException)
                    {
                        xmlWriter.WriteElementString("content", "48");
                    }
                    catch (ArithmeticException)
                    {
                        xmlWriter.WriteElementString("content", "48");
                    }
                }
                else
                {
                    xmlWriter.WriteElementString("content", "48");
                }

                xmlWriter.WriteElementString("charset", "255");

                xmlWriter.WriteStartElement("titles");
                xmlWriter.WriteStartElement("title");
                if (epgEntry.EventName != null)
                {
                    xmlWriter.WriteValue(epgEntry.EventName);
                }
                else
                {
                    xmlWriter.WriteValue("No Title");
                }
                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("events");
                xmlWriter.WriteStartElement("event");

                if (epgEntry.ShortDescription != null)
                {
                    xmlWriter.WriteValue(epgEntry.ShortDescription);
                }
                else
                {
                    if (epgEntry.EventName != null)
                    {
                        xmlWriter.WriteValue(epgEntry.EventName);
                    }
                    else
                    {
                        xmlWriter.WriteValue("No Description");
                    }
                }

                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();

                xmlWriter.WriteEndElement();

                epgCount++;
            }
        }
Exemplo n.º 31
0
        /// <summary>
        /// Compare this instance with another for sorting purposes.
        /// </summary>
        /// <param name="station">The other instance.</param>
        /// <param name="keyName">The name of the key to compare on.</param>
        /// <returns>Zero if the instances are equal, Greater than 0 if this instance is greater; less than zero otherwise.</returns>
        public int CompareForSorting(TVStation station, string keyName)
        {
            if (station == null)
            {
                throw (new ArgumentException("The station cannot be null", "station"));
            }
            if (keyName == null)
            {
                throw (new ArgumentException("The key name cannot be null", "keyName"));
            }

            switch (keyName)
            {
            case "Name":
                if (name == station.Name)
                {
                    if (originalNetworkID == station.originalNetworkID)
                    {
                        if (transportStreamID == station.TransportStreamID)
                        {
                            return(serviceID.CompareTo(station.ServiceID));
                        }
                        else
                        {
                            return(transportStreamID.CompareTo(station.TransportStreamID));
                        }
                    }
                    else
                    {
                        return(originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                }
                else
                {
                    return(name.CompareTo(station.Name));
                }

            case "ONID":
                if (originalNetworkID == station.originalNetworkID)
                {
                    if (transportStreamID == station.TransportStreamID)
                    {
                        if (serviceID == station.ServiceID)
                        {
                            return(name.CompareTo(station.Name));
                        }
                        else
                        {
                            return(serviceID.CompareTo(station.ServiceID));
                        }
                    }
                    else
                    {
                        return(transportStreamID.CompareTo(station.TransportStreamID));
                    }
                }
                else
                {
                    return(originalNetworkID.CompareTo(station.OriginalNetworkID));
                }

            case "TSID":
                if (transportStreamID == station.TransportStreamID)
                {
                    if (originalNetworkID == station.OriginalNetworkID)
                    {
                        if (serviceID == station.ServiceID)
                        {
                            return(name.CompareTo(station.Name));
                        }
                        else
                        {
                            return(serviceID.CompareTo(station.ServiceID));
                        }
                    }
                    else
                    {
                        return(originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                }
                else
                {
                    return(transportStreamID.CompareTo(station.TransportStreamID));
                }

            case "SID":
                if (serviceID == station.ServiceID)
                {
                    if (originalNetworkID == station.OriginalNetworkID)
                    {
                        if (transportStreamID == station.TransportStreamID)
                        {
                            return(name.CompareTo(station.Name));
                        }
                        else
                        {
                            return(transportStreamID.CompareTo(station.ServiceID));
                        }
                    }
                    else
                    {
                        return(originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                }
                else
                {
                    return(serviceID.CompareTo(station.ServiceID));
                }

            case "Excluded":
                if (excluded == station.Excluded)
                {
                    if (originalNetworkID == station.originalNetworkID)
                    {
                        if (transportStreamID == station.TransportStreamID)
                        {
                            if (serviceID == station.ServiceID)
                            {
                                return(name.CompareTo(station.Name));
                            }
                            else
                            {
                                return(serviceID.CompareTo(station.ServiceID));
                            }
                        }
                        else
                        {
                            return(transportStreamID.CompareTo(station.TransportStreamID));
                        }
                    }
                    else
                    {
                        return(originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                }
                else
                {
                    return(excluded.CompareTo(station.Excluded));
                }

            case "NewName":
                string newNameString;
                string otherNewNameString;

                if (newName == null)
                {
                    newNameString = string.Empty;
                }
                else
                {
                    newNameString = newName;
                }

                if (station.NewName == null)
                {
                    otherNewNameString = string.Empty;
                }
                else
                {
                    otherNewNameString = station.NewName;
                }

                if (newNameString == otherNewNameString)
                {
                    if (originalNetworkID == station.originalNetworkID)
                    {
                        if (transportStreamID == station.TransportStreamID)
                        {
                            return(serviceID.CompareTo(station.ServiceID));
                        }
                        else
                        {
                            return(transportStreamID.CompareTo(station.TransportStreamID));
                        }
                    }
                    else
                    {
                        return(originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                }
                else
                {
                    return(newNameString.CompareTo(otherNewNameString));
                }

            case "ChannelNumber":
                if (logicalChannelNumber == station.LogicalChannelNumber)
                {
                    if (originalNetworkID == station.originalNetworkID)
                    {
                        if (transportStreamID == station.TransportStreamID)
                        {
                            if (serviceID == station.ServiceID)
                            {
                                return(name.CompareTo(station.Name));
                            }
                            else
                            {
                                return(serviceID.CompareTo(station.ServiceID));
                            }
                        }
                        else
                        {
                            return(transportStreamID.CompareTo(station.TransportStreamID));
                        }
                    }
                    else
                    {
                        return(originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                }
                else
                {
                    return(logicalChannelNumber.CompareTo(station.LogicalChannelNumber));
                }

            default:
                return(0);
            }
        }
Exemplo n.º 32
0
        private TuningSpec findTuningSpec(Collection<TuningSpec> tuningCollection, TVStation tvStation)
        {
            foreach (TuningSpec tuningSpec in tuningCollection)
            {
                if (tuningSpec.Satellite == tvStation.Satellite &&
                    tuningSpec.OriginalNetworkID == tvStation.OriginalNetworkID &&
                    tuningSpec.TransportStreamID == tvStation.TransportStreamID &&
                    tuningSpec.Frequency == tvStation.Frequency &&
                    tuningSpec.SymbolRate == tvStation.SymbolRate)
                    return (tuningSpec);
            }

            return (null);
        }
Exemplo n.º 33
0
        private static void processStationHeader(XmlWriter xmlWriter, TVStation tvStation)
        {
            xmlWriter.WriteStartElement("channel");

            if (tvStation.ChannelID == null)
            {
                if (!RunParameters.Instance.Options.Contains("USECHANNELID"))
                {
                    xmlWriter.WriteAttributeString("id", tvStation.ServiceID.ToString());
                }
                else
                {
                    if (tvStation.LogicalChannelNumber != -1)
                    {
                        xmlWriter.WriteAttributeString("id", tvStation.LogicalChannelNumber.ToString());
                    }
                    else
                    {
                        xmlWriter.WriteAttributeString("id", tvStation.ServiceID.ToString());
                    }
                }
            }
            else
            {
                xmlWriter.WriteAttributeString("id", tvStation.ChannelID);
            }


            if (tvStation.NewName == null)
            {
                xmlWriter.WriteElementString("display-name", tvStation.Name);
            }
            else
            {
                xmlWriter.WriteElementString("display-name", tvStation.NewName);
            }

            if (RunParameters.Instance.Options.Contains("USELCN"))
            {
                if (tvStation.ChannelID != null)
                {
                    xmlWriter.WriteElementString("lcn", tvStation.ChannelID);
                }
                else
                {
                    if (tvStation.LogicalChannelNumber != -1)
                    {
                        xmlWriter.WriteElementString("lcn", tvStation.LogicalChannelNumber.ToString());
                    }
                }
            }

            if (RunParameters.Instance.Options.Contains("USEIMAGE"))
            {
                if (File.Exists(RunParameters.DataDirectory + "\\Images\\" + tvStation.ServiceID + ".png"))
                {
                    xmlWriter.WriteStartElement("icon");
                    xmlWriter.WriteAttributeString("src", "file://" + RunParameters.DataDirectory + "\\Images\\" + tvStation.ServiceID + ".png");
                    xmlWriter.WriteEndElement();
                }
            }

            xmlWriter.WriteEndElement();
        }
Exemplo n.º 34
0
        private Collection<TVStation> findAtscStations()
        {
            Logger.Instance.Write("Collecting ATSC Channel data", false, true);

            Collection<TVStation> tvStations = new Collection<TVStation>();

            VirtualChannelTable.Clear();

            dataProvider.ChangePidMapping(new int[] { 0x1ffb });

            Collection<byte> tables = new Collection<byte>();
            tables.Add(0xc8);
            tables.Add(0xc9);
            TSStreamReader guideReader = new TSStreamReader(tables, 50000, dataProvider.BufferAddress);
            guideReader.Run();

            int repeats = 0;
            bool done = false;

            while (!done)
            {
                if (worker.CancellationPending)
                    return (tvStations);

                Thread.Sleep(2000);
                Logger.Instance.Write(".", false, false);

                Collection<Mpeg2Section> sections = new Collection<Mpeg2Section>();

                guideReader.Lock("LoadMessages");
                if (guideReader.Sections.Count != 0)
                {
                    foreach (Mpeg2Section section in guideReader.Sections)
                        sections.Add(section);
                    guideReader.Sections.Clear();
                }
                guideReader.Release("LoadMessages");

                if (sections.Count != 0)
                    processVirtualChannelTable(sections, dataProvider.Frequency.Frequency);

                done = VirtualChannelTable.Complete;
                if (!done)
                {
                    repeats++;
                    done = (repeats == RunParameters.Instance.Repeats);
                }
            }

            Logger.Instance.Write("", true, false);
            Logger.Instance.Write("Stopping reader");
            guideReader.Stop();

            foreach (VirtualChannel channel in VirtualChannelTable.Channels)
            {
                TVStation station = new TVStation(channel.ShortName);
                station.StationType = TVStationType.Atsc;
                station.OriginalNetworkID = channel.CollectionFrequency;
                station.TransportStreamID = channel.MajorChannelNumber;
                station.ServiceID = channel.MinorChannelNumber;
                tvStations.Add(station);
            }

            return (tvStations);
        }
Exemplo n.º 35
0
        /// <summary>
        /// Compare this instance with another for sorting purposes.
        /// </summary>
        /// <param name="station">The other instance.</param>
        /// <param name="keyName">The name of the key to compare on.</param>
        /// <returns>Zero if the instances are equal, Greater than 0 if this instance is greater; less than zero otherwise.</returns>
        public int CompareForSorting(TVStation station, string keyName)
        {
            if (station == null)
                throw (new ArgumentException("The station cannot be null", "station"));
            if (keyName == null)
                throw (new ArgumentException("The key name cannot be null", "keyName"));

            switch (keyName)
            {
                case "Name":
                    if (name == station.Name)
                    {
                        if (originalNetworkID == station.originalNetworkID)
                        {
                            if (transportStreamID == station.TransportStreamID)
                                return (serviceID.CompareTo(station.ServiceID));
                            else
                                return (transportStreamID.CompareTo(station.TransportStreamID));
                        }
                        else
                            return (originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                    else
                        return (name.CompareTo(station.Name));
                case "ONID":
                    if (originalNetworkID == station.originalNetworkID)
                    {
                        if (transportStreamID == station.TransportStreamID)
                        {
                            if (serviceID == station.ServiceID)
                                return(name.CompareTo(station.Name));
                            else
                                return (serviceID.CompareTo(station.ServiceID));
                        }
                        else
                            return (transportStreamID.CompareTo(station.TransportStreamID));
                    }
                    else
                        return (originalNetworkID.CompareTo(station.OriginalNetworkID));
                case "TSID":
                    if (transportStreamID == station.TransportStreamID)
                    {
                        if (originalNetworkID == station.OriginalNetworkID)
                        {
                            if (serviceID == station.ServiceID)
                                return (name.CompareTo(station.Name));
                            else
                                return (serviceID.CompareTo(station.ServiceID));
                        }
                        else
                            return (originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                    else
                        return (transportStreamID.CompareTo(station.TransportStreamID));
                case "SID":
                    if (serviceID == station.ServiceID)
                    {
                        if (originalNetworkID == station.OriginalNetworkID)
                        {
                            if (transportStreamID == station.TransportStreamID)
                                return (name.CompareTo(station.Name));
                            else
                                return (transportStreamID.CompareTo(station.ServiceID));
                        }
                        else
                            return (originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                    else
                        return (serviceID.CompareTo(station.ServiceID));
                case "Excluded":
                    if (excluded == station.Excluded)
                    {
                        if (originalNetworkID == station.originalNetworkID)
                        {
                            if (transportStreamID == station.TransportStreamID)
                            {
                                if (serviceID == station.ServiceID)
                                    return (name.CompareTo(station.Name));
                                else
                                    return (serviceID.CompareTo(station.ServiceID));
                            }
                            else
                                return (transportStreamID.CompareTo(station.TransportStreamID));
                        }
                        else
                            return (originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                    else
                        return (excluded.CompareTo(station.Excluded));
                case "NewName":
                    string newNameString;
                    string otherNewNameString;

                    if (newName == null)
                        newNameString = string.Empty;
                    else
                        newNameString = newName;

                    if (station.NewName == null)
                        otherNewNameString = string.Empty;
                    else
                        otherNewNameString = station.NewName;

                    if (newNameString == otherNewNameString)
                    {
                        if (originalNetworkID == station.originalNetworkID)
                        {
                            if (transportStreamID == station.TransportStreamID)
                                return (serviceID.CompareTo(station.ServiceID));
                            else
                                return (transportStreamID.CompareTo(station.TransportStreamID));
                        }
                        else
                            return (originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                    else
                        return (newNameString.CompareTo(otherNewNameString));
                case "ChannelNumber":
                    if (logicalChannelNumber == station.LogicalChannelNumber)
                    {
                        if (originalNetworkID == station.originalNetworkID)
                        {
                            if (transportStreamID == station.TransportStreamID)
                            {
                                if (serviceID == station.ServiceID)
                                    return (name.CompareTo(station.Name));
                                else
                                    return (serviceID.CompareTo(station.ServiceID));
                            }
                            else
                                return (transportStreamID.CompareTo(station.TransportStreamID));
                        }
                        else
                            return (originalNetworkID.CompareTo(station.OriginalNetworkID));
                    }
                    else
                        return (logicalChannelNumber.CompareTo(station.LogicalChannelNumber));
                default:
                    return (0);
            }
        }
Exemplo n.º 36
0
        private void addChannelInNameOrder(Collection<Channel> sortedChannels, Channel newChannel)
        {
            TVStation newStation = TVStation.FindStation(newChannel.OriginalNetworkID, newChannel.TransportStreamID, newChannel.ServiceID);
            if (newStation == null)
                newStation = new TVStation("No Name");

            foreach (Channel oldChannel in sortedChannels)
            {
                TVStation oldStation = TVStation.FindStation(oldChannel.OriginalNetworkID, oldChannel.TransportStreamID, oldChannel.ServiceID);
                if (oldStation == null)
                    oldStation = new TVStation("No Name");

                if (oldStation.Name.CompareTo(newStation.Name) > 0)
                {
                    sortedChannels.Insert(sortedChannels.IndexOf(oldChannel), newChannel);
                    return;
                }
            }

            sortedChannels.Add(newChannel);
        }
Exemplo n.º 37
0
 /// <summary>
 /// Initialize a new instance of the TimeOffsetChannel.
 /// </summary>
 /// <param name="sourceChannel">The source channel.</param>
 /// <param name="destinationChannel">The destination channel.</param>
 /// <param name="offset">The time offset in hours.</param>
 public TimeOffsetChannel(TVStation sourceChannel, TVStation destinationChannel, int offset)
 {
     this.sourceChannel      = sourceChannel;
     this.destinationChannel = destinationChannel;
     this.offset             = offset;
 }
Exemplo n.º 38
0
        private int processScannedChannel(string parts)
        {
            string[] parameters = parts.Split(new char[] { ',' });
            if (parameters.Length != 5)
            {
                Logger.Instance.Write("INI file format error: A Scanned line is wrong.");
                return (errorCodeFormatError);
            }

            try
            {
                int originalNetworkID = Int32.Parse(parameters[0].Trim());
                int transportStreamID = Int32.Parse(parameters[1].Trim());
                int serviceID = Int32.Parse(parameters[2].Trim());

                TVStation station = TVStation.FindStation(originalNetworkID, transportStreamID, serviceID);
                if (station != null)
                    station.Name = parameters[4].Trim().Replace("%%", ",");
                else
                {
                    TVStation newStation = new TVStation(parameters[4].Trim().Replace("%%", ","));
                    newStation.OriginalNetworkID = originalNetworkID;
                    newStation.TransportStreamID = transportStreamID;
                    newStation.ServiceID = serviceID;
                    TVStation.AddStation(newStation);
                }
            }
            catch (FormatException)
            {
                Logger.Instance.Write("INI file format error: A Scanned line is wrong.");
                return (errorCodeFormatError);
            }
            catch (ArithmeticException)
            {
                Logger.Instance.Write("INI file format error: A Scanned line is wrong.");
                return (errorCodeFormatError);
            }

            return (errorCodeNoError);
        }
Exemplo n.º 39
0
        /// <summary>
        /// Return a copy of this instance.
        /// </summary>
        /// <returns>A new instance with the same properties as this instance.</returns>
        public TVStation Clone()
        {
            TVStation newStation = new TVStation(name);

            newStation.Frequency = frequency;
            newStation.OriginalNetworkID = originalNetworkID;
            newStation.TransportStreamID = transportStreamID;
            newStation.ServiceID = serviceID;
            newStation.AudioPID = audioPID;
            newStation.VideoPID = videoPID;
            newStation.DSMCCPID = dsmccPID;
            newStation.Encrypted = encrypted;
            newStation.ServiceType = serviceType;
            newStation.NextFollowingAvailable = nextFollowingAvailable;
            newStation.ScheduleAvailable = scheduleAvailable;
            newStation.CollectionType = collectionType;
            newStation.ProviderName = providerName;
            newStation.Excluded = Excluded;
            newStation.NewName = newName;
            newStation.LogicalChannelNumber = logicalChannelNumber;
            newStation.MinorChannelNumber = minorChannelNumber;

            return (newStation);
        }
Exemplo n.º 40
0
        private static void processStationEPG(XmlWriter xmlWriter, TVStation tvStation)
        {
            foreach (EPGEntry epgEntry in tvStation.EPGCollection)
            {
                xmlWriter.WriteStartElement("programme");

                xmlWriter.WriteAttributeString("start", epgEntry.StartTime.ToString("yyyyMMddHHmmss").Replace(":", ""));
                xmlWriter.WriteAttributeString("stop", (epgEntry.StartTime + epgEntry.Duration).ToString("yyyyMMddHHmmss").Replace(":", ""));
                xmlWriter.WriteAttributeString("channel", ((tvStation.TransportStreamID << 16) + tvStation.ServiceID).ToString());

                xmlWriter.WriteElementString("eventid", epgEntry.EventID.ToString());

                if (epgEntry.EventCategory != null)
                {
                    try
                    {
                        xmlWriter.WriteElementString("content", Int32.Parse(epgEntry.EventCategory.Trim()).ToString());
                    }
                    catch (FormatException)
                    {
                        xmlWriter.WriteElementString("content", "48");
                    }
                    catch (ArithmeticException)
                    {
                        xmlWriter.WriteElementString("content", "48");
                    }
                }
                else
                    xmlWriter.WriteElementString("content", "48");

                xmlWriter.WriteElementString("charset", "255");

                xmlWriter.WriteStartElement("titles");
                xmlWriter.WriteStartElement("title");
                if (epgEntry.EventName != null)
                    xmlWriter.WriteValue(epgEntry.EventName);
                else
                    xmlWriter.WriteValue("No Title");
                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("events");
                xmlWriter.WriteStartElement("event");

                if (epgEntry.ShortDescription != null)
                    xmlWriter.WriteValue(epgEntry.ShortDescription);
                else
                {
                    if (epgEntry.EventName != null)
                        xmlWriter.WriteValue(epgEntry.EventName);
                    else
                        xmlWriter.WriteValue("No Description");
                }

                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();

                xmlWriter.WriteEndElement();

                epgCount++;
            }
        }
Exemplo n.º 41
0
        private void setWMCStationInfo(TVStation station, WMCChannel channel, string matchMethod)
        {
            if (RunParameters.Instance.Options.Contains("AUTOMAPEPG"))
            {
                station.WMCUniqueID = channel.Uid;
                station.WMCMatchName = channel.MatchName;
            }

            string uniqueID;
            string matchName;

            if (station.WMCUniqueID != null)
                uniqueID = station.WMCUniqueID;
            else
                uniqueID = "undefined";

            if (station.WMCMatchName != null)
                matchName = station.WMCMatchName;
            else
                matchName = "undefined";

            Logger.Instance.Write("Station " + station.Name + " (" + station.FullID + ") unique ID " + uniqueID + " match name " + matchName + " set using " + matchMethod);
        }
Exemplo n.º 42
0
        private void processStation(TVStation station, Collection<TVStation> manualMatchList)
        {
            foreach (WMCChannel channel in WMCChannel.Channels)
            {
                foreach (WMCTuningInfo tuningInfo in channel.TuningInfos)
                {
                    WMCDVBTuningInfo dvbTuningInfo = tuningInfo as WMCDVBTuningInfo;
                    if (dvbTuningInfo != null)
                    {
                        if (station.OriginalNetworkID == dvbTuningInfo.ONID &&
                            station.TransportStreamID == dvbTuningInfo.TSID &&
                            station.ServiceID == dvbTuningInfo.SID)
                        {
                            setWMCStationInfo(station, channel, "tuning info");

                            if (manualMatchList.Contains(station))
                                manualMatchList.Remove(station);

                            return;
                        }
                    }
                    else
                    {
                        WMCATSCTuningInfo atscTuningInfo = tuningInfo as WMCATSCTuningInfo;
                        if (atscTuningInfo != null)
                        {
                            if (station.OriginalNetworkID == atscTuningInfo.Frequency &&
                                station.TransportStreamID == atscTuningInfo.MajorChannel &&
                                station.ServiceID == atscTuningInfo.MinorChannel)
                            {
                                setWMCStationInfo(station, channel, "tuning info");

                                if (manualMatchList.Contains(station))
                                    manualMatchList.Remove(station);

                                return;
                            }
                        }
                    }
                }
            }

            foreach (WMCChannel channel in WMCChannel.Channels)
            {
                if (station.Name == channel.CallSign)
                {
                    setWMCStationInfo(station, channel, "call sign");

                    if (manualMatchList.Contains(station))
                        manualMatchList.Remove(station);

                    return;
                }
            }

            /*foreach (WMCChannel channel in WMCChannel.Channels)
            {
                MatchSpec matchSpec = new MatchSpec(channel.MatchName);

                if (station.OriginalNetworkID == matchSpec.OriginalNetworkID && station.TransportStreamID == matchSpec.TransportStreamID && station.ServiceID == matchSpec.ServiceID)
                {
                    setWMCStationInfo(station, channel, "match name");

                    if (manualMatchList.Contains(station))
                        manualMatchList.Remove(station);

                    return;
                }
            }*/

            if (!manualMatchList.Contains(station))
                manualMatchList.Add(station);
        }
Exemplo n.º 43
0
        private TVStation processStation(string epgText)
        {
            string[] parts = epgText.Substring(3).Split(new char[] { '(' } );
            string[] stationDefinition = parts[1].Split(new char[] { ')' } );
            string[] stationParts = stationDefinition[0].Split(new char[] { ',' } );

            station = new TVStation(parts[0]);
            station.TransportStreamID = Int32.Parse(stationParts[1].Trim());
            station.ServiceID = Int32.Parse(stationParts[2].Trim());

            string[] dateParts = stationDefinition[1].Split(new char[] { ' ' } );
            string[] dayMonthYear = dateParts[1].Trim().Split(new char[] { '.' } );
            int day = Int32.Parse(dayMonthYear[0]);
            int month = Int32.Parse(dayMonthYear[1]);
            int year = Int32.Parse(dayMonthYear[2]);

            startDate = new DateTime(year, month, day);
            lastStartTime = startDate;

            return(station);
        }
Exemplo n.º 44
0
        private void addStationInSequence(Collection<TVStation> sortedStations, TVStation newStation)
        {
            foreach (TVStation currentStation in sortedStations)
            {
                int sequence = currentStation.Name.CompareTo(newStation.Name);

                if (sequence > 0)
                {
                    sortedStations.Insert(sortedStations.IndexOf(currentStation), newStation);
                    return;
                }
                else
                {
                    if (sequence == 0)
                    {
                        if (currentStation.EPGCollection.Count == 0)
                        {
                            sortedStations.Insert(sortedStations.IndexOf(currentStation), newStation);
                            return;
                        }
                    }
                }
            }

            sortedStations.Add(newStation);
        }
Exemplo n.º 45
0
        private static void checkMidnightBreak(TVStation tvStation, EPGEntry currentEntry, int index)
        {
            if (index == tvStation.EPGCollection.Count - 1)
                return;

            EPGEntry nextEntry = tvStation.EPGCollection[index + 1];

            if (currentEntry.EventName != nextEntry.EventName)
                return;

            bool combined = false;
            if (RunParameters.Instance.CountryCode == null)
                combined = checkNZLTimes(currentEntry, nextEntry);
            else
            {
                switch (RunParameters.Instance.CountryCode)
                {
                    case "NZL":
                        combined = checkNZLTimes(currentEntry, nextEntry);
                        break;
                    case "AUS":
                        combined = checkAUSTimes(currentEntry, nextEntry);
                        break;
                    default:
                        break;
                }
            }

            if (combined)
                tvStation.EPGCollection.RemoveAt(index + 1);
        }
Exemplo n.º 46
0
        private bool checkChannelFilters(TVStation station)
        {
            if (RunParameters.Instance.MaxService != -1 && station.ServiceID > RunParameters.Instance.MaxService)
                return (false);

            if (ChannelFilterEntry.ChannelFilters == null)
                return (true);

            ChannelFilterEntry filterEntry = ChannelFilterEntry.FindEntry(station.OriginalNetworkID, station.TransportStreamID, station.ServiceID);
            if (filterEntry != null)
                return (true);

            filterEntry = ChannelFilterEntry.FindEntry(station.OriginalNetworkID, station.TransportStreamID);
            if (filterEntry != null)
                return (true);

            filterEntry = ChannelFilterEntry.FindEntry(station.OriginalNetworkID);
            if (filterEntry != null)
                return (true);

            return (false);
        }
Exemplo n.º 47
0
        private static void processStationEPG(XmlWriter xmlWriter, TVStation tvStation)
        {
            xmlWriter.WriteStartElement("dvblink_epg");

            for (int index = 0; index < tvStation.EPGCollection.Count; index++)
            {
                EPGEntry epgEntry = tvStation.EPGCollection[index];

                if (TuningFrequency.HasMHEG5Frequency)
                    checkMidnightBreak(tvStation, epgEntry, index);

                processEPGEntry(xmlWriter, epgEntry);
            }

            xmlWriter.WriteEndElement();
        }
Exemplo n.º 48
0
        /// <summary>
        /// Create the EPG entries.
        /// </summary>
        public override void FinishFrequency()
        {
            if (RunParameters.Instance.DebugIDs.Contains("LOGPSIPEXTENDEDTEXT"))
                ExtendedTextTable.LogEntries();

            AtscPsipProgramCategory.LogCategoryUsage();

            if (VirtualChannelTable.Channels.Count == 0)
                return;

            Logger titleLogger = null;
            Logger descriptionLogger = null;

            if (RunParameters.Instance.DebugIDs.Contains("LOGTITLES"))
                titleLogger = new Logger("EPG Titles.log");
            if (RunParameters.Instance.DebugIDs.Contains("LOGDESCRIPTIONS"))
                descriptionLogger = new Logger("EPG Descriptions.log");

            foreach (VirtualChannel channel in VirtualChannelTable.Channels)
            {
                TVStation station = TVStation.FindStation(channel.CollectionFrequency, channel.MajorChannelNumber, channel.MinorChannelNumber);
                if (station == null)
                {
                    station = new TVStation(channel.ShortName);
                    station.OriginalNetworkID = channel.CollectionFrequency;
                    station.TransportStreamID = channel.MajorChannelNumber;
                    station.ServiceID = channel.MinorChannelNumber;
                    station.ChannelID = channel.MajorChannelNumber + ":" + channel.MinorChannelNumber + ":" + channel.ShortName;
                    TVStation.AddStation(station);
                }

                station.Name = channel.ShortName;

                if (station.LogicalChannelNumber == -1)
                    station.LogicalChannelNumber = (channel.MajorChannelNumber * 100) + channel.MinorChannelNumber;

                station.MinorChannelNumber = channel.MinorChannelNumber;

                if (station.EPGCollection.Count == 0)
                {
                    foreach (EPGEntry epgEntry in channel.EPGCollection)
                    {
                        station.EPGCollection.Add(epgEntry);

                        if (titleLogger != null)
                            titleLogger.Write(epgEntry.ServiceID + " " +
                                epgEntry.StartTime.ToShortDateString() + " " +
                                epgEntry.StartTime.ToString("HH:mm") + " - " +
                                epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                                epgEntry.EventName);

                        if (descriptionLogger != null && epgEntry.ShortDescription != null)
                            descriptionLogger.Write(epgEntry.ServiceID + " " +
                                " Evt ID " + epgEntry.EventID +
                                epgEntry.StartTime.ToShortDateString() + " " +
                                epgEntry.StartTime.ToString("HH:mm") + " - " +
                                epgEntry.StartTime.Add(epgEntry.Duration).ToString("HH:mm") + " " +
                                epgEntry.ShortDescription);
                    }
                }
            }
        }
Exemplo n.º 49
0
        private static void processStationHeader(XmlWriter xmlWriter, TVStation tvStation)
        {
            xmlWriter.WriteAttributeString("Name", tvStation.Name.Trim());

            xmlWriter.WriteAttributeString("ID", tvStation.OriginalNetworkID.ToString() + ":" +
                tvStation.TransportStreamID.ToString() + ":" +
                tvStation.ServiceID.ToString());
            xmlWriter.WriteAttributeString("NID", tvStation.OriginalNetworkID.ToString());
            xmlWriter.WriteAttributeString("TID", tvStation.TransportStreamID.ToString());
            xmlWriter.WriteAttributeString("SID", tvStation.ServiceID.ToString());
            xmlWriter.WriteAttributeString("Count", tvStation.EPGCollection.Count.ToString());
            xmlWriter.WriteAttributeString("FirstStart", getStartTime(tvStation.EPGCollection[0]));
            xmlWriter.WriteAttributeString("LastStart", getStartTime(tvStation.EPGCollection[tvStation.EPGCollection.Count - 1]));
        }
Exemplo n.º 50
0
        /// <summary>
        /// Parse the section.
        /// </summary>
        /// <param name="byteData">The MPEG2 section containing the section.</param>
        /// <param name="mpeg2Header">The MPEG2 header that preceedes the section.</param>
        public void Process(byte[] byteData, Mpeg2ExtendedHeader mpeg2Header)
        {
            lastIndex = mpeg2Header.Index;
            serviceID = mpeg2Header.TableIDExtension;

            try
            {
                transportStreamID = Utils.Convert2BytesToInt(byteData, lastIndex);
                lastIndex += 2;

                originalNetworkID = Utils.Convert2BytesToInt(byteData, lastIndex);
                lastIndex += 2;

                segmentLastSectionNumber = (int)byteData[lastIndex];
                lastIndex++;

                lastTableID = (int)byteData[lastIndex];
                lastIndex++;
            }
            catch (IndexOutOfRangeException)
            {
                throw (new ArgumentOutOfRangeException("The Bell TV section is short"));
            }

            TVStation tvStation = TVStation.FindStation(originalNetworkID, transportStreamID, serviceID);
            if (tvStation == null)
            {
                if (!RunParameters.Instance.DebugIDs.Contains("CREATESTATIONS"))
                    return;
                else
                {
                    tvStation = new TVStation("Auto Generated Station: " + originalNetworkID + ":" + transportStreamID + ":" + serviceID);
                    tvStation.OriginalNetworkID = originalNetworkID;
                    tvStation.TransportStreamID = transportStreamID;
                    tvStation.ServiceID = serviceID;

                    TVStation.StationCollection.Add(tvStation);
                }
            }

            bool newSection = tvStation.AddMapEntry(mpeg2Header.TableID, mpeg2Header.SectionNumber, lastTableID, mpeg2Header.LastSectionNumber, segmentLastSectionNumber);
            if (!newSection)
                return;

            while (lastIndex < byteData.Length - 4)
            {
                BellTVEntry bellTVEntry = new BellTVEntry();
                bellTVEntry.Process(byteData, lastIndex, mpeg2Header.TableID);

                EPGEntry epgEntry = new EPGEntry();
                epgEntry.OriginalNetworkID = tvStation.OriginalNetworkID;
                epgEntry.TransportStreamID = tvStation.TransportStreamID;
                epgEntry.ServiceID = tvStation.ServiceID;
                epgEntry.EPGSource = EPGSource.BellTV;

                if (bellTVEntry.HighDefinition)
                    epgEntry.VideoQuality = "HDTV";
                if (bellTVEntry.ClosedCaptions)
                    epgEntry.SubTitles = "teletext";
                if (bellTVEntry.Stereo)
                    epgEntry.AudioQuality = "stereo";

                epgEntry.Duration = Utils.RoundTime(bellTVEntry.Duration);
                epgEntry.EventID = bellTVEntry.EventID;
                epgEntry.EventName = bellTVEntry.EventName;

                getParentalRating(epgEntry, bellTVEntry);

                epgEntry.RunningStatus = bellTVEntry.RunningStatus;
                epgEntry.Scrambled = bellTVEntry.Scrambled;
                epgEntry.ShortDescription = bellTVEntry.ShortDescription;
                if (bellTVEntry.SubTitle != bellTVEntry.EventName)
                    epgEntry.EventSubTitle = bellTVEntry.SubTitle;
                epgEntry.StartTime = Utils.RoundTime(TimeOffsetEntry.GetOffsetTime(bellTVEntry.StartTime));

                epgEntry.EventCategory = getEventCategory(epgEntry.EventName, epgEntry.ShortDescription, bellTVEntry.ContentType, bellTVEntry.ContentSubType);

                epgEntry.StarRating = getStarRating(bellTVEntry);
                epgEntry.Date = bellTVEntry.Date;
                epgEntry.Cast = bellTVEntry.Cast;

                getSeriesEpisode(epgEntry, bellTVEntry.Series, bellTVEntry.Episode);

                epgEntry.HasGraphicLanguage = bellTVEntry.HasStrongLanguage;
                epgEntry.HasStrongSexualContent = bellTVEntry.HasSexualContent;
                epgEntry.HasGraphicViolence = bellTVEntry.HasViolence;
                epgEntry.HasNudity = bellTVEntry.HasNudity;

                epgEntry.PreviousPlayDate = bellTVEntry.OriginalAirDate;

                tvStation.AddEPGEntry(epgEntry);

                if (titleLogger != null)
                    logTitle(bellTVEntry.EventName, epgEntry, titleLogger);
                if (descriptionLogger != null)
                {
                    if (!RunParameters.Instance.DebugIDs.Contains("LOGORIGINAL"))
                        logDescription(bellTVEntry.ShortDescription, epgEntry, descriptionLogger);
                    else
                        logDescription(bellTVEntry.OriginalDescription, epgEntry, descriptionLogger);
                }

                lastIndex = bellTVEntry.Index;
            }
        }
Exemplo n.º 51
0
        /// <summary>
        /// Parse the section.
        /// </summary>
        /// <param name="byteData">The MPEG2 section containing the section.</param>
        /// <param name="mpeg2Header">The MPEG2 header that preceedes the section.</param>
        public void Process(byte[] byteData, Mpeg2ExtendedHeader mpeg2Header)
        {
            lastIndex = mpeg2Header.Index;
            serviceID = mpeg2Header.TableIDExtension;

            transportStreamID = Utils.Convert2BytesToInt(byteData, lastIndex);
            lastIndex += 2;

            originalNetworkID = Utils.Convert2BytesToInt(byteData, lastIndex);
            lastIndex += 2;

            segmentLastSectionNumber = (int)byteData[lastIndex];
            lastIndex++;

            lastTableID = (int)byteData[lastIndex];
            lastIndex++;

            TVStation tvStation = TVStation.FindStation(originalNetworkID, transportStreamID, serviceID);
            if (tvStation == null)
            {
                if (!RunParameters.Instance.DebugIDs.Contains("CREATESTATIONS"))
                    return;
                else
                {
                    tvStation = new TVStation("Auto Generated Station: " + originalNetworkID + ":" + transportStreamID + ":" + serviceID);
                    tvStation.OriginalNetworkID = originalNetworkID;
                    tvStation.TransportStreamID = transportStreamID;
                    tvStation.ServiceID = serviceID;

                    TVStation.StationCollection.Add(tvStation);
                }
            }

            bool newSection = tvStation.AddMapEntry(mpeg2Header.TableID, mpeg2Header.SectionNumber, lastTableID, mpeg2Header.LastSectionNumber, segmentLastSectionNumber);
            if (!newSection)
                return;

            while (lastIndex < byteData.Length - 4)
            {
                EITEntry eitEntry = new EITEntry();
                eitEntry.Process(byteData, lastIndex);

                if (eitEntry.StartTime != DateTime.MinValue)
                {
                    EPGEntry epgEntry = new EPGEntry();
                    epgEntry.OriginalNetworkID = tvStation.OriginalNetworkID;
                    epgEntry.TransportStreamID = tvStation.TransportStreamID;
                    epgEntry.ServiceID = tvStation.ServiceID;
                    epgEntry.EPGSource = EPGSource.EIT;

                    switch (eitEntry.ComponentTypeAudio)
                    {
                        case 3:
                            epgEntry.AudioQuality = "stereo";
                            break;
                        case 5:
                            epgEntry.AudioQuality = "dolby digital";
                            break;
                        default:
                            break;
                    }

                    if (eitEntry.ComponentTypeVideo > 9)
                        epgEntry.VideoQuality = "HDTV";

                    if (!RunParameters.Instance.Options.Contains("USEDESCASCATEGORY"))
                        epgEntry.EventCategory = getEventCategory(eitEntry.EventName, eitEntry.Description, eitEntry.ContentType, eitEntry.ContentSubType);
                    else
                        epgEntry.EventCategory = eitEntry.ShortDescription;

                    epgEntry.Duration = Utils.RoundTime(eitEntry.Duration);
                    epgEntry.EventID = eitEntry.EventID;
                    epgEntry.EventName = eitEntry.EventName;

                    if (RunParameters.Instance.CountryCode != null)
                    {
                        epgEntry.ParentalRating = ParentalRating.FindRating(RunParameters.Instance.CountryCode, "EIT", (eitEntry.ParentalRating + 3).ToString());
                        epgEntry.MpaaParentalRating = ParentalRating.FindMpaaRating(RunParameters.Instance.CountryCode, "EIT", (eitEntry.ParentalRating + 3).ToString());
                    }
                    else
                    {
                        if (eitEntry.ParentalRating > 11)
                        {
                            epgEntry.ParentalRating = "AO";
                            epgEntry.MpaaParentalRating = "AO";
                        }
                        else
                        {
                            if (eitEntry.ParentalRating > 8)
                            {
                                epgEntry.ParentalRating = "PGR";
                                epgEntry.MpaaParentalRating = "PG";
                            }
                            else
                            {
                                epgEntry.ParentalRating = "G";
                                epgEntry.MpaaParentalRating = "G";
                            }
                        }
                    }

                    epgEntry.RunningStatus = eitEntry.RunningStatus;
                    epgEntry.Scrambled = eitEntry.Scrambled;

                    if (!RunParameters.Instance.Options.Contains("USEDESCASCATEGORY"))
                        epgEntry.ShortDescription = eitEntry.Description;
                    else
                        epgEntry.ShortDescription = eitEntry.ExtendedDescription;

                    epgEntry.StartTime = Utils.RoundTime(TimeOffsetEntry.GetOffsetTime(eitEntry.StartTime));

                    epgEntry.Cast = eitEntry.Cast;
                    epgEntry.Directors = eitEntry.Directors;
                    epgEntry.Date = eitEntry.Year;
                    if (eitEntry.TVRating != null)
                        epgEntry.ParentalRating = eitEntry.TVRating;
                    epgEntry.StarRating = eitEntry.StarRating;

                    if (eitEntry.TVRating != null)
                        epgEntry.ParentalRating = eitEntry.TVRating;

                    setSeriesEpisode(epgEntry, eitEntry);

                    /*if (eitEntry.PreviousPlayDate != null)
                    {
                        try
                        {
                            TimeSpan offset = new TimeSpan(Int32.Parse(eitEntry.PreviousPlayDate) * TimeSpan.TicksPerSecond);
                            epgEntry.PreviousPlayDate = epgEntry.StartTime - offset;
                        }
                        catch (FormatException) { }
                    }*/

                    epgEntry.Country = eitEntry.Country;

                    tvStation.AddEPGEntry(epgEntry);

                    if (titleLogger != null)
                        logTitle(eitEntry.EventName, eitEntry, epgEntry, titleLogger);
                    if (descriptionLogger != null)
                        logTitle(eitEntry.Description, eitEntry, epgEntry, descriptionLogger);

                    if (RunParameters.Instance.DebugIDs.Contains("CATXREF"))
                        updateCategoryEntries(tvStation, eitEntry);
                }

                lastIndex = eitEntry.Index;
            }
        }