From 0d9cdfefbb606bb4475a220badb8306666b813ed Mon Sep 17 00:00:00 2001 From: Horst Beham Date: Tue, 28 Jan 2025 21:26:53 +0100 Subject: [PATCH] - added support for Philips PFL9715K/02 (Repair\s2channellib\*.dat channel list format version 0.1) - added support for Grundig dtv_cmdb_3.bin channel lists with size of 1270 KB - fixed saving of Grundig dtv_cmdb_3.bin channel lists with size of 1293 KB - updated tivusat reference list - fixed issue when saving *cmdb_*.bin channel lists after applying a reference list which contains missing channels - HB_DATABASE_mm_dd.DBM for Strong SRT 7007: added option "reorderPhysically" in ChanSort.Loader.DBM.ini for this particular format to not only change the number but also change the order or data records in the file - removed app.config files containing assembly redirects from projects and included them in the central Solution.props instead - upgraded various NuGet packages --- readme.md | 1 + readme_de.md | 1 + readme_pl.md | 1 + readme_tr-TR.md | 1 + .../ChanSort.Loader.Amdb.csproj | 2 +- .../ChanSort.Loader.Android.csproj | 10 +- source/ChanSort.Loader.Android/app.config | 2 +- .../ChanSort.Loader.CmdbBin.ini | 78 +++++-- .../CmdbFileSerializer.cs | 32 ++- .../ChanSort.Loader.DBM.ini | 1 + source/ChanSort.Loader.DBM/DbmSerializer.cs | 12 +- .../ChanSort.Loader.Hisense.csproj | 13 +- source/ChanSort.Loader.Hisense/app.config | 26 --- .../ChanSort.Loader.LG/ChanSort.Loader.LG.ini | 66 +++--- .../ChanSort.Loader.Panasonic.csproj | 10 +- source/ChanSort.Loader.Panasonic/app.config | 2 +- .../BinarySerializer.cs | 5 +- .../ChanSort.Loader.Philips.csproj | 10 +- .../ChanSort.Loader.Philips/PhilipsPlugin.cs | 6 +- source/ChanSort.Loader.Philips/app.config | 2 +- .../ChanSort.Loader.Samsung.csproj | 10 +- source/ChanSort.Loader.Samsung/app.config | 2 +- source/ChanSort.Loader.SatcoDX/Channel.cs | 5 +- source/ChanSort.Loader.SatcoDX/Serializer.cs | 3 +- .../ChanSort.Loader.TCL.csproj | 2 +- .../ChanSort.Loader.Toshiba.csproj | 10 +- source/ChanSort.Loader.Toshiba/app.config | 2 +- .../ChanSort.Loader.VisionEdge4K.csproj | 2 +- source/ChanSort.sln | 3 +- source/ChanSort/MainForm.cs | 23 +- source/ChanSort/Properties/licenses.licx | 5 + .../it_hotbird130E_tivusat_EasyHD_&_FTA.txt | 203 +++++++----------- source/ChanSort/app.config | 2 +- .../dtv-cmdb-3.h | 151 +++++++++++++ source/Solution.props | 8 + source/Spike.LgWebOs5/App.config | 4 +- source/Test.Api/Test.Api.csproj | 9 +- source/Test.Api/app.config | 15 -- .../Test.Loader.CmdbBin.csproj | 4 +- source/Test.Loader.CmdbBin/app.config | 15 -- .../Test.Loader.Enigma2.csproj | 4 +- source/Test.Loader.Enigma2/app.config | 31 --- .../Test.Loader.Grundig.csproj | 4 +- source/Test.Loader.Grundig/app.config | 31 --- .../Test.Loader.Hisense.csproj | 4 +- source/Test.Loader.Hisense/app.config | 15 -- source/Test.Loader.LG/Test.Loader.LG.csproj | 4 +- source/Test.Loader.LG/app.config | 32 --- source/Test.Loader.M3u/Test.Loader.M3u.csproj | 4 +- .../Test.Loader.Panasonic.csproj | 4 +- source/Test.Loader.Panasonic/app.config | 15 -- .../Test.Loader.Philips.csproj | 4 +- source/Test.Loader.Philips/app.config | 15 -- .../Test.Loader.Samsung.csproj | 4 +- source/Test.Loader.Samsung/app.config | 15 -- .../Test.Loader.SatcoDX.csproj | 4 +- source/Test.Loader.SatcoDX/app.config | 31 --- .../Test.Loader.Sharp.csproj | 4 +- source/Test.Loader.Sharp/app.config | 31 --- .../Test.Loader.Sony/Test.Loader.Sony.csproj | 4 +- source/Test.Loader.Sony/app.config | 31 --- .../Test.Loader.Toshiba.csproj | 4 +- source/Test.Loader.Toshiba/app.config | 19 -- source/Test.Loader.VDR/Test.Loader.VDR.csproj | 4 +- source/Test.Loader.VDR/app.config | 31 --- source/Test.Loader/Test.Loader.csproj | 4 +- source/Test.Loader/app.config | 4 +- source/{Test.Loader.M3u => }/app.config | 12 +- source/changelog.md | 12 ++ source/fileformats.md | 4 +- 70 files changed, 514 insertions(+), 630 deletions(-) delete mode 100644 source/ChanSort.Loader.Hisense/app.config create mode 100644 source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dtv-cmdb-3.h delete mode 100644 source/Test.Api/app.config delete mode 100644 source/Test.Loader.CmdbBin/app.config delete mode 100644 source/Test.Loader.Enigma2/app.config delete mode 100644 source/Test.Loader.Grundig/app.config delete mode 100644 source/Test.Loader.Hisense/app.config delete mode 100644 source/Test.Loader.LG/app.config delete mode 100644 source/Test.Loader.Panasonic/app.config delete mode 100644 source/Test.Loader.Philips/app.config delete mode 100644 source/Test.Loader.Samsung/app.config delete mode 100644 source/Test.Loader.SatcoDX/app.config delete mode 100644 source/Test.Loader.Sharp/app.config delete mode 100644 source/Test.Loader.Sony/app.config delete mode 100644 source/Test.Loader.Toshiba/app.config delete mode 100644 source/Test.Loader.VDR/app.config rename source/{Test.Loader.M3u => }/app.config (90%) diff --git a/readme.md b/readme.md index 45a10d0..464ef10 100644 --- a/readme.md +++ b/readme.md @@ -62,6 +62,7 @@ it may work anyway: - [Grundig](source/fileformats.md#grundig) - [SatcoDX: ITT, Medion, Nabo, ok., PEAQ, Schaub-Lorenz, Silva-Schneider, Telefunken, ...](source/fileformats.md#satcodx) - [DBM: Xoro, Strong, TechniSat, ...](source/fileformats.md#dbm) +- [Loewe](source/fileformats.md#hisense) - [Vision Edge 4K](source/fileformats.md#visionedge) - [VDR](source/fileformats.md#vdr) - [SAT>IP m3u](source/fileformats.md#m3u) diff --git a/readme_de.md b/readme_de.md index 826d835..317cbcf 100644 --- a/readme_de.md +++ b/readme_de.md @@ -62,6 +62,7 @@ hier nicht angeführt ist, könnte es trotzdem funktiontionieren: - [Grundig](source/fileformats_de.md#grundig) - [SatcoDX: ITT, Medion, Nabo, ok., PEAQ, Schaub-Lorenz, Silva-Schneider, Telefunken, ...](source/fileformats_de.md#satcodx) - [DBM: Xoro, Strong, TechniSat, ...](source/fileformats_de.md#dbm) +- [Loewe](source/fileformats_de.md#hisense) - [Vision Edge 4K](source/fileformats.md#visionedge) - [VDR](source/fileformats_de.md#vdr) - [SAT>IP m3u](source/fileformats_de.md#m3u) diff --git a/readme_pl.md b/readme_pl.md index dac3757..f65caf4 100644 --- a/readme_pl.md +++ b/readme_pl.md @@ -62,6 +62,7 @@ to może i tak zadziałać: - [Grundig](source/fileformats.md#grundig) - [SatcoDX: ITT, Medion, Nabo, ok., PEAQ, Schaub-Lorenz, Silva-Schneider, Telefunken, ...](source/fileformats.md#satcodx) - [DBM: Xoro, Strong, TechniSat, ...](source/fileformats.md#dbm) +- [Loewe](source/fileformats.md#hisense) - [Vision Edge 4K](source/fileformats.md#visionedge) - [VDR](source/fileformats.md#vdr) - [SAT>IP m3u](source/fileformats.md#m3u) diff --git a/readme_tr-TR.md b/readme_tr-TR.md index e70c697..66d121a 100644 --- a/readme_tr-TR.md +++ b/readme_tr-TR.md @@ -58,6 +58,7 @@ Bu liste nelerin desteklendiğine dair bir örnek teşkil eder, ancak yine de bu - [Grundig](source/fileformats.md#grundig) - [SatcoDX: ITT, Medion, Nabo, ok., PEAQ, Schaub-Lorenz, Silva-Schneider, Telefunken, ...](source/fileformats.md#satcodx) - [DBM: Xoro, Strong, TechniSat, ...](source/fileformats.md#dbm) +- [Loewe](source/fileformats_de.md#hisense) - [Vision Edge 4K](source/fileformats.md#visionedge) - [VDR](source/fileformats.md#vdr) - [SAT>IP m3u](source/fileformats.md#m3u) diff --git a/source/ChanSort.Loader.Amdb/ChanSort.Loader.Amdb.csproj b/source/ChanSort.Loader.Amdb/ChanSort.Loader.Amdb.csproj index b1c83a9..3f854a3 100644 --- a/source/ChanSort.Loader.Amdb/ChanSort.Loader.Amdb.csproj +++ b/source/ChanSort.Loader.Amdb/ChanSort.Loader.Amdb.csproj @@ -13,7 +13,7 @@ ..\Release\ - + diff --git a/source/ChanSort.Loader.Android/ChanSort.Loader.Android.csproj b/source/ChanSort.Loader.Android/ChanSort.Loader.Android.csproj index 75ae718..71d6aab 100644 --- a/source/ChanSort.Loader.Android/ChanSort.Loader.Android.csproj +++ b/source/ChanSort.Loader.Android/ChanSort.Loader.Android.csproj @@ -15,10 +15,10 @@ - - - - - + + + + + \ No newline at end of file diff --git a/source/ChanSort.Loader.Android/app.config b/source/ChanSort.Loader.Android/app.config index a1e2bff..0e4634a 100644 --- a/source/ChanSort.Loader.Android/app.config +++ b/source/ChanSort.Loader.Android/app.config @@ -8,7 +8,7 @@ - + diff --git a/source/ChanSort.Loader.CmdbBin/ChanSort.Loader.CmdbBin.ini b/source/ChanSort.Loader.CmdbBin/ChanSort.Loader.CmdbBin.ini index f89e570..ac96b11 100644 --- a/source/ChanSort.Loader.CmdbBin/ChanSort.Loader.CmdbBin.ini +++ b/source/ChanSort.Loader.CmdbBin/ChanSort.Loader.CmdbBin.ini @@ -6,6 +6,71 @@ +# Grundig 22 VLE 8120 WG dtv_cmd_3.bin with 1270 KB + +[dtv_cmdb_3.bin:1299920] +offSatelliteBitmap=0x0008 +lenSatelliteBitmap=4 + +offChannelBitmap=12 +lenChannelBitmap=752 + +offSatelliteRecord=0x2fc +lenSatelliteRecord=60_3 +numSatelliteRecord=24 + +offNetworkRecord=0x89c +lenNetworkRecord=54 +numNetworkRecord=254 + +offTransponderBitmap=-1 +lenTransponderBitmap=-1 +offTransponderRecord=0x3e30 +lenTransponderRecord=44_3 +numTransponderRecord=3000 + +numChannelRecord=6000 +offChannelRecord=0x241d0 +lenChannelRecord=192_3 + +[dvbsSatellite:60_3] +offName=2 +lenName=14 + +[dvbsTransponder:44_3] +offSatelliteIndex=0 +offTransportStreamId=6 +offOriginalNetworkId=8 +offNetworkId=-1 +offTransponderIndex=10 +offFreqInMhz=12 +offSymbolRate=32 + +[dvbsChannel:192_3] +offEncrypted=11 +maskEncrypted=0x10 +offSkip=11 +maskSkip=0x20 +offLocked=11 +maskLocked=0x40 +offDeleted=11 +maskDeleted=0x04 +offChannelType=13 +offServiceType=-1 +offTransponderIndex=16 +offPmtPid=18 +offPcrPid=22 +offVideoPid=24 +offProgramNr=28 +offServiceId=30 +offAudioPid=52 +offName=140 +lenName=44 +offDebug=11 +lenDebug=1 + + + # C.F. - Grundig 37 VLE 9270 SL dtv_cmd_3.bin with 1293 KB [dtv_cmdb_3.bin:1323920] @@ -33,19 +98,6 @@ numChannelRecord=6000 offChannelRecord=0x241d0 lenChannelRecord=196_3 -[dvbsSatellite:60_3] -offName=2 -lenName=14 - -[dvbsTransponder:44_3] -offSatelliteIndex=0 -offTransportStreamId=6 -offOriginalNetworkId=8 -offNetworkId=-1 -offTransponderIndex=10 -offFreqInMhz=12 -offSymbolRate=32 - [dvbsChannel:196_3] offEncrypted=11 maskEncrypted=0x10 diff --git a/source/ChanSort.Loader.CmdbBin/CmdbFileSerializer.cs b/source/ChanSort.Loader.CmdbBin/CmdbFileSerializer.cs index 82c7cbb..e25adf5 100644 --- a/source/ChanSort.Loader.CmdbBin/CmdbFileSerializer.cs +++ b/source/ChanSort.Loader.CmdbBin/CmdbFileSerializer.cs @@ -13,9 +13,13 @@ namespace ChanSort.Loader.CmdbBin private readonly List files = new(); private readonly ChannelList avbtTv = new (SignalSource.AnalogT | SignalSource.Tv, "Analog Antenna TV"); private readonly ChannelList avbcTv = new (SignalSource.AnalogC | SignalSource.Tv, "Analog Cable TV"); - private readonly ChannelList dvbsTv = new (SignalSource.DvbS | SignalSource.Tv, "Sat TV"); - private readonly ChannelList dvbsRadio = new (SignalSource.DvbS | SignalSource.Radio, "Sat Radio"); - private readonly ChannelList dvbsData = new (SignalSource.DvbS | SignalSource.Radio, "Sat Data"); + private readonly ChannelList dvbsTv = new (SignalSource.DvbS | SignalSource.Tv, "Sat TV _2"); + private readonly ChannelList dvbsRadio = new (SignalSource.DvbS | SignalSource.Radio, "Sat Radio _2"); + private readonly ChannelList dvbsData = new (SignalSource.DvbS | SignalSource.Radio, "Sat Data _2"); + private readonly ChannelList dvbsTv3 = new(SignalSource.DvbS | SignalSource.Tv, "Sat TV _3"); + private readonly ChannelList dvbsRadio3 = new(SignalSource.DvbS | SignalSource.Radio, "Sat Radio _3"); + private readonly ChannelList dvbsData3 = new(SignalSource.DvbS | SignalSource.Radio, "Sat Data _3"); + private DvbStringDecoder dvbStringDecoder; private bool loaded; private readonly StringBuilder protocol = new (); @@ -32,6 +36,9 @@ namespace ChanSort.Loader.CmdbBin this.DataRoot.AddChannelList(dvbsTv); this.DataRoot.AddChannelList(dvbsRadio); // this.DataRoot.AddChannelList(dvbsData); // there seem to be multiple data lists with Toshiba TVs which all have their own numbering starting at 1. Better don't show data channels at all than dupes + this.DataRoot.AddChannelList(dvbsTv3); + this.DataRoot.AddChannelList(dvbsRadio3); + // this.DataRoot.AddChannelList(dvbsData3); // there seem to be multiple data lists with Toshiba TVs which all have their own numbering starting at 1. Better don't show data channels at all than dupes this.ReadConfigurationFromIniFile(); foreach (var list in this.DataRoot.ChannelLists) @@ -60,7 +67,7 @@ namespace ChanSort.Loader.CmdbBin LoadFile(file, this.dvbsTv, this.dvbsRadio, this.dvbsData); break; case "dtv_cmdb_3.bin": - LoadFile(file, this.dvbsTv, this.dvbsRadio, this.dvbsData); + LoadFile(file, this.dvbsTv3, this.dvbsRadio3, this.dvbsData3); break; case "atv_cmdb.bin": LoadFile(file, this.avbtTv, null, null); @@ -299,7 +306,10 @@ namespace ChanSort.Loader.CmdbBin switch (name) { case "dtv_cmdb_2.bin": - SaveDtvCmdb(path, "dvbsChannel", SignalSource.DvbS); + SaveDtvCmdb(path, "dvbsChannel", this.dvbsTv, this.dvbsRadio, this.dvbsData); + break; + case "dtv_cmdb_3.bin": + SaveDtvCmdb(path, "dvbsChannel", this.dvbsTv3, this.dvbsRadio3, this.dvbsData3); break; case "atv_cmdb.bin": SaveAtvCmdb(path, "avbChannel", this.avbtTv); @@ -313,22 +323,22 @@ namespace ChanSort.Loader.CmdbBin #endregion #region SaveDtvCmdb() - private void SaveDtvCmdb(string path, string channelSectionName, SignalSource sourceMask) + private void SaveDtvCmdb(string path, string channelSectionName, params ChannelList[] lists) { var data = File.ReadAllBytes(path); var name = Path.GetFileName(path).ToLowerInvariant(); var config = this.ini.GetSection(name + ":" + data.Length); - var lenChannelRecord = config.GetInt("lenChannelRecord"); - var sec = this.ini.GetSection($"{channelSectionName}:{lenChannelRecord}"); + var strLength = config.GetString("lenChannelRecord"); + var idx = strLength.IndexOf('_'); + var lenChannelRecord = int.Parse(idx < 0 ? strLength : strLength.Substring(0, idx)); + var sec = this.ini.GetSection($"{channelSectionName}:{strLength}"); sec.Set("offChecksum", lenChannelRecord - 4); var mapping = new DataMapping(sec); var baseOffset = config.GetInt("offChannelRecord"); - foreach (var list in this.DataRoot.ChannelLists) + foreach (var list in lists) { - if ((list.SignalSource & (SignalSource.MaskBcastSystem | SignalSource.MaskBcastMedium)) != sourceMask) - continue; foreach (var chan in list.Channels) { mapping.SetDataPtr(data, baseOffset + (int)chan.RecordIndex * lenChannelRecord); diff --git a/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini b/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini index 58ba3db..4c255ba 100644 --- a/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini +++ b/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini @@ -219,6 +219,7 @@ offFreq=0 offSymRate=20 ;channel record +reorderPhysically=true offName=0 lenName=64 offProgNr=64 diff --git a/source/ChanSort.Loader.DBM/DbmSerializer.cs b/source/ChanSort.Loader.DBM/DbmSerializer.cs index 2d7e142..18bbd25 100644 --- a/source/ChanSort.Loader.DBM/DbmSerializer.cs +++ b/source/ChanSort.Loader.DBM/DbmSerializer.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using System.Reflection; using System.Text; using ChanSort.Api; @@ -273,7 +274,16 @@ namespace ChanSort.Loader.DBM mapping.SetWord("offChecksum", calculatedChecksum); } - File.WriteAllBytes(this.FileName, this.data); + if (!sec.GetBool("reorderPhysically")) + File.WriteAllBytes(this.FileName, this.data); + else + { + using var strm = new FileStream(this.FileName, FileMode.Create); + strm.Write(this.data, 0, baseOffset); + foreach (var chan in this.allChannels.Channels.OrderBy(ch => ch.NewProgramNr >= 0 ? ch.NewProgramNr : 1000000 + ch.OldProgramNr)) + strm.Write(this.data, baseOffset + (int)chan.RecordIndex * recordSize, recordSize); + strm.Write(this.data, (int)strm.Position, data.Length - (int)strm.Position); + } } #endregion diff --git a/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj b/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj index 2b8136d..7569b43 100644 --- a/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj +++ b/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj @@ -44,11 +44,11 @@ - - - - - + + + + + @@ -59,4 +59,7 @@ + + + \ No newline at end of file diff --git a/source/ChanSort.Loader.Hisense/app.config b/source/ChanSort.Loader.Hisense/app.config deleted file mode 100644 index 0677afb..0000000 --- a/source/ChanSort.Loader.Hisense/app.config +++ /dev/null @@ -1,26 +0,0 @@ - - - - -
- - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/ChanSort.Loader.LG/ChanSort.Loader.LG.ini b/source/ChanSort.Loader.LG/ChanSort.Loader.LG.ini index 7ad94fa..d4afe29 100644 --- a/source/ChanSort.Loader.LG/ChanSort.Loader.LG.ini +++ b/source/ChanSort.Loader.LG/ChanSort.Loader.LG.ini @@ -34,39 +34,6 @@ offAudioPid2 = 254 -[ACTChannelDataMapping:244] - ; LB550U, LB561V - reorderChannelData = 0 - lenName = 40 - offSignalSource = 8 - offChannelTransponder = 10, 136, 173, 180 - offProgramNr = 12, 176 - offProgramNrPreset = 14, 178 - offFavorites = 20 - offPcrPid = 24, 228 - offAudioPid = 26 - offVideoPid = 36 - offName = 44, 188 - offNameLength = 84, 187 - offServiceId = 86, 184 - offFrequencyLong = 140 - offOriginalNetworkId = 150 - offTransportStreamId = 152 - offFavorites2 = 182 - offDeleted = 182 - maskDeleted = 0x42 - offLock = 183 - maskLock = 0x01 - offSkip = 183 - maskSkip = 0x02 - offHide = 183 - maskHide = 0x04 - offProgNrCustomized = 183 - maskProgNrCustomized = 0x40 - offServiceType = 186 - offAudioPid2 = 230 - - [ACTChannelDataMapping:260] ; LA 2013 series firmware 04.20.29 and later reorderChannelData = 0 @@ -164,6 +131,39 @@ offServiceType = 194 offAudioPid2 = 238 +[ACTChannelDataMapping:244] + ; LB550U, LB561V + reorderChannelData = 0 + lenName = 40 + offSignalSource = 8 + offChannelTransponder = 10, 136, 173, 180 + offProgramNr = 12, 176 + offProgramNrPreset = 14, 178 + offFavorites = 20 + offPcrPid = 24, 228 + offAudioPid = 26 + offVideoPid = 36 + offName = 44, 188 + offNameLength = 84, 187 + offServiceId = 86, 184 + offFrequencyLong = 140 + offOriginalNetworkId = 150 + offTransportStreamId = 152 + offFavorites2 = 182 + offDeleted = 182 + maskDeleted = 0x42 + offLock = 183 + maskLock = 0x01 + offSkip = 183 + maskSkip = 0x02 + offHide = 183 + maskHide = 0x04 + offProgNrCustomized = 183 + maskProgNrCustomized = 0x40 + offServiceType = 186 + offAudioPid2 = 230 + + [ACTChannelDataMapping:224] ; LN series reorderChannelData = 0 diff --git a/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj b/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj index 1cb0c70..dd3f6e7 100644 --- a/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj +++ b/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj @@ -32,10 +32,10 @@ - - - - - + + + + + \ No newline at end of file diff --git a/source/ChanSort.Loader.Panasonic/app.config b/source/ChanSort.Loader.Panasonic/app.config index a1e2bff..0e4634a 100644 --- a/source/ChanSort.Loader.Panasonic/app.config +++ b/source/ChanSort.Loader.Panasonic/app.config @@ -8,7 +8,7 @@ - + diff --git a/source/ChanSort.Loader.Philips/BinarySerializer.cs b/source/ChanSort.Loader.Philips/BinarySerializer.cs index 74903de..a171209 100644 --- a/source/ChanSort.Loader.Philips/BinarySerializer.cs +++ b/source/ChanSort.Loader.Philips/BinarySerializer.cs @@ -481,10 +481,11 @@ namespace ChanSort.Loader.Philips { var transponderId = mapping.GetWord("offTransponderIndex"); var progNr = mapping.GetWord("offProgNr"); + var serviceId = mapping.GetWord("offSid"); var ch = new Channel(list.SignalSource & SignalSource.MaskBcastMedium, recordIndex, progNr, ""); // deleted channels must be kept in the list because their records must also be physically reordered when saving the list - if (progNr == 0xFFFF || transponderId == 0xFFFF) + if (progNr == 0xFFFF || transponderId == 0xFFFF || serviceId == 0xFFFF) { ch.IsDeleted = true; ch.OldProgramNr = -1; @@ -1002,6 +1003,8 @@ namespace ChanSort.Loader.Philips : list.Channels.OrderBy(c => c.RecordIndex); foreach (var ch in channels) { + if (ch.IsProxy) + continue; mapping.BaseOffset = baseOffset + i * recordSize; Array.Copy(orig, baseOffset + (int)ch.RecordIndex * recordSize, data, mapping.BaseOffset, recordSize); if (ch.IsDeleted) diff --git a/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.csproj b/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.csproj index 547c0b7..ec6f4ca 100644 --- a/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.csproj +++ b/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.csproj @@ -44,11 +44,11 @@ - - - - - + + + + + diff --git a/source/ChanSort.Loader.Philips/PhilipsPlugin.cs b/source/ChanSort.Loader.Philips/PhilipsPlugin.cs index 832cd85..0c94d42 100644 --- a/source/ChanSort.Loader.Philips/PhilipsPlugin.cs +++ b/source/ChanSort.Loader.Philips/PhilipsPlugin.cs @@ -93,6 +93,7 @@ namespace ChanSort.Loader.Philips public SerializerBase CreateSerializer(string inputFile) { int majorVersion = int.MinValue; + int minorVersion = int.MinValue; var filename = Path.GetFileName(inputFile).ToLowerInvariant(); if (Regex.IsMatch(filename, @"^CM_.*\.(?:bin|xml)$", RegexOptions.IgnoreCase)) majorVersion = 0; @@ -110,6 +111,7 @@ namespace ChanSort.Loader.Philips inputFile = path; var data = File.ReadAllBytes(inputFile); majorVersion = BitConverter.ToInt16(data, 2); + minorVersion = BitConverter.ToInt16(data, 4); break; } @@ -139,9 +141,9 @@ namespace ChanSort.Loader.Philips } } - if (majorVersion == 0 || majorVersion >= 100 && majorVersion <= 125) + if (majorVersion == 0 && minorVersion != 0 || majorVersion >= 100 && majorVersion <= 125) return new XmlSerializer(inputFile); - if (majorVersion == 1 || majorVersion == 2 || majorVersion == 30 || majorVersion == 45) // || majorVersion == 11 // format version 11 is similar to 1.x, but not (yet) supported + if (majorVersion is >= 0 and <= 2 || majorVersion == 30 || majorVersion == 45) // || majorVersion == 11 // format version 11 is similar to 1.x, but not (yet) supported return new BinarySerializer(inputFile); if (majorVersion == -1) return new DbSerializer(inputFile); diff --git a/source/ChanSort.Loader.Philips/app.config b/source/ChanSort.Loader.Philips/app.config index a1e2bff..0e4634a 100644 --- a/source/ChanSort.Loader.Philips/app.config +++ b/source/ChanSort.Loader.Philips/app.config @@ -8,7 +8,7 @@ - + diff --git a/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj b/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj index aea3186..de1fc7b 100644 --- a/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj +++ b/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj @@ -38,11 +38,11 @@ - + - - - - + + + + \ No newline at end of file diff --git a/source/ChanSort.Loader.Samsung/app.config b/source/ChanSort.Loader.Samsung/app.config index a1e2bff..0e4634a 100644 --- a/source/ChanSort.Loader.Samsung/app.config +++ b/source/ChanSort.Loader.Samsung/app.config @@ -8,7 +8,7 @@ - + diff --git a/source/ChanSort.Loader.SatcoDX/Channel.cs b/source/ChanSort.Loader.SatcoDX/Channel.cs index b5ef5f4..41c0653 100644 --- a/source/ChanSort.Loader.SatcoDX/Channel.cs +++ b/source/ChanSort.Loader.SatcoDX/Channel.cs @@ -7,7 +7,7 @@ namespace ChanSort.Loader.SatcoDX { internal class Channel : ChannelInfo { - private byte[] data; + private readonly byte[] data; public int FileOffset { get; } public int Length { get; } @@ -75,7 +75,10 @@ namespace ChanSort.Loader.SatcoDX // 102-104: language // 106-107: country code // 108-110: language code + // 111-114: crypto code + if (line.Length >= 115) + this.Encrypted = line.Substring(111, 4) == "LCKD"; } #endregion diff --git a/source/ChanSort.Loader.SatcoDX/Serializer.cs b/source/ChanSort.Loader.SatcoDX/Serializer.cs index bcb16ce..d14e937 100644 --- a/source/ChanSort.Loader.SatcoDX/Serializer.cs +++ b/source/ChanSort.Loader.SatcoDX/Serializer.cs @@ -34,7 +34,6 @@ namespace ChanSort.Loader.SatcoDX list.VisibleColumnFieldNames.Remove("Lock"); list.VisibleColumnFieldNames.Remove("Skip"); list.VisibleColumnFieldNames.Remove("Hidden"); - list.VisibleColumnFieldNames.Remove("Encrypted"); list.VisibleColumnFieldNames.Remove("Favorites"); list.VisibleColumnFieldNames.Remove("ServiceType"); list.VisibleColumnFieldNames.Add("ServiceTypeName"); @@ -63,7 +62,7 @@ namespace ChanSort.Loader.SatcoDX prevPos = nextPos + 1; } - // SATCODX105 files contain a \0 character to mark the end, followed by an arbitrary number or spaces (or whatever data). We'll preserve it as-is. + // SATCODX105 files contain a \0 character to mark the end, followed by an arbitrary number of spaces (or whatever data). We'll preserve it as-is. this.trailingDataPos = prevPos; } diff --git a/source/ChanSort.Loader.TCL/ChanSort.Loader.TCL.csproj b/source/ChanSort.Loader.TCL/ChanSort.Loader.TCL.csproj index de28216..4839be4 100644 --- a/source/ChanSort.Loader.TCL/ChanSort.Loader.TCL.csproj +++ b/source/ChanSort.Loader.TCL/ChanSort.Loader.TCL.csproj @@ -6,7 +6,7 @@ latest - + diff --git a/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj b/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj index f24f288..ef0e9a8 100644 --- a/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj +++ b/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj @@ -30,11 +30,11 @@ - + - - - - + + + + \ No newline at end of file diff --git a/source/ChanSort.Loader.Toshiba/app.config b/source/ChanSort.Loader.Toshiba/app.config index a1e2bff..0e4634a 100644 --- a/source/ChanSort.Loader.Toshiba/app.config +++ b/source/ChanSort.Loader.Toshiba/app.config @@ -8,7 +8,7 @@ - + diff --git a/source/ChanSort.Loader.VisionEdge4K/ChanSort.Loader.VisionEdge4K.csproj b/source/ChanSort.Loader.VisionEdge4K/ChanSort.Loader.VisionEdge4K.csproj index b1c83a9..3f854a3 100644 --- a/source/ChanSort.Loader.VisionEdge4K/ChanSort.Loader.VisionEdge4K.csproj +++ b/source/ChanSort.Loader.VisionEdge4K/ChanSort.Loader.VisionEdge4K.csproj @@ -13,7 +13,7 @@ ..\Release\ - + diff --git a/source/ChanSort.sln b/source/ChanSort.sln index 6d54f04..d28907a 100644 --- a/source/ChanSort.sln +++ b/source/ChanSort.sln @@ -23,6 +23,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChanSort.Loader.LG", "ChanS EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{67AED502-8AEB-45F2-9B95-AC42B6A5D2C4}" ProjectSection(SolutionItems) = preProject + ChanSort.Loader.Samsung\app.config = ChanSort.Loader.Samsung\app.config build.md = build.md changelog.md = changelog.md fileformats.md = fileformats.md @@ -114,7 +115,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HDD Hex Edit Neo", "HDD Hex Information\FileStructures_for_HHD_Hex_Editor_Neo\chansort.h = Information\FileStructures_for_HHD_Hex_Editor_Neo\chansort.h Information\FileStructures_for_HHD_Hex_Editor_Neo\cvt_database-dat.h = Information\FileStructures_for_HHD_Hex_Editor_Neo\cvt_database-dat.h Information\FileStructures_for_HHD_Hex_Editor_Neo\dbm.h = Information\FileStructures_for_HHD_Hex_Editor_Neo\dbm.h - Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv-cmdb.h = Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv-cmdb.h + Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv-cmdb-3.h = Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv-cmdb-3.h Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv_cmdb_1-bin.h = Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv_cmdb_1-bin.h Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv_cmdb_2-bin.h = Information\FileStructures_for_HHD_Hex_Editor_Neo\dtv_cmdb_2-bin.h Information\FileStructures_for_HHD_Hex_Editor_Neo\get_doc_size.js = Information\FileStructures_for_HHD_Hex_Editor_Neo\get_doc_size.js diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs index 627e0f8..04a1315 100644 --- a/source/ChanSort/MainForm.cs +++ b/source/ChanSort/MainForm.cs @@ -186,7 +186,7 @@ namespace ChanSort.Ui internal ChannelList CurrentChannelList { get; private set; } internal int SubListIndex => this.subListIndex; - private GridView EditorGridView => this.miSplitView.Down ? this.gviewLeft : this.gviewRight; + private XGridView EditorGridView => this.miSplitView.Down ? this.gviewLeft : this.gviewRight; #region IsLeftGridSortedByNewProgNr @@ -986,10 +986,18 @@ namespace ChanSort.Ui if (list.IsMixedSourceFavoritesList) continue; var chNr = 1; - foreach (var channel in list.Channels.OrderBy(c => c.NewProgramNr)) + foreach (var channel in list.Channels.OrderBy(c => c.NewProgramNr).ToList()) { if (channel.IsDeleted || channel.NewProgramNr < 0) continue; + + if (channel.IsProxy && !testOnly) + { + // remove proxy channels so they don't cause duplicate numbers + list.Channels.Remove(channel); + continue; + } + if (channel.NewProgramNr == 0 && chNr == 1) chNr = 0; if (channel.NewProgramNr != chNr) @@ -3924,8 +3932,17 @@ namespace ChanSort.Ui private void btnSearch_Click(object sender, EventArgs e) { var gview = this.EditorGridView; + var col = gview == gviewLeft ? colOutName : colName; gview.FocusedRowHandle = GridControl.AutoFilterRowHandle; - gview.FocusedColumn = colName; + gview.FocusedColumn = col; + + var tt = new ToolTip(); + tt.IsBalloon = true; + var x = gview.ViewInfo.GetColumnLeftCoord(col) + this.ScaleHelper.ScaleHorizontal(10); + var ri = gview.ViewInfo.GetGridRowInfo(GridControl.AutoFilterRowHandle); + var y = ri.Bounds.Bottom + this.ScaleHelper.ScaleVertical(15); + tt.Show("Enter search text here", gridLeft, x, y, 3000); + gview.GridControl.Focus(); gview.ShowEditor(); } diff --git a/source/ChanSort/Properties/licenses.licx b/source/ChanSort/Properties/licenses.licx index e69de29..8c64126 100644 --- a/source/ChanSort/Properties/licenses.licx +++ b/source/ChanSort/Properties/licenses.licx @@ -0,0 +1,5 @@ +DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v23.2, Version=23.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v23.2, Version=23.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v23.2, Version=23.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v23.2, Version=23.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v23.2, Version=23.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/source/ChanSort/ReferenceLists/it_hotbird130E_tivusat_EasyHD_&_FTA.txt b/source/ChanSort/ReferenceLists/it_hotbird130E_tivusat_EasyHD_&_FTA.txt index 5cfb6a7..98c7bf2 100644 --- a/source/ChanSort/ReferenceLists/it_hotbird130E_tivusat_EasyHD_&_FTA.txt +++ b/source/ChanSort/ReferenceLists/it_hotbird130E_tivusat_EasyHD_&_FTA.txt @@ -6,101 +6,93 @@ 6;Italia1 HD;272-1200-121 7;LA7 HD;190-6000-79 8;TV8 HD;64511-7500-7260 -9;Nove;318-1000-4323 +9;Nove HD;318-1000-4323 10;Rai 4 HD;318-5200-3405 11;Iris HD;272-1200-124 12;La5 HD;272-1200-127 13;Rai 5 HD;318-12500-17716 14;Rai Movie HD;318-5200-3406 15;Rai Premium HD;318-12400-8522 -16;Mediaset Italia2 HD;272-1200-130 +16;Mediaset Italia2 HD;272-1200-130 17;Mediaset Extra HD;272-1200-129 -18;TV2000 HD;64511-6900-11180 -19;Cielo HD;64511-7500-4120 -20;20Mediaset HD;272-1200-120 +18;TV2000 HD;64511-6700-4365 +19;cielo HD;64511-7500-4120 +20;20 Mediaset HD;272-1200-120 21;Rai Sport + HD;318-12500-17714 -22;VH1 HD;318-15700-1326 23;Rai Storia HD;318-12400-8518 24;Rai News 24 HD;318-12500-17711 25;TGCOM24 HD;272-1200-128 26;Rai Scuola HD;318-12400-8521 27;27Twentyseven HD;272-1200-135 -28;DMAX;318-300-15202 +28;DMAX Italy;318-300-15202 29;LA7d HD;190-6000-73 -31;Real Time;318-300-15201 +31;Realtime Italy;318-300-15201 32;QVC HD;318-15800-16979 33;Focus HD;272-1200-134 34;Cine34 HD;272-1200-111 -35;Radio Italia TV HD;318-15800-16962 -36;RTL 102.5 HD;318-15700-1307 -37;RTL 102.5 News;318-15700-1323 -38;GIALLO;318-1000-4322 +35;Radio Italia Tv HD;318-15800-16962 +36;RTL 1025 HD;318-15700-1307 +37;RTL 1025 CALIENTE;318-15700-1323 +38;Giallo HD;318-1000-4322 39;TOPcrime HD;272-1200-132 -40;Boing;272-1200-126 -41;Cartoonito;272-1200-133 +40;Boing HD;272-1200-126 +41;Cartoonito HD;272-1200-133 42;Rai Gulp HD;318-12500-17712 43;Rai YoYo HD;318-12400-8511 -44;frisbee;318-300-15205 +44;Frisbee;318-300-15205 46;K2;318-300-15204 -47;Super!;318-15700-1327 +47;Super!;64511-8200-3568 48;Arte HD;319-15900-307 -49;MEZZO;318-7200-10725 -50;RDS Social TV;318-15800-16977 +49;Mezzo TV;318-12100-16939 +50;RDS Social TV HD;318-15800-16975 51;EQUtv;318-15800-16963 -52;ACI Sport TV;318-9300-1613 -53;Food Network;318-300-15203 -54;Warner TV Italy;318-300-15212 -55;Gold TV;318-15700-1332 -56;HGTV Italy;318-1000-4334 -57;Motor Trend;318-1000-4321 +52;ACISPORT TV;318-9300-1613 +53;Food Network Italy;318-300-15203 +54;WarnerTV Italy HD;318-300-15212 +55;GOLD TV (International);318-15700-1332 +56;HGTV Italy HD;318-1000-4334 +57;MotorTrend HD;318-1000-4321 58;Solo Calcio;318-13300-4996 -59;Euronews Italian;318-8900-2017 -60;Euronews Russian;318-12600-1705 -61;BFC;64511-6900-3539 -62;Giornale Radio TV;318-12100-16944 +59;EURONEWS ITALIAN SD PAL;318-8900-2017 +60;WeDo TV;318-15700-1337 63;Radio Italia Trend TV HD;318-15800-16966 -64;Radio Kiss Kiss TV;318-15800-16976 +64;Radio Kiss Kiss Tv;318-15800-16976 65;RADIO ZETA HD;318-15700-1321 66;RADIOFRECCIA HD;318-15700-1308 67;RADIO MONTE CARLO;272-1200-119 68;VIRGIN RADIO;272-1200-118 69;France 24 HD (in English);318-15300-808 -70;BBC World News;318-9400-8204 +70;BBC News Europe;318-12600-17130 71;Al Jazeera English HD;318-13100-7306 72;TRT World HD;318-15300-803 -73;NHK WORLD JAPAN;318-900-533 -74;FREEDOM;318-12100-16924 +73;NHK WORLD-JAPAN;318-900-533 +74;UATV;318-12100-16924 75;France 24 HD (en Francais);318-15300-807 -76;Nickelodeon Ukraine Kids Pluto Channel;318-6500-17 +76;Dim TV;318-12100-16950 77;Al Jazeera HD;318-9300-1601 -78;Espreso TV;318-12100-16949 79;Sonlife;318-8100-14809 81;CNBC HD;64511-6700-7245 82;Bloomberg European TV;318-13100-7302 -83;i24News HD English;318-15700-1310 -84;i24News HD French;318-15700-1309 85;DW English HD;318-5000-13101 86;Euronews English HD;318-15300-801 -87;CGTN HD;318-15400-872 -88;CGTN Documentary HD;318-15400-873 -89;Senato;318-12400-8520 +87;CGTN;318-15400-872 +88;CGTN Documentary;318-15400-873 +89;Senato (HD);318-5200-3408 90;Camera Deputati;318-12400-8519 -91;KBS HD;318-5000-13104 -92;CCTV-4 HD;318-15400-871 +91;KBS WORLD HD;318-13300-4901 +92;CCTV 4E;318-15400-871 93;SMTv San Marino HD;318-7200-7254 -100;tivùlink;318-12400-8517 -132;QVC;318-7000-780 -177;Al Jazeera;318-7000-708 187;CGTN;318-12600-1706 -192;CCTV 4;318-7200-7224 202;Rai Radio 2 Visual;318-12400-8512 210;Rai 4K;318-5200-3407 -211;Nasa TV UHD;318-11100-4602 +214;DAZN 1;190-6000-801 +215;DAZN 2;190-6000-802 220;Museum 4K;318-11100-4604 -222;MyZenTV 4K;318-11100-4605 -225;TRAVELXP 4K;318-11100-4603 -230;HotBird 4K1;318-9200-1209 -289;FTVUHD.COM;318-8400-3012 +222;MyZen 4K;318-11100-4605 +225;TravelXP 4K;318-11100-4603 +230;HotBird 4K1;318-4200-1209 +250;Padel TV;318-200-107 +251;GINX;318-200-100 301;Rai 3 TGR Valle d'Aosta;318-12500-17744 302;Rai 3 TGR Piemonte;318-12500-17739 303;Rai 3 TGR Liguria;318-12500-17735 @@ -108,9 +100,9 @@ 305;Rai 3 TGR Veneto;318-12500-17742 306;Rai 3 TGR Trentino Alto Adige Bolzano;318-12500-17752 307;Rai 3 TGR Trentino Alto Adige Trento;318-12500-17751 -308;Rai 3 TGR Südtirol;318-12500-17743 +308;Rai 3 TGR Sudtirol HD;318-12500-17743 309;Rai 3 TGR Friuli Venezia Giulia;318-12500-17749 -310;Rai 3 TGR Furlanija Julijska Krajina;318-12500-17750 +310;Rai 3 TGR Furlanija Krajina;318-12500-17750 311;Rai 3 TGR Emilia-Romagna;318-12500-17741 312;Rai 3 TGR Toscana;318-12500-17736 313;Rai 3 TGR Marche;318-12500-17738 @@ -124,112 +116,69 @@ 321;Rai 3 TGR Calabria;318-12500-17733 322;Rai 3 TGR Sardegna;318-12500-17745 323;Rai 3 TGR Sicilia;318-12500-17734 -411;La C Sat;318-15700-1329 -412;TELERADIOPACE;319-1400-5 -420;People TV-Rete 7;318-15700-1328 +412;Teleradiopace TV (Sat);318-9000-9023 +420;People TV;318-15700-1328 422;Telecupole;318-13300-4994 444;Horse TV HD;318-12100-16942 445;Padre Pio Tv;318-15800-16952 454;Parole di Vita;318-900-510 -462;byoblu;318-12100-16948 -518;ER24;318-15700-1333 +462;ByoBlu;318-12100-16948 +500;tivù la guida;318-12400-8523 519;TRM h24;318-15800-16922 601;Rai Radio 1;318-5200-3441 602;Rai Radio 2;318-5200-3442 603;Rai Radio 3;318-5200-3443 -604;Rai Isoradio;318-5200-3446 -605;Rai GR Parlamento;318-5200-3445 -606;Rai Radio1 Sport;318-5200-3453 -607;Rai Radio3 Classica;318-5200-3444 +604;Rai Isoradio;318-12400-8526 +605;Rai GrParlamento;318-12400-8525 +606;Rai Radio 1 Sport;318-12400-8533 +607;Rai Radio 3 Classica;318-12400-8524 608;RDS;318-7000-736 609;DimSuono Roma;318-7000-737 -610;RTL 102.5;318-7200-3642 -611;RADIO ZETA ITALIANA;318-7200-3643 -612;Radio Freccia;318-7200-3630 -613;RADIO GAMMA STEREO;318-13300-4955 -614;Radio Dimensione Stereo;318-13300-4965 +610;RTL 1025;318-7200-3642 +611;RADIO ZETA;318-7200-3643 +612;RADIO FRECCIA;318-7200-3630 +613;Radio Gamma Stereo;318-13300-4955 615;Radio 105;190-6000-105 -616;VIRGIN RADIO;190-6000-104 -617;R101;190-6000-101 +616;Virgin radio;190-6000-104 +617;Radio R101;190-6000-101 618;Radio Monte Carlo;190-6000-102 -620;RADIO ITALIA s.m.i.;318-7200-3632 +619;Rai Radio Südtirol;318-12400-8535 +620;RADIO ITALIA smi;318-7200-3632 621;M DUE O;318-7200-3653 622;CAPITAL;318-7200-3652 623;DEEJAY;318-7200-3651 624;Radio 24;318-7200-3644 -625;DISCORADIO;318-7000-768 -626;R.ONDA D'URTO;318-7200-3645 +625;Discoradio;318-7000-768 +626;RONDA D'URTO;318-7200-3645 627;ANNI 60;318-7000-738 628;Radio Sintony;318-13300-4953 629;Radio Supersound;318-13300-4954 630;Radio Margherita;318-13300-4957 631;Radio Number One;318-15800-16981 -632;Radio Radio;318-13300-4949 633;Radio Maria;318-7000-732 -634;Radio Mater;318-7200-7280 +634;RADIO MATER;318-7200-7280 635;popolare;318-7200-3656 -636;No Name Radio;318-5200-3450 -637;Rai Radio Tutta Italiana;318-5200-3451 -638;Rai Radio Techete';318-5200-3447 -639;Rai Radio Kids;318-5200-3449 -640;Rai Radio Live;318-5200-3448 -641;L’Ora della Venezia Giulia;318-5200-3452 -642;Rai Radio Slovenia;318-5200-3454 +636;No Name Radio;318-12400-8530 +637;Rai Radio Tutta Italiana;318-12400-8531 +638;Rai Radio Techete';318-12400-8527 +639;Rai Radio Kids;318-12400-8529 +640;Rai Radio Live Napoli;318-12400-8528 +641;Rai Radio 1 L'Ora della Venezia Giulia;318-12400-8532 +642;Rai Radio Trst A;318-12400-8534 643;Radio Kiss Kiss;318-7000-742 644;Radio Sportiva;318-7200-3637 645;RVS-Accendi la Speranza;318-15700-1330 +646;Canzoni Napoletane;318-15800-16982 656;RFI Francais;318-5000-13130 661;Swiss Pop;318-12300-17235 662;Swiss Jazz;318-12300-17236 663;Swiss Classica;318-12300-17247 -667;DW02;318-5000-13124 -669;DW08;318-5000-13121 -670;DW09;318-5000-13122 +667;DW-FM02;318-5000-13124 +669;DW08;318-5000-1321 +670;DW09;318-5000-1322 701;UNINETTUNO UNIVERSITY TV;318-12500-17718 -809;PACI CONTEMPORARY;318-9000-9014 -813;NUOVA TV NAZIONALE;318-9000-9015 -815;Vatican Media Europa HD;318-8900-2004 +815;Vatican Media Europa;318-8900-2004 819;VIDEOLINA;318-15800-16992 832;TVA Vicenza;318-15800-16988 863;Arte Atelier;318-15800-16964 -868;Arte Investimenti;318-13300-4993 -882;Eursat;318-15800-16996 -903;Antichita Chiossone;318-15800-16965 -905;BIKE;64511-6900-4102 -906;Canale Italia;318-13300-4964 -907;Canale Italia 2;318-13300-4966 -908;Canale Italia 83;318-13300-4961 -909;Canale Italia 84;318-13300-4962 -910;Class TV Moda;318-12100-16941 -911;Deluxe 139;318-9000-9008 -912;DimSuono Soft MI;318-7000-766 -913;DimSuono Soft RM;318-7000-767 -914;EURSAT;318-15800-16996 -915;Explorer HD Channel;64511-6900-13534 -917;InBlu;64511-6700-11131 -918;INBLU2000;64511-6700-11174 -919;Italian Fishing TV;318-9300-1602 -920;Pop Economy;318-9300-1619 -921;R. Eurospin;318-7000-749 -922;Radio Cusano Campus;318-13300-4958 -923;Radio Iglesias;318-7200-3654 -924;Radio PadrePio;318-7000-744 -925;Radio RADICALE;318-7000-761 -926;Radio Vaticana Europa;64511-6900-11181 -927;RADIONORBA TV;318-15700-1311 -928;RDS Relax;318-15800-16978 -929;Rete Due;318-12300-17232 -930;Rete Tre;318-12300-17233 -931;Rete Uno;318-12300-17231 -933;SMTv San Marino Radio;318-7200-7255 -934;TG NORBA 24;318-7200-7283 -935;The Map Report TV;318-15700-1331 -936;TLC Telecampione;318-13300-4970 -937;MS CHANNEL;318-9300-1614 -938;MS MOTOR TV;318-9300-1606 -939;Radio Radio TV;318-13300-4948 -940;Yes TV;318-15700-1312 -941;WellTV;318-900-503 -942;TCI;318-8000-3203 -943;RADIO SUBASIO;190-6000-106 -944;R.BuonConsiglio;318-7200-7282 +868;Arte Investimenti;318-13300-4993 \ No newline at end of file diff --git a/source/ChanSort/app.config b/source/ChanSort/app.config index 6a1e160..f2605e6 100644 --- a/source/ChanSort/app.config +++ b/source/ChanSort/app.config @@ -67,7 +67,7 @@ - + diff --git a/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dtv-cmdb-3.h b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dtv-cmdb-3.h new file mode 100644 index 0000000..fe94fc8 --- /dev/null +++ b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dtv-cmdb-3.h @@ -0,0 +1,151 @@ +#include "chansort.h" +#pragma script("get_doc_size.js") + +/* +structure definition for various variants of MStar (aka MorningStar) DVB-C and DVB-S receiver channel list formats. +Also used by various models from brands like AEG, Akiwa, Auvisio, Boca, Botech, Comag, Dyon, LogiSat, Kjaerulff, Micro, Megasat, Schwaiger, SeaSat, Strong, TechniSat, TeleSystem, Trekstor, Xoro, Zehnder, ... +Typical file names include: vodafone.DBM, HB_DATABASE_6_29.DBM, MAS_HRS8520_23_08_2011.DBM, ... +*/ + +struct s_Satellite +{ + var off0 = current_offset; + word u; + byte Name[34]; + word LowFreq; + word HighFreq; + var off1 = current_offset; + byte u1[50 - (off1 - off0)]; + word OrbitalPos; + + var off1 = current_offset; + byte unk[satRecordLengthTail - (off1 - off0)]; +}; + +struct s_Transponder +{ + var off0 = current_offset; + byte SatIndex; + byte unk1[5]; + word Tsid; + word Onid; + word Nid; + byte u[2]; + word transponderIndex; + word FreqInMhz; + byte unk2[10]; + word SymRate; + var off1 = current_offset; + byte unk[transponderRecordLength - (off1 - off0)]; +}; + +enum e_Favorites : byte +{ + A=0x01, + B=0x04, + C=0x08, + D=0x10 +}; + +enum e_Flags : byte +{ + Encrypted=0x10, + Skip=0x20, + Lock=0x40 +}; + +enum e_ServiceType : byte +{ + TV=1, + Radio=2 +}; + +struct s_Channel +{ + var off0 = current_offset; + word Index; + byte u0[13]; + //e_Flags Flags; + //byte u1; + + byte ChannelType; + byte ServiceType; + + byte u1[3]; + word TransponderIndex; + word PmtPid; + word u2; + word PcrPid; + word VideoPid; + word u3; + word ProgNr; + word ServiceId; + byte u4[14]; + char AudioLang1[4]; + word AudioPid1; + char AudioLang2[4]; + word AudioPid2; + byte u90[84]; + char Name[50]; + char Provider[224]; + + var off1 = current_offset; + byte unk[channelRecordLength - (off1-off0)]; +}; + + +public struct dtv_cmdb_3_unified +{ + var headerLength = 0; + var satBitmapLength = 0; + var satRecordCount = 0; + var satRecordLength = 0; + var networkData = 0; + var channelBitmapLength = 0; + var channelRecordCount = 0; + var channelRecordLength = 0; + var channelBlockUnknownLength = 0; + var transponderBitmapLength = 0; + var transponderRecordCount = 0; + var transponderRecordLength = 0; + + switch (GetDocumentSize()) + { + case 1299920: + // Grundig 22 VLE 8120 WG + headerLength = 8; + satBitmapLength = 4; + channelBitmapLength = 750; + satRecordCount = 24; + satRecordLength = 60; + networkDataLength = 254 * 54; + transponderBitmapLength = 0; + transponderRecordCount = 3200; + transponderRecordLength = 44; + channelRecordCount = 6000; + channelRecordLength = 192; + channelBlockUnknownLength = 0; + break; + + default: + $assert(false, "Structure for this file size is not supported"); + break; + } + + byte Header[headerLength]; + + byte SatelliteBitmap[satBitmapLength]; + byte ChannelBitmap[channelBitmapLength]; + byte unk[2]; + s_Satellite SatelliteData[satRecordCount]; + byte NetworkData[networkDataLength]; + + byte TransponderBitmap[transponderBitmapLength]; + s_Transponder TransponderData[transponderRecordCount]; + + s_Channel ChannelData[channelRecordCount]; + //byte ChannelBlockUnknown[channelBlockUnknownLength]; + + byte Extra[*]; +}; + diff --git a/source/Solution.props b/source/Solution.props index 9f3bdb7..a3762f6 100644 --- a/source/Solution.props +++ b/source/Solution.props @@ -2,4 +2,12 @@ true + + + + + + + + \ No newline at end of file diff --git a/source/Spike.LgWebOs5/App.config b/source/Spike.LgWebOs5/App.config index d950ab4..a151f14 100644 --- a/source/Spike.LgWebOs5/App.config +++ b/source/Spike.LgWebOs5/App.config @@ -7,11 +7,11 @@ - + - + diff --git a/source/Test.Api/Test.Api.csproj b/source/Test.Api/Test.Api.csproj index 7ce2f41..40a3fe1 100644 --- a/source/Test.Api/Test.Api.csproj +++ b/source/Test.Api/Test.Api.csproj @@ -17,8 +17,13 @@ - - + + + + + + + \ No newline at end of file diff --git a/source/Test.Api/app.config b/source/Test.Api/app.config deleted file mode 100644 index a1e2bff..0000000 --- a/source/Test.Api/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.CmdbBin/Test.Loader.CmdbBin.csproj b/source/Test.Loader.CmdbBin/Test.Loader.CmdbBin.csproj index 58264da..c340232 100644 --- a/source/Test.Loader.CmdbBin/Test.Loader.CmdbBin.csproj +++ b/source/Test.Loader.CmdbBin/Test.Loader.CmdbBin.csproj @@ -5,8 +5,8 @@ - - + + diff --git a/source/Test.Loader.CmdbBin/app.config b/source/Test.Loader.CmdbBin/app.config deleted file mode 100644 index a1e2bff..0000000 --- a/source/Test.Loader.CmdbBin/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Enigma2/Test.Loader.Enigma2.csproj b/source/Test.Loader.Enigma2/Test.Loader.Enigma2.csproj index 5265e03..f5b85db 100644 --- a/source/Test.Loader.Enigma2/Test.Loader.Enigma2.csproj +++ b/source/Test.Loader.Enigma2/Test.Loader.Enigma2.csproj @@ -18,8 +18,8 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.Enigma2/app.config b/source/Test.Loader.Enigma2/app.config deleted file mode 100644 index edf754c..0000000 --- a/source/Test.Loader.Enigma2/app.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Grundig/Test.Loader.Grundig.csproj b/source/Test.Loader.Grundig/Test.Loader.Grundig.csproj index 53dd00d..699a121 100644 --- a/source/Test.Loader.Grundig/Test.Loader.Grundig.csproj +++ b/source/Test.Loader.Grundig/Test.Loader.Grundig.csproj @@ -18,8 +18,8 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.Grundig/app.config b/source/Test.Loader.Grundig/app.config deleted file mode 100644 index edf754c..0000000 --- a/source/Test.Loader.Grundig/app.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj b/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj index 20516ad..6ae9c6c 100644 --- a/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj +++ b/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/source/Test.Loader.Hisense/app.config b/source/Test.Loader.Hisense/app.config deleted file mode 100644 index a1e2bff..0000000 --- a/source/Test.Loader.Hisense/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.LG/Test.Loader.LG.csproj b/source/Test.Loader.LG/Test.Loader.LG.csproj index 326441f..ce182f6 100644 --- a/source/Test.Loader.LG/Test.Loader.LG.csproj +++ b/source/Test.Loader.LG/Test.Loader.LG.csproj @@ -35,8 +35,8 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.LG/app.config b/source/Test.Loader.LG/app.config deleted file mode 100644 index 75c0adb..0000000 --- a/source/Test.Loader.LG/app.config +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/Test.Loader.M3u/Test.Loader.M3u.csproj b/source/Test.Loader.M3u/Test.Loader.M3u.csproj index 6169987..7d63787 100644 --- a/source/Test.Loader.M3u/Test.Loader.M3u.csproj +++ b/source/Test.Loader.M3u/Test.Loader.M3u.csproj @@ -26,8 +26,8 @@ - - + + diff --git a/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj b/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj index 5ae253e..fa532a8 100644 --- a/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj +++ b/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/source/Test.Loader.Panasonic/app.config b/source/Test.Loader.Panasonic/app.config deleted file mode 100644 index a1e2bff..0000000 --- a/source/Test.Loader.Panasonic/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Philips/Test.Loader.Philips.csproj b/source/Test.Loader.Philips/Test.Loader.Philips.csproj index 329307a..8e3c020 100644 --- a/source/Test.Loader.Philips/Test.Loader.Philips.csproj +++ b/source/Test.Loader.Philips/Test.Loader.Philips.csproj @@ -205,8 +205,8 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.Philips/app.config b/source/Test.Loader.Philips/app.config deleted file mode 100644 index a1e2bff..0000000 --- a/source/Test.Loader.Philips/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj b/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj index 84b7f37..dd6c529 100644 --- a/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj +++ b/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj @@ -21,8 +21,8 @@ - - + + diff --git a/source/Test.Loader.Samsung/app.config b/source/Test.Loader.Samsung/app.config deleted file mode 100644 index a1e2bff..0000000 --- a/source/Test.Loader.Samsung/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.SatcoDX/Test.Loader.SatcoDX.csproj b/source/Test.Loader.SatcoDX/Test.Loader.SatcoDX.csproj index ae17a1b..1501622 100644 --- a/source/Test.Loader.SatcoDX/Test.Loader.SatcoDX.csproj +++ b/source/Test.Loader.SatcoDX/Test.Loader.SatcoDX.csproj @@ -21,8 +21,8 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.SatcoDX/app.config b/source/Test.Loader.SatcoDX/app.config deleted file mode 100644 index edf754c..0000000 --- a/source/Test.Loader.SatcoDX/app.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Sharp/Test.Loader.Sharp.csproj b/source/Test.Loader.Sharp/Test.Loader.Sharp.csproj index 67b248e..0526343 100644 --- a/source/Test.Loader.Sharp/Test.Loader.Sharp.csproj +++ b/source/Test.Loader.Sharp/Test.Loader.Sharp.csproj @@ -18,7 +18,7 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.Sharp/app.config b/source/Test.Loader.Sharp/app.config deleted file mode 100644 index e20e148..0000000 --- a/source/Test.Loader.Sharp/app.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Sony/Test.Loader.Sony.csproj b/source/Test.Loader.Sony/Test.Loader.Sony.csproj index a67d568..7db7bb0 100644 --- a/source/Test.Loader.Sony/Test.Loader.Sony.csproj +++ b/source/Test.Loader.Sony/Test.Loader.Sony.csproj @@ -17,8 +17,8 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.Sony/app.config b/source/Test.Loader.Sony/app.config deleted file mode 100644 index edf754c..0000000 --- a/source/Test.Loader.Sony/app.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj b/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj index 3595c88..87d6d0f 100644 --- a/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj +++ b/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj @@ -21,8 +21,8 @@ - - + + diff --git a/source/Test.Loader.Toshiba/app.config b/source/Test.Loader.Toshiba/app.config deleted file mode 100644 index a590956..0000000 --- a/source/Test.Loader.Toshiba/app.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader.VDR/Test.Loader.VDR.csproj b/source/Test.Loader.VDR/Test.Loader.VDR.csproj index 6436c8c..3bf66d5 100644 --- a/source/Test.Loader.VDR/Test.Loader.VDR.csproj +++ b/source/Test.Loader.VDR/Test.Loader.VDR.csproj @@ -22,8 +22,8 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader.VDR/app.config b/source/Test.Loader.VDR/app.config deleted file mode 100644 index edf754c..0000000 --- a/source/Test.Loader.VDR/app.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/Test.Loader/Test.Loader.csproj b/source/Test.Loader/Test.Loader.csproj index 6304f21..c187d65 100644 --- a/source/Test.Loader/Test.Loader.csproj +++ b/source/Test.Loader/Test.Loader.csproj @@ -24,7 +24,7 @@ - - + + \ No newline at end of file diff --git a/source/Test.Loader/app.config b/source/Test.Loader/app.config index e20e148..acf05af 100644 --- a/source/Test.Loader/app.config +++ b/source/Test.Loader/app.config @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + diff --git a/source/Test.Loader.M3u/app.config b/source/app.config similarity index 90% rename from source/Test.Loader.M3u/app.config rename to source/app.config index edf754c..3210b6f 100644 --- a/source/Test.Loader.M3u/app.config +++ b/source/app.config @@ -4,8 +4,13 @@ - + + + + + + @@ -22,10 +27,7 @@ - - - - + \ No newline at end of file diff --git a/source/changelog.md b/source/changelog.md index f88a3e3..77ae1b5 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,6 +1,18 @@ ChanSort Change Log =================== +2025-01-11 +- added support for Philips PFL9715K/02 (Repair\\s2channellib\\\*.dat channel list format version 0.1) +- added support for Grundig dtv\_cmdb\_3.bin channel lists with size of 1270 KB +- fixed saving of Grundig dtv\_cmdb\_3.bin channel lists with size of 1293 KB +- updated tivusat reference list +- fixed issue when saving \*cmdb\_\*.bin channel lists after applying a reference list which contains channels + that don't exist in the \*cmdb\_\*.bin + +2024-10-28 +- HB\_DATABASE\_mm\_dd.DBM for Strong SRT 7007: added option "reorderPhysically" in ChanSort.Loader.DBM.ini + for this particular format to not only change the number but also change the order or data records in the file + 2024-10-15 - Philips formats 120-125: opening the "MtkChannelList.xml" file will now load/save the whole Philips channel list instead of only loading the data from that particular file. diff --git a/source/fileformats.md b/source/fileformats.md index 40c5c39..0abda6c 100644 --- a/source/fileformats.md +++ b/source/fileformats.md @@ -39,11 +39,11 @@ Always select "none / other / all" and never your cable TV provider or something - Android-TVs: "sdb.xml" files using format "FormateVer" 1.1.0 - KDL 2012/2014: "sdb.xml" files using "FormatVer" 1.0.0, 1.1.0 and 1.2.0 -Hisense +Hisense / Loewe --- - Some older models like LTDN40D50TS use the same .csv files as Sharp. See [Sharp](#sharp) for instructions. - 2016 "Smart" models with a channel.db file, i.e. H65M5500 -- 2017 models with a servicelist.db file +- Hisense 2017 and Loewe models with a servicelist.db file - models exporting a HIS_DVB.BIN file - models exporting a set of HIS\_FAV.BIN, HIS\_SVL.BIN and HIS\_TSL.BIN files