diff --git a/source/ChanSort.Api/Controller/SerializerBase.cs b/source/ChanSort.Api/Controller/SerializerBase.cs index 603ad9e..8950444 100644 --- a/source/ChanSort.Api/Controller/SerializerBase.cs +++ b/source/ChanSort.Api/Controller/SerializerBase.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.IO; using System.IO.Compression; using System.Text; @@ -165,5 +166,32 @@ namespace ChanSort.Api } } #endregion + + #region ParseInt() + protected int ParseInt(string input) + { + if (string.IsNullOrWhiteSpace(input)) + return 0; + if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x') + return int.Parse(input.Substring(2), NumberStyles.HexNumber); + if (int.TryParse(input, out var value)) + return value; + return 0; + } + #endregion + + #region ParseInt() + protected long ParseLong(string input) + { + if (string.IsNullOrWhiteSpace(input)) + return 0; + if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x') + return long.Parse(input.Substring(2), NumberStyles.HexNumber); + if (long.TryParse(input, out var value)) + return value; + return 0; + } + #endregion + } } diff --git a/source/ChanSort.Api/Model/LookupData.cs b/source/ChanSort.Api/Model/LookupData.cs index 4067fd6..db84540 100644 --- a/source/ChanSort.Api/Model/LookupData.cs +++ b/source/ChanSort.Api/Model/LookupData.cs @@ -224,6 +224,12 @@ namespace ChanSort.Api public string GetDvbcChannelName(decimal freqInMhz) { + // in case the parameter is in Hz or kHz, correct it to MHz to avoid overflow errors. 2 GHz is the largest plausible frequency + if (freqInMhz > 2000) + freqInMhz /= 1000; + if (freqInMhz > 2000) + freqInMhz /= 1000; + return dvbcChannels.TryGet((int)(freqInMhz * 1000)) ?? dvbcChannels.TryGet((int)((freqInMhz-1) * 1000)) ?? ""; } } diff --git a/source/ChanSort.Loader.PhilipsXml/Serializer.cs b/source/ChanSort.Loader.PhilipsXml/Serializer.cs index 40fee9e..c5cce80 100644 --- a/source/ChanSort.Loader.PhilipsXml/Serializer.cs +++ b/source/ChanSort.Loader.PhilipsXml/Serializer.cs @@ -225,8 +225,9 @@ namespace ChanSort.Loader.PhilipsXml chan.OriginalNetworkId = ParseInt(data.TryGet("Onid")); chan.TransportStreamId = ParseInt(data.TryGet("Tsid")); chan.ServiceId = ParseInt(data.TryGet("Sid")); - var freq = ParseInt(data.TryGet("Frequency")); - chan.FreqInMhz = freq; + chan.FreqInMhz = ParseInt(data.TryGet("Frequency")); ; + if (chan.FreqInMhz > 100000) + chan.FreqInMhz /= 1000; chan.ServiceType = ParseInt(data.TryGet("ServiceType")); chan.SignalSource |= LookupData.Instance.IsRadioTvOrData(chan.ServiceType); chan.SymbolRate = ParseInt(data.TryGet("SymbolRate")); @@ -255,19 +256,6 @@ namespace ChanSort.Loader.PhilipsXml } #endregion - #region ParseInt() - private int ParseInt(string input) - { - if (string.IsNullOrWhiteSpace(input)) - return 0; - if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x') - return int.Parse(input.Substring(2), NumberStyles.HexNumber); - if (int.TryParse(input, out var value)) - return value; - return 0; - } - #endregion - #region DecodeName() private string DecodeName(string input) { diff --git a/source/ChanSort.Loader.Sony/Serializer.cs b/source/ChanSort.Loader.Sony/Serializer.cs index d7d4626..9f84bbe 100644 --- a/source/ChanSort.Loader.Sony/Serializer.cs +++ b/source/ChanSort.Loader.Sony/Serializer.cs @@ -556,19 +556,6 @@ namespace ChanSort.Loader.Sony } #endregion - #region ParseInt() - private int ParseInt(string input) - { - if (string.IsNullOrWhiteSpace(input)) - return 0; - if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x') - return int.Parse(input.Substring(2), NumberStyles.HexNumber); - if (int.TryParse(input, out var value)) - return value; - return 0; - } - #endregion - #region Save() diff --git a/source/changelog.md b/source/changelog.md index 8dfbb4c..7b24d02 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -4,6 +4,7 @@ ChanSort Change Log 2019-11-11 - LG hospitality TVs using files names like xx[modelname].TLL can now be loaded (They use the naming pattern of binary TLL files, but contain GlobalClone/XML text data) +- fixed: Philips DVBC.XML files with frequency values in Hz instead of MHz caused an overflow exception 2019-11-10 - Sony: added support for independent favorite list ordering for Android channel lists (n)