From 44f2c77c8d582a2444be81b8c0cabae0427dd7a1 Mon Sep 17 00:00:00 2001 From: hbeham Date: Mon, 11 Nov 2019 16:06:11 +0100 Subject: [PATCH] - correctly detecting LG hospitality TV files named "xx....TLL" as GlobalClone/XML text files --- source/ChanSort.Loader.GlobalClone/GcSerializer.cs | 4 +++- source/ChanSort.Loader.GlobalClone/GcSerializerPlugin.cs | 6 +++--- source/ChanSort.Loader.LG/TllFileSerializer.cs | 5 ++++- source/changelog.md | 4 ++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs index 99e2cce..eb15b52 100644 --- a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs +++ b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs @@ -45,6 +45,8 @@ namespace ChanSort.Loader.GlobalClone { this.doc = new XmlDocument(); string textContent = File.ReadAllText(this.FileName, Encoding.UTF8); + if (textContent[0] != '<') + throw new FileLoadException("Invalid GlobalClone/XML file format. Maybe a binary xx*.TLL file?", this.FileName); textContent = ReplaceInvalidXmlCharacters(textContent); var settings = new XmlReaderSettings { CheckCharacters = false }; using (var reader = XmlReader.Create(new StringReader(textContent), settings)) @@ -109,7 +111,7 @@ namespace ChanSort.Loader.GlobalClone // ask whether binary TLL file should be deleted var dir = Path.GetDirectoryName(this.FileName) ?? "."; var binTlls = Directory.GetFiles(dir, "xx" + series + "*.tll"); - if (binTlls.Length > 0) + if (binTlls.Length > 0 && !(binTlls.Length == 1 && Path.GetFileName(binTlls[0]).ToLower() == Path.GetFileName(this.FileName).ToLower())) { var txt = Resources.GcSerializer_ReadModelInfo_ModelWarning; if (MessageBox.Show(txt, "LG GlobalClone", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) diff --git a/source/ChanSort.Loader.GlobalClone/GcSerializerPlugin.cs b/source/ChanSort.Loader.GlobalClone/GcSerializerPlugin.cs index efd749f..f4ddab5 100644 --- a/source/ChanSort.Loader.GlobalClone/GcSerializerPlugin.cs +++ b/source/ChanSort.Loader.GlobalClone/GcSerializerPlugin.cs @@ -5,9 +5,9 @@ namespace ChanSort.Loader.GlobalClone public class GcSerializerPlugin : ISerializerPlugin { public string DllName { get; set; } - public string PluginName { get { return "LG GlobalClone"; } } - public string FileFilter { get { return "*Clone*.tll;xx*.xml"; } } - + public string PluginName => "LG GlobalClone"; + public string FileFilter => "*Clone*.tll;xx*.xml;xx*.tll"; + public SerializerBase CreateSerializer(string inputFile) { return new GcSerializer(inputFile); diff --git a/source/ChanSort.Loader.LG/TllFileSerializer.cs b/source/ChanSort.Loader.LG/TllFileSerializer.cs index 952c325..31b0e8b 100644 --- a/source/ChanSort.Loader.LG/TllFileSerializer.cs +++ b/source/ChanSort.Loader.LG/TllFileSerializer.cs @@ -149,9 +149,12 @@ namespace ChanSort.Loader.LG long fileSize = new FileInfo(this.FileName).Length; if (fileSize > MaxFileSize) - throw new FileLoadException(string.Format(ERR_fileTooBig, fileSize, MaxFileSize)); + throw new FileLoadException(string.Format(ERR_fileTooBig, fileSize, MaxFileSize), this.FileName); this.fileContent = File.ReadAllBytes(this.FileName); + if (this.fileContent[0] == '<') + throw new FileLoadException("Invalid binary TLL file format. Maybe a GlobalClone/XML file?", this.FileName); + int off = 0; this.ReadFileHeader(ref off); diff --git a/source/changelog.md b/source/changelog.md index 9671e51..8dfbb4c 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,6 +1,10 @@ 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) + 2019-11-10 - Sony: added support for independent favorite list ordering for Android channel lists (n) - fixed: failed to save Sony lists which contain channel numbers above 8000