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