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); } }
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); }
/// <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; }
/// <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); }
/// <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); }
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); }
/// <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); }
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])); }
/// <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; }
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(); }
/// <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); }
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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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); } }
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); }
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); }
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); } } }
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); }
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); }
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(); } }
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); } }
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(); }
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); }
/// <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 **"); } } } }
/// <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); }
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()); }
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++; } }
/// <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); } }
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); }
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(); }
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); }
/// <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); } }
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); }
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); }
/// <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); }
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++; } }
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); }
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); }
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); }
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); }
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); }
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); }
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(); }
/// <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); } } } }
/// <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; } }
/// <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; } }