From 0890c0f2c74d21b4f3ae76b1fa3eb82577dcf8fb Mon Sep 17 00:00:00 2001 From: Horst Beham Date: Thu, 8 Jul 2021 22:13:08 +0200 Subject: [PATCH] - fixed application of .txt reference lists (which had no effect at all on philips lists) - improved support for Vidaa 5.1 Hisense format --- source/ChanSort.Api/Controller/Editor.cs | 8 +- .../Controller/TxtRefListSerializer.cs | 4 +- source/ChanSort.Api/Model/DataRoot.cs | 3 +- .../ServicelistDb/DbSchema.cs | 10 +- .../ServicelistDb/ServicelistDbSerializer.cs | 3 + ...est.cs => HisenseServicelistDb2017Test.cs} | 10 +- .../HisenseServicelistDb2021Test.cs | 102 ++++++++++++++++++ .../{servicelist.db => servicelist_2017.db} | Bin .../TestFiles/servicelist_2021.db | Bin 0 -> 44032 bytes .../Test.Loader.Hisense.csproj | 5 +- source/Test.Loader/RoundtripTest.cs | 5 +- source/changelog.md | 5 +- source/makeDistribZip.cmd | 6 +- 13 files changed, 136 insertions(+), 25 deletions(-) rename source/Test.Loader.Hisense/ServicelistDb/{HisenseServicelistDbTest.cs => HisenseServicelistDb2017Test.cs} (89%) create mode 100644 source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDb2021Test.cs rename source/Test.Loader.Hisense/ServicelistDb/TestFiles/{servicelist.db => servicelist_2017.db} (100%) create mode 100644 source/Test.Loader.Hisense/ServicelistDb/TestFiles/servicelist_2021.db diff --git a/source/ChanSort.Api/Controller/Editor.cs b/source/ChanSort.Api/Controller/Editor.cs index 1067d9f..bd40620 100644 --- a/source/ChanSort.Api/Controller/Editor.cs +++ b/source/ChanSort.Api/Controller/Editor.cs @@ -257,7 +257,7 @@ namespace ChanSort.Api if (!(chanFilter?.Invoke(refChannel, true) ?? true)) continue; - var tvChannel = FindChannel(tvList, newPos, refChannel, onidTsidSid); + var tvChannel = FindChannel(tvList, newPos, refChannel, onidTsidSid, overwrite); if (tvChannel != null) { @@ -307,7 +307,7 @@ namespace ChanSort.Api } } - private ChannelInfo FindChannel(ChannelList tvList, int subListIndex, ChannelInfo refChannel, Dictionary> onidTsidSid) + private ChannelInfo FindChannel(ChannelList tvList, int subListIndex, ChannelInfo refChannel, Dictionary> onidTsidSid, bool overwrite) { List candidates; @@ -349,12 +349,12 @@ namespace ChanSort.Api // if the reference list has information about a service type (tv/radio/data), then only consider channels matching it (or lacking service type information) var serviceType = refChannel.SignalSource & SignalSource.MaskTvRadioData; - if (serviceType != 0) + if (serviceType != 0 && serviceType != SignalSource.MaskTvRadioData) { channels = channels.Where(ch => { var m = ch.SignalSource & SignalSource.MaskTvRadioData; - return m == 0 || m == serviceType; + return m == 0 || (m & serviceType) != 0; }).ToList(); } diff --git a/source/ChanSort.Api/Controller/TxtRefListSerializer.cs b/source/ChanSort.Api/Controller/TxtRefListSerializer.cs index b7cd093..cb94965 100644 --- a/source/ChanSort.Api/Controller/TxtRefListSerializer.cs +++ b/source/ChanSort.Api/Controller/TxtRefListSerializer.cs @@ -8,7 +8,7 @@ namespace ChanSort.Api { private static readonly char[] Separators = { ';' }; - private readonly ChannelList allChannels = new ChannelList(0, "All"); + private readonly ChannelList allChannels = new ChannelList(SignalSource.All, "All"); #region ctor() @@ -65,7 +65,7 @@ namespace ChanSort.Api if (!int.TryParse(parts[0], out progNr)) continue; - var channel = new ChannelInfo(allChannels.SignalSource, lineNr, progNr, parts[1]); + var channel = new ChannelInfo(SignalSource.All, lineNr, progNr, parts[1]); if (parts.Length >= 3) { var subParts = parts[2].Split('-'); diff --git a/source/ChanSort.Api/Model/DataRoot.cs b/source/ChanSort.Api/Model/DataRoot.cs index 15cace8..380a0a3 100644 --- a/source/ChanSort.Api/Model/DataRoot.cs +++ b/source/ChanSort.Api/Model/DataRoot.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text; diff --git a/source/ChanSort.Loader.Hisense/ServicelistDb/DbSchema.cs b/source/ChanSort.Loader.Hisense/ServicelistDb/DbSchema.cs index 1fd0146..101dd20 100644 --- a/source/ChanSort.Loader.Hisense/ServicelistDb/DbSchema.cs +++ b/source/ChanSort.Loader.Hisense/ServicelistDb/DbSchema.cs @@ -48,16 +48,16 @@ left outer join Lcn l on l.ServiceId=fi.ServiceId and l.FavoriteId=fi.FavoriteId public string DvbServiceTable => "DigitalService"; public string SelectChannels => @" -select fi.ServiceListId, fi.ServiceId, fi.ChannelNumber, 1, 1, 0, 0, l.Lcn +select fi.ServiceListId, fi.ServiceId, fi.ChannelNumber, fi.ServiceItem3, fi.ServiceItem4, fi.ServiceItem6, fi.ServiceItem7, l.Lcn from ServiceItem fi left outer join Lcn l on l.ServiceId=fi.ServiceId and l.ServiceListId=fi.ServiceListId "; - public string ShortName => "Name"; - public string ParentalLock => "0"; + public string ShortName => "Service9"; + public string ParentalLock => "0"; // supposedly "Service11", but that's not plausible public string UpdateService => - "update Service set Name=@name, Visible=@vis, Selectable=@sel where Pid=@servId"; - public string UpdateChannelItem => "update ServiceItem set ChannelNumber=@ch /*, isDeleted=@del, Protected=@prot, Selectable=@sel, Visible=@vis */ where ServiceListId=@favId and ServiceId=@servId"; + "update Service set Name=@name, Service9=@sname, Service11=@lock, Visible=@vis, /*Selectable=@sel,*/ Service16=@fav1, Service17=@fav2, Service18=@fav3, Service19=@fav4 where Pid=@servId"; + public string UpdateChannelItem => "update ServiceItem set ChannelNumber=@ch, ServiceItem6=@del, ServiceItem7=@prot, ServiceItem3=@sel, ServiceItem4=@vis where ServiceListId=@favId and ServiceId=@servId"; public string DeleteChannelItem => "delete from ServiceItem where ServiceListId in (select Pid from ServiceList where name like 'FAV_')"; public string InsertChannelItem => "insert into ServiceItem (ServiceListId, ServiceId, ChannelNumber) values (@favId, @servId, @ch)"; diff --git a/source/ChanSort.Loader.Hisense/ServicelistDb/ServicelistDbSerializer.cs b/source/ChanSort.Loader.Hisense/ServicelistDb/ServicelistDbSerializer.cs index 7a188d3..6e28ebd 100644 --- a/source/ChanSort.Loader.Hisense/ServicelistDb/ServicelistDbSerializer.cs +++ b/source/ChanSort.Loader.Hisense/ServicelistDb/ServicelistDbSerializer.cs @@ -539,6 +539,9 @@ left outer join {dbSchema.DvbServiceTable} digs on digs.ServiceId=s.Pid if (list.ReadOnly) // don't update read-only lists (i.e. containing LCNs) continue; + if (list.IsMixedSourceFavoritesList) + continue; + // don't update the $all list directly. It will be updated while iterating all other lists var favId = entry.Key; if (favId == pidAll) diff --git a/source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDbTest.cs b/source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDb2017Test.cs similarity index 89% rename from source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDbTest.cs rename to source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDb2017Test.cs index b294c28..c8d9afa 100644 --- a/source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDbTest.cs +++ b/source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDb2017Test.cs @@ -7,13 +7,13 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Test.Loader.Hisense.ServicelistDb { [TestClass] - public class HisenseServicelistDbTest + public class HisenseServicelistDb2017Test { #region TestAstraChannelsAddedToCorrectLists [TestMethod] public void TestAstraChannelsAddedToCorrectLists() { - this.TestChannelsAddedToCorrectLists("servicelist.db", "ASTRA1 19.2°E", 1214, 1052, 162); + this.TestChannelsAddedToCorrectLists("servicelist_2017.db", "ASTRA1 19.2°E", 1214, 1052, 162); } #endregion @@ -21,7 +21,7 @@ namespace Test.Loader.Hisense.ServicelistDb [TestMethod] public void TesEutelsatChannelsAddedToCorrectLists() { - this.TestChannelsAddedToCorrectLists("servicelist.db", "Hot Bird 13°E", 1732, 1439, 293); + this.TestChannelsAddedToCorrectLists("servicelist_2017.db", "Hot Bird 13°E", 1732, 1439, 293); } #endregion @@ -51,7 +51,7 @@ namespace Test.Loader.Hisense.ServicelistDb [TestMethod] public void TestDeletingChannel() { - var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\ServicelistDb\\TestFiles\\servicelist.db"); + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\ServicelistDb\\TestFiles\\servicelist_2017.db"); var plugin = new HisensePlugin(); var ser = plugin.CreateSerializer(tempFile); ser.Load(); @@ -97,7 +97,7 @@ namespace Test.Loader.Hisense.ServicelistDb [TestMethod] public void TestChannelAndFavListEditing() { - var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\ServicelistDb\\TestFiles\\" + "servicelist.db"); + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\ServicelistDb\\TestFiles\\" + "servicelist_2017.db"); RoundtripTest.TestChannelAndFavListEditing(tempFile, new HisensePlugin()); } #endregion diff --git a/source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDb2021Test.cs b/source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDb2021Test.cs new file mode 100644 index 0000000..0f600d3 --- /dev/null +++ b/source/Test.Loader.Hisense/ServicelistDb/HisenseServicelistDb2021Test.cs @@ -0,0 +1,102 @@ +using System.Linq; +using System.Runtime.InteropServices; +using ChanSort.Api; +using ChanSort.Loader.Hisense; +using Microsoft.VisualStudio.TestTools.UnitTesting; + + +namespace Test.Loader.Hisense.ServicelistDb +{ + [TestClass] + public class HisenseServicelistDb2021Test + { + #region TestAntennaChannelsAddedToCorrectLists + [TestMethod] + public void TestAntennaChannelsAddedToCorrectLists() + { + this.TestChannelsAddedToCorrectLists("servicelist_2021.db", "Antenna", 33, 24, 9); + } + #endregion + + + #region TestChannelsAddedToCorrectList + private void TestChannelsAddedToCorrectLists(string fileName, string listCaption, int expectedTotal, int expectedTv, int expectedRadio) + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\ServicelistDb\\TestFiles\\" + fileName); + var plugin = new HisensePlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + + var root = ser.DataRoot; + + var list = root.ChannelLists.FirstOrDefault(l => l.Caption.StartsWith(listCaption)); + Assert.IsNotNull(list); + Assert.AreEqual(expectedTotal, list.Channels.Count); + Assert.AreEqual(expectedTv, list.Channels.Count(ch => (ch.SignalSource & SignalSource.Tv) != 0)); + Assert.AreEqual(expectedRadio, list.Channels.Count(ch => (ch.SignalSource & SignalSource.Radio) != 0)); + + // no data channels in Hisense/Loewe servicelist.db files + } + #endregion + + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\ServicelistDb\\TestFiles\\servicelist_2021.db"); + var plugin = new HisensePlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 804 = Das Erste HD + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var chan = dvbs.Channels.FirstOrDefault(ch => ch.Name == "Das Erste HD"); + Assert.IsNotNull(chan); + Assert.AreEqual(804, chan.OldProgramNr); + Assert.AreEqual(804, chan.NewProgramNr); + Assert.IsFalse(chan.IsDeleted); + + chan.NewProgramNr = -1; + data.AssignNumbersToUnsortedAndDeletedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(chan.IsDeleted); + Assert.IsTrue(chan.NewProgramNr > 0); + Assert.AreEqual(0, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + foreach (var list in data.ChannelLists) + list.ReadOnly = false; + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was marked deleted in database + dvbs = data.GetChannelList(SignalSource.DvbS); + chan = dvbs.Channels.FirstOrDefault(ch => ch.Name == "Das Erste HD"); + Assert.IsNotNull(chan); + Assert.IsTrue(chan.IsDeleted); + Assert.AreEqual(-1, chan.NewProgramNr); + } + #endregion + + #region TestChannelAndFavListEditing + [TestMethod] + public void TestChannelAndFavListEditing() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\ServicelistDb\\TestFiles\\" + "servicelist_2021.db"); + RoundtripTest.TestChannelAndFavListEditing(tempFile, new HisensePlugin(), true, 271, 7); + } + #endregion + + } +} diff --git a/source/Test.Loader.Hisense/ServicelistDb/TestFiles/servicelist.db b/source/Test.Loader.Hisense/ServicelistDb/TestFiles/servicelist_2017.db similarity index 100% rename from source/Test.Loader.Hisense/ServicelistDb/TestFiles/servicelist.db rename to source/Test.Loader.Hisense/ServicelistDb/TestFiles/servicelist_2017.db diff --git a/source/Test.Loader.Hisense/ServicelistDb/TestFiles/servicelist_2021.db b/source/Test.Loader.Hisense/ServicelistDb/TestFiles/servicelist_2021.db new file mode 100644 index 0000000000000000000000000000000000000000..2f6f711fc37d821ad1c864b9672866b61df3871e GIT binary patch literal 44032 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 bcFF_mCVmHY(gW)v0}kwj2NogyHthccK?)25 literal 0 HcmV?d00001 diff --git a/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj b/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj index cfea8d1..5ef9c0e 100644 --- a/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj +++ b/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj @@ -239,13 +239,14 @@ - + + - + diff --git a/source/Test.Loader/RoundtripTest.cs b/source/Test.Loader/RoundtripTest.cs index 695b13a..b4113f7 100644 --- a/source/Test.Loader/RoundtripTest.cs +++ b/source/Test.Loader/RoundtripTest.cs @@ -8,7 +8,7 @@ namespace Test.Loader public static class RoundtripTest { #region TestChannelAndFavListEditing - public static void TestChannelAndFavListEditing(string tempFile, ISerializerPlugin plugin, bool swapChans = true, int firstProgNr = 1) + public static void TestChannelAndFavListEditing(string tempFile, ISerializerPlugin plugin, bool swapChans = true, int firstProgNr = 1, int firstProgIndex = 0) { var ser = plugin.CreateSerializer(tempFile); ser.Load(); @@ -61,6 +61,9 @@ namespace Test.Loader } } + foreach (var l in root.ChannelLists) + l.ReadOnly = false; + ser.Save(tempFile); diff --git a/source/changelog.md b/source/changelog.md index d0ac29a..76c08e3 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,8 +1,9 @@ ChanSort Change Log =================== -TBA -- added experimental support for Hisense Vidaa U5.2 format +2021-07-08 +- added experimental support for Hisense Vidaa U5.2 format (servicelist.db with different table and column names) +- applying a reference list did not work in some cases (depending on the type of reference list file and channel list) 2021-06-13 - improved High-DPI support diff --git a/source/makeDistribZip.cmd b/source/makeDistribZip.cmd index 345b077..d684bde 100644 --- a/source/makeDistribZip.cmd +++ b/source/makeDistribZip.cmd @@ -6,7 +6,7 @@ cd /d %~dp0 set languages=cs de es hu pl pt ru tr set curdate=%date:~6,4%-%date:~3,2%-%date:~0,2% set target=%cd%\..\..\ChanSort_%curdate% -set DXversion=20.2 +set DXversion=21.1 mkdir "%target%" 2>nul rem del /s /q "%target%\*" xcopy /idy debug\ChanSort.exe* "%target%" @@ -98,11 +98,11 @@ goto:eof :copyLangDll set source="C:\Program Files (x86)\DevExpress %DXversion%\Components\Bin\Framework\%2\DevExpress.%1.v%DXversion%.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" -set source="d:\downloads\DevExpress\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.resources.dll" +set source="d:\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" set source="C:\Program Files (x86)\DevExpress %DXversion%\Components\Bin\Framework\%2\DevExpress.%1.v%DXversion%.Core.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" -set source="d:\downloads\DevExpress\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.Core.resources.dll" +set source="d:\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.Core.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" goto:eof