diff --git a/readme_pl.md b/readme_pl.md
new file mode 100644
index 0000000..1ab79fc
--- /dev/null
+++ b/readme_pl.md
@@ -0,0 +1,99 @@
+Linki
+-----
+[](https://github.com/PredatH0r/ChanSort/blob/master/readme.md)
+[](https://github.com/PredatH0r/ChanSort/blob/master/readme_de.md)
+[](https://github.com/PredatH0r/ChanSort/blob/master/readme_tr-TR.md) |
+[Pobierz](https://github.com/PredatH0r/ChanSort/releases) |
+[Dokumentacja](https://github.com/PredatH0r/ChanSort/wiki) |
+[Forum](https://github.com/PredatH0r/ChanSort/issues) |
+[E-Mail](mailto:horst@beham.biz)
+
+O ChanSort
+--------------
+ChanSort to aplikacja na komputery PC, która umożliwia zmianę kolejności listy kanałów w telewizorze.
+Większość nowoczesnych telewizorów może przesyłać listy kanałów za pomocą pamięci USB, którą można podłączyć do komputera.
+ChanSort obsługuje [formaty plików wielu marek] (#obsługiwane modele telewizorów) i może kopiować numery programów i
+ulubione z jednego pliku do drugiego, nawet między różnymi modelami i markami.
+
+
+
+Cechy
+--------
+- Zmiana kolejności kanałów (bezpośrednia zmiana numerów, przesuwanie w górę/w dół, przeciąganie i upuszczanie, podwójne kliknięcie)
+- Użyj innej listy kanałów jako odniesienia, aby zastosować tę samą kolejność
+- Wielokrotny wybór do edycji wielu kanałów jednocześnie
+- Widok pojedynczej listy (pokazuje najpierw przypisane kanały, a następnie wszystkie nieprzypisane kanały)
+- Widok obok siebie nowej/posortowanej listy i oryginalnej/pełnej listy (podobny do listy odtwarzania i biblioteki)
+- Zmień nazwę lub usuń kanały
+- Zarządzaj ulubionymi, blokadą rodzicielską, pomijaniem kanałów (podczas zappingu), ukrywaniem kanałów
+- Interfejs użytkownika w języku angielskim, niemieckim, hiszpańskim, tureckim, portugalskim, rosyjskim i rumuńskim
+- Obsługa znaków Unicode dla nazw kanałów (łaciński, cyrylica, grecki, ...)
+
+Nieobsługiwany:
+- dodawanie nowych transponderów lub kanałów
+- zmiana właściwości kanałów związanych z tunerem (ONID, TSID, SID, częstotliwość, APID, VPID, ...)
+
+Niektóre funkcje mogą nie być dostępne we wszystkich modelach telewizorów i typach kanałów (analogowe, cyfrowe, satelitarne, kablowe, ...)
+
+! UŻYWASZ NA WŁASNE RYZYKO!
+------------------------
+Większość tego oprogramowania została napisana bez wsparcia producentów telewizorów lub dostępu do jakiegokolwiek urzędnika
+dokumentacja dotycząca formatów plików. Opiera się wyłącznie na analizie istniejących plików danych, próbach i błędach.
+Istnieje prawdopodobieństwo wystąpienia niepożądanych skutków ubocznych lub nawet uszkodzenia telewizora, co odnotowano w 2 przypadkach.
+
+Hisense jest jedynym producentem, który dostarczył informacje techniczne i urządzenie testowe.
+
+Obsługiwane modele telewizorów
+-------------------
+ChanSort obsługuje dużą liczbę formatów plików, ale nie można określić dla każdej marki i modelu telewizora
+jaki format pliku używa (może się nawet zmienić wraz z aktualizacjami oprogramowania układowego).
+Ta lista zawiera kilka przykładów tego, co powinno być obsługiwane, ale nawet jeśli Twojego modelu lub marki nie ma na tej liście,
+to może i tak zadziałać:
+- [Samsung](source/fileformats.md#samsung)
+- [LG](source/fileformats.md#lg)
+- [Sony](source/fileformats.md#sony)
+- [Hisense](source/fileformats.md#hisense)
+- [Panasonic](source/fileformats.md#panasonic)
+- [Philips](source/fileformats.md#philips)
+- [Sharp, Dyon, Blaupunkt, Hisense, Changhong, Grundig, alphatronics, JTC Genesis, ...](source/fileformats.md#sharp)
+- [Toshiba](source/fileformats.md#toshiba)
+- [Grundig](source/fileformats.md#grundig)
+- [SatcoDX: ITT, Medion, Nabo, ok., PEAQ, Schaub-Lorenz, Silva-Schneider, Telefunken, ...](source/fileformats.md#satcodx)
+- [VDR](source/fileformats.md#vdr)
+- [SAT>IP m3u](source/fileformats.md#m3u)
+- [Enigma2](source/fileformats.md#enigma2)
+
+Wymagania systemowe
+-------------------
+**Windows**:
+- Windows 7 SP1, Windows 8.1, Windows 10 v1606 or later, Windows 11 (with x86, x64 or ARM CPU)
+- [Microsoft .NET Framework 4.8](https://dotnet.microsoft.com/download/dotnet-framework)
+- The .NET FW 4.8 does NOT work with Windows 7 without SP1, Windows 8 or Windows 10 prior to v1606
+
+**Linux**:
+- wino (sudo apt-get install wine)
+- winetricki (sudo apt-get install winetrics)
+- uruchom winetricki, wybierz lub utwórz prefiks wina (32-bitowy lub 64-bitowy), wybierz
+ "Zainstaluj Windows DLL lub komponent" i zainstaluj pakiet "dotnet48" i zignoruj dziesiątki okienek komunikatów- right-click on ChanSort.exe and select "open with", "all applications", "A wine application"
+
+**Sprzęt komputerowy**:
+- Pamięć USB/karta SD do przesyłania listy kanałów między telewizorem a komputerem. Pendrive <= 32 GB z systemem plików FAT32
+ jest ZDECYDOWANIE zalecane. (Niektóre telewizory zapisują śmieci do NTFS i w ogóle nie obsługują exFAT)
+
+Zbudowany na źródle
+-----------------
+See [build.md](source/build.md)
+
+Licencja (GPLv3)
+---------------
+Powszechna Licencja Publiczna GNU, wersja 3: http://www.gnu.org/licenses/gpl.html
+Kod źródłowy jest dostępny na https://github.com/PredatH0r/ChanSort
+
+OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI,
+WYRAŹNE LUB DOROZUMIANE, W TYM MIĘDZY INNYMI GWARANCJE
+SPRZEDAWALNOŚĆ, PRZYDATNOŚĆ DO OKREŚLONEGO CELU I NIENARUSZALNOŚCI.
+
+W ŻADNYM WYPADKU AUTORZY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB
+INNA ODPOWIEDZIALNOŚĆ UMOWA, CZYNOWA LUB W INNY SPOSÓB,
+WYNIKAJĄCE Z, Z LUB W ZWIĄZKU Z OPROGRAMOWANIEM LUB UŻYTKOWANIEM LUB
+INNE CZYNNOŚCI W OPROGRAMOWANIU.
diff --git a/source/ChanSort.Loader.LG/Resource.pl.resx b/source/ChanSort.Loader.LG/Resource.pl.resx
index 42fc7ba..f11a8ad 100644
--- a/source/ChanSort.Loader.LG/Resource.pl.resx
+++ b/source/ChanSort.Loader.LG/Resource.pl.resx
@@ -142,4 +142,29 @@ Starsze oprogramowanie LG dla modeli telewizorów opartych na webOS nie obsługu
Anuluj
+
+ Pusta lista
+
+
+ Plik z listą kanałów nie zawiera kanałów.
+
+
+ !!! UWAGA !!!
+
+Listy kanałów LG można zaimportować z powrotem do telewizora TYLKO, jeśli podczas wyszukiwania kanałów w telewizorze wybrano specjalne opcje:
+- Dostawca: MUSI być żaden/inny (NIE wybieraj dostawcy telewizji kablowej ani Astry 19.2E)
+- Blindscan: MUSI być wybrany
+- Wyszukiwanie sieci: opcjonalne (można wybrać)
+
+Telewizor nie przetworzy listy poprawnie, jeśli te kroki nie zostaną wykonane!
+
+
+ Przeczytaj informacje o obsłudze webOS 5 na github.com
+
+
+ Szukałem kanałów jak opisano powyżej
+
+
+ Proces ładowania został anulowany
+
\ No newline at end of file
diff --git a/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.ini b/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.ini
index 3ae0440..0b57f02 100644
--- a/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.ini
+++ b/source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.ini
@@ -17,94 +17,49 @@
; ---------------------------------------------
; mappings that are the same for all format variants
+[flash_db]
+reorderRecordsByChannelNumber=true
+allowEdit=false
+
[mgr_chan_s_fta.db]
lenHeader=64
lenFooter=12
offFooterChecksum=8
-reorderRecordsByChannelNumber=false
-allowEdit=false
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels + radioChannels)
numTvChannels=0x2C
numRadioChannels=0x30
channelBlockSize=0x3C
-[mgr_chan_s_fta.db_entry]
-offProgNr=0
-offFav=16
-offName=20
-lenName=200
-offFreq=444,468
-offSymbolRate=450
-offOldProgNr=452
-offRecordIndex=456
-offTsid=460
-offSid=464
-offOnid=466
-
[mgr_chan_s_pkg.db]
lenHeader=64
lenFooter=12
offFooterChecksum=8
-reorderRecordsByChannelNumber=false
-allowEdit=false
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels+radioChannels)
numTvChannels=0x2C
numRadioChannels=0x30
channelBlockSize=0x3C
-[mgr_chan_s_pkg.db_entry]
-offProgNr=0
-offFav=16
-offName=20
-lenName=200
-offFreq=444,468
-offSymbolRate=450
-offOldProgNr=452
-offRecordIndex=456
-offTsid=460
-offSid=464
-offOnid=466
-
[mgr_chan_dvbt.db]
lenHeader=64
lenEntry=472
lenFooter=12
offFooterChecksum=8
-reorderRecordsByChannelNumber=false
-allowEdit=false
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels + radioChannels)
numTvChannels=0x2C
numRadioChannels=0x30
channelBlockSize=0x3C
-[mgr_chan_dvbt.db_entry]
-offProgNr=0
-offFav=16
-offName=20
-lenName=200
-offProvider=224
-lenProvider=200
-offFreq=440
-offOldProgNr=448
-offRecordIndex=456
-offTsid=460
-offSymbolRate=462
-offSid=464
-offOnid=466
-
[mgr_chan_dvbc.db]
lenHeader=64
lenEntry=472
lenFooter=12
offFooterChecksum=8
-reorderRecordsByChannelNumber=false
-allowEdit=false
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels + radioChannels)
numTvChannels=0x2C
numRadioChannels=0x30
channelBlockSize=0x3C
-[mgr_chan_dvbc.db_entry]
+[mgr.db_entry:472]
offProgNr=0
offFav=16
offName=20
@@ -119,6 +74,33 @@ offSymbolRate=462
offSid=464
offOnid=466
+[mgr.db_entry:476]
+offProgNr=0
+offFav=16
+offName=20
+lenName=200
+offFreq=444,468
+offSymbolRate=450
+offOldProgNr=452
+offRecordIndex=456
+offTsid=460
+offSid=464
+offOnid=466
+
+[mgr.db_entry:480]
+offProgNr=0
+offFav=16
+offName=20
+lenName=200
+offFreq=444,468
+offSymbolRate=450
+offOldProgNr=452
+offRecordIndex=456
+offTsid=460
+offSid=464
+offOnid=466
+
+
; ---------------------------------------------
; variant with 476 bytes per entry in mgr_chan_s_fta.db
diff --git a/source/ChanSort.Loader.Philips/DbSerializer.cs b/source/ChanSort.Loader.Philips/DbSerializer.cs
index 5bab130..c97b888 100644
--- a/source/ChanSort.Loader.Philips/DbSerializer.cs
+++ b/source/ChanSort.Loader.Philips/DbSerializer.cs
@@ -38,12 +38,13 @@ namespace ChanSort.Loader.Philips
private readonly ChannelList dvbcChannels = new ChannelList(SignalSource.DvbT, "DVB-C");
private readonly ChannelList dvbsFtaChannels = new ChannelList(SignalSource.DvbS | SignalSource.Provider0, "DVB-S FTA");
private readonly ChannelList dvbsPkgChannels = new ChannelList(SignalSource.DvbS | SignalSource.Provider1, "DVB-S Preset");
- private readonly Dictionary dbFileByList = new();
+ private readonly Dictionary> dbFileByList = new();
private readonly Dictionary> flashFileByList = new();
private int dvbtChannelRecordLength;
private int dvbcChannelRecordLength;
private int ftaChannelRecordLength;
private int pkgChannelRecordLength;
+ private readonly bool reorderPhysically;
#region ctor()
@@ -57,6 +58,10 @@ namespace ChanSort.Loader.Philips
string iniFile = Assembly.GetExecutingAssembly().Location.Replace(".dll", ".ini");
this.ini = new IniFile(iniFile);
+ var sec = ini.GetSection("flash_db");
+ this.reorderPhysically = sec.GetBool("reorderRecordsByChannelNumber", true);
+ var allowEdit = sec.GetBool("allowEdit", false);
+
this.DataRoot.AddChannelList(dvbtChannels);
this.DataRoot.AddChannelList(dvbcChannels);
this.DataRoot.AddChannelList(dvbsFtaChannels);
@@ -82,6 +87,7 @@ namespace ChanSort.Loader.Philips
nameof(ChannelInfo.AudioPid),
nameof(ChannelInfo.ServiceTypeName)
};
+ list.ReadOnly = !allowEdit;
}
}
#endregion
@@ -132,7 +138,7 @@ namespace ChanSort.Loader.Philips
LoadFlash(file, lowercaseFileName, dvbsFtaChannels, ftaChannelRecordLength);
break;
case "flash_dtvinfo_s_pkg":
- if (!(dvbsFtaChannels.Count == 0 && dvbsPkgChannels.Count > 0))
+ if (dvbsPkgChannels.Count > 0)
LoadFlash(file, lowercaseFileName, dvbsPkgChannels, pkgChannelRecordLength);
break;
}
@@ -203,11 +209,9 @@ namespace ChanSort.Loader.Philips
throw new FileLoadException($"File {path} contains invalid checksum. Expected {expectedChecksum:x4} but calculated {actualChecksum:x4}");
channelRecordLength = lenEntry;
-
- list.ReadOnly = !sec.GetBool("allowEdit");
-
- var mapping = new DataMapping(this.ini.GetSection(sectionName + "_entry"));
- sec = ini.GetSection("mgr_chan_s_fta.db_entry");
+
+ sec = this.ini.GetSection("mgr.db_entry:" + channelRecordLength);
+ var mapping = new DataMapping(sec);
var lenName = sec.GetInt("lenName");
for (int i = 0; i < records; i++)
{
@@ -236,7 +240,7 @@ namespace ChanSort.Loader.Philips
this.DataRoot.AddChannel(list, ch);
}
- this.dbFileByList[list] = path;
+ this.dbFileByList[list] = Tuple.Create(path, channelRecordLength);
}
#endregion
@@ -459,7 +463,7 @@ namespace ChanSort.Loader.Philips
}
#endregion
- public override IEnumerable GetDataFilePaths() => this.dbFileByList.Values.Union(this.flashFileByList.Values.Select(tup => tup.Item1));
+ public override IEnumerable GetDataFilePaths() => this.dbFileByList.Values.Union(this.flashFileByList.Values).Select(tup => tup.Item1);
#region Save()
public override void Save(string tvOutputFile)
@@ -468,9 +472,10 @@ namespace ChanSort.Loader.Philips
foreach (var listAndFile in this.dbFileByList)
{
var list = listAndFile.Key;
- var file = listAndFile.Value;
+ var file = listAndFile.Value.Item1;
+ var lenEntry = listAndFile.Value.Item2;
var secName = Path.GetFileName(file).ToLowerInvariant();
- SaveDvb(file, secName, list);
+ SaveDvb(file, secName, list, lenEntry);
}
// update FLASH_* files
@@ -486,30 +491,56 @@ namespace ChanSort.Loader.Philips
#endregion
#region SaveDvb()
- private void SaveDvb(string file, string secName, ChannelList list)
+ private void SaveDvb(string file, string secName, ChannelList list, int channelRecordLength)
{
- var data = File.ReadAllBytes(file);
+ var oldData = File.ReadAllBytes(file);
var sec = ini.GetSection(secName);
- if (!GetValuesFromDvbFileHeader(sec, data, out var lenHeader, out var lenEntry, out _, out var offChecksum))
+ if (!GetValuesFromDvbFileHeader(sec, oldData, out var lenHeader, out var lenEntry, out _, out var offChecksum))
return;
- var mapping = new DataMapping(ini.GetSection(secName + "_entry"));
- foreach (var chan in list.Channels)
+ var newData = new byte[oldData.Length];
+ Array.Copy(oldData, newData, oldData.Length);
+
+ var mapping = new DataMapping(ini.GetSection("mgr.db_entry:" + channelRecordLength));
+
+ if (this.reorderPhysically)
{
- if (chan is not Channel ch)
- continue;
- mapping.SetDataPtr(data, lenHeader + (int)ch.RecordIndex * lenEntry);
- mapping.SetWord("offProgNr", ch.NewProgramNr);
- mapping.SetWord("offFav", Math.Max(0, ch.GetPosition(1)));
+ int newIndex = 0;
+ foreach (var chan in list.Channels.OrderBy(c => c.NewProgramNr).ThenBy(c => c.RecordIndex))
+ {
+ if (chan is not Channel ch)
+ continue;
+ var newOff = lenHeader + newIndex * lenEntry;
+ Array.Copy(oldData, lenHeader + (int)ch.RecordIndex * lenEntry, newData, newOff, lenEntry);
+ mapping.SetDataPtr(newData, newOff);
+ mapping.SetWord("offProgNr", ch.NewProgramNr);
+ mapping.SetWord("offFav", Math.Max(0, ch.GetPosition(1)));
+ mapping.SetWord("offOldProgNr", ch.NewProgramNr);
+ mapping.SetWord("offRecordIndex", newIndex);
+ //ch.RecordIndex = newIndex; // will be updated when saving the FLASH file
+ ++newIndex;
+ }
+ }
+ else
+ {
+ foreach (var chan in list.Channels.OrderBy(c => c.NewProgramNr).ThenBy(c => c.RecordIndex))
+ {
+ if (chan is not Channel ch)
+ continue;
+ var newOff = lenHeader + (int)ch.RecordIndex * lenEntry;
+ mapping.SetDataPtr(newData, newOff);
+ mapping.SetWord("offProgNr", ch.NewProgramNr);
+ mapping.SetWord("offFav", Math.Max(0, ch.GetPosition(1)));
+ }
}
// update checksum (only 16 bits are stored)
- var checksum = CalcChecksum(data, 0, offChecksum);
- data[offChecksum + 0] = (byte)checksum;
- data[offChecksum + 1] = (byte)(checksum >> 8);
+ var checksum = CalcChecksum(newData, 0, offChecksum);
+ newData[offChecksum + 0] = (byte)checksum;
+ newData[offChecksum + 1] = (byte)(checksum >> 8);
- File.WriteAllBytes(file, data);
+ File.WriteAllBytes(file, newData);
}
#endregion
@@ -523,6 +554,23 @@ namespace ChanSort.Loader.Philips
var sec = ini.GetSection(secName + ":" + dbChannelRecordLength, true);
var mapping = new DataMapping(sec, data);
+ // update channel index->id mapping table to match the indices in the new .db file, which is in order by the new ProgNr
+ if (this.reorderPhysically)
+ {
+ var off = sec.GetInt("offChannelTransponderTable");
+ var num = sec.GetInt("numChannelTransponderTable");
+ var oldTable = new byte[num * 4];
+ Array.Copy(data, off, oldTable, 0, oldTable.Length);
+ int i = 0;
+ foreach (var chan in list.Channels.OrderBy(c => c.NewProgramNr).ThenBy(c => c.RecordIndex))
+ {
+ if (chan is not Channel ch)
+ continue;
+ Array.Copy(oldTable, (int)ch.RecordIndex * 4, data, off + i * 4, 4);
+ ch.RecordIndex = i++;
+ }
+ }
+
// in-place update of channel data
foreach (var chan in list.Channels)
{
diff --git a/source/ChanSort.Loader.Philips/PhilipsPlugin.cs b/source/ChanSort.Loader.Philips/PhilipsPlugin.cs
index b80fa51..c2cb4fb 100644
--- a/source/ChanSort.Loader.Philips/PhilipsPlugin.cs
+++ b/source/ChanSort.Loader.Philips/PhilipsPlugin.cs
@@ -72,8 +72,10 @@ namespace ChanSort.Loader.Philips
* same as 105.0
* e.g. 65PUS8535/12, 55PUS7334/12
*
+ * version 115.0
+ * same as 110.0
*
- * Version 0.1 and 100-110 are XML based and loaded through the XmlSerializer.
+ * Version 0.1 and 100-115 are XML based and loaded through the XmlSerializer.
* Version 1.1 and 1.2 are loaded through the BinSerializer.
* Version 0.0, 11.1 and 45.1 are not supported yet.
*/
@@ -129,7 +131,7 @@ namespace ChanSort.Loader.Philips
}
}
- if (majorVersion == 0 || majorVersion >= 100 && majorVersion <= 110)
+ if (majorVersion == 0 || majorVersion >= 100 && majorVersion <= 115)
return new XmlSerializer(inputFile);
if (majorVersion == 1 || majorVersion == 30 || majorVersion == 45) // || majorVersion == 11 // format version 11 is similar to 1.x, but not (yet) supported
return new BinarySerializer(inputFile);
diff --git a/source/ChanSort.Loader.Philips/Resources.pl.resx b/source/ChanSort.Loader.Philips/Resources.pl.resx
index 41ee716..5359c2a 100644
--- a/source/ChanSort.Loader.Philips/Resources.pl.resx
+++ b/source/ChanSort.Loader.Philips/Resources.pl.resx
@@ -120,4 +120,26 @@
Anuluj
+
+ Telewizor może niepoprawnie pokazywać, że import się nie powiódł, ale można to zignorować.
+
+
+ INFORMACJE: Po zaimportowaniu listy z powrotem do telewizora odłącz go i podłącz ponownie po kilku sekundach.
+
+
+ OSTRZEŻENIE: W załadowanej liście wystąpiły błędy sum kontrolnych!
+
+Istnieją 2 sytuacje, w których może się to zdarzyć:
+
+- Wewnętrzna lista kanałów telewizora jest uszkodzona (np. po aktualizacji oprogramowania)
+ Można to rozwiązać, uruchamiając nowe skanowanie kanałów lub resetując telewizor.
+ Następnie ponownie wyeksportuj listę i otwórz ją za pomocą ChanSort.
+ Próba edycji i importu aktualnie uszkodzonego pliku może prowadzić do nieoczekiwanego zachowania telewizora.
+
+- Bad USB-Stick (złe komórki pamięci lub niezgodny format pliku)
+ Spróbuj użyć pendrive'a <= 16 GB sformatowanego w systemie FAT32 (nie NTFS ani exFAT)
+
+
+ Zignoruj błąd i mimo to edytuj listę
+
\ No newline at end of file
diff --git a/source/ChanSort.Loader.Philips/XmlSerializer.cs b/source/ChanSort.Loader.Philips/XmlSerializer.cs
index 27e6c4a..2192d09 100644
--- a/source/ChanSort.Loader.Philips/XmlSerializer.cs
+++ b/source/ChanSort.Loader.Philips/XmlSerializer.cs
@@ -41,8 +41,8 @@ namespace ChanSort.Loader.Philips
Nevertheless a user reported that swapping DVB-S channels 1 and 2 with Onka on a TV that uses this xml-only format 110 worked for him.
There seem to be 3 different flavors or the "100" format:
- One has only .xml files in the channellib and s2channellib folders, does not indent lines in the .xml files, has a fixed number of bytes for channel and satellite names (padded with 0x00) and has no "Scramble" attribute.
- And a version that has dtv_cmdb_*.bin next to the .xml files, uses 4 spaces for indentation, only writes as many bytes for names as needed and has a "Scramble" attribute.
+ One has only .xml files in the channellib and s2channellib folders, does not indent lines in the .xml files, has a fixed number of bytes for channel and satellite names (padded with 0x00), has no "Scramble" attribute and values 1 and 0 for "Polarization".
+ And a version that has dtv_cmdb_*.bin next to the .xml files, uses 4 spaces for indentation, only writes as many bytes for names as needed, has a "Scramble" attribute and uses values 1 and 2 for "Polarization".
While the first seems to work fine when XML nodes are reordered by their new programNr, the latter seems to get confused when the .bin and .xml files have different data record orders. This is still under investigation.
The Philips editor does not modify these .bin files, appends 0x00 padding to the channel names, changes indentation to 2 tabs and strips the Scramble attribute. It's likely it wasn't designed for this type of list.
@@ -89,7 +89,7 @@ namespace ChanSort.Loader.Philips
private readonly StringBuilder logMessages = new StringBuilder();
private readonly IniFile ini;
private IniFile.Section iniMapSection;
-
+ private string polarizationValueForHorizontal = "1";
#region ctor()
public XmlSerializer(string inputFile) : base(inputFile)
@@ -381,6 +381,7 @@ namespace ChanSort.Loader.Philips
{
this.iniMapSection = ini.GetSection("Map100_cmdb.bin");
this.FileFormatVersion += "/cmdb";
+ this.polarizationValueForHorizontal = "1"; // TODO validate
}
else if (File.Exists(Path.Combine(dir, "channelFile.bin")))
{
@@ -477,17 +478,13 @@ namespace ChanSort.Loader.Philips
else
chan.SignalSource |= SignalSource.Radio;
- var decoderType = data.TryGet("DecoderType");
- if (decoderType == "1")
- chan.Source = "DVB-T";
- else if (decoderType == "2")
- chan.Source = "DVB-C";
+ chan.Source = (chan.SignalSource & SignalSource.Sat) != 0 ? "DVB-S" : (chan.SignalSource & SignalSource.Cable) != 0 ? "DVB-C" : (chan.SignalSource & SignalSource.Antenna) != 0 ? "DVB-T" : "";
chan.SignalSource |= LookupData.Instance.IsRadioTvOrData(chan.ServiceType);
chan.SymbolRate = ParseInt(data.TryGet("SymbolRate"));
if (chan.SymbolRate > 100000) // DVB-S stores values in kSym, DVB-C stores it in Sym, DVB-T stores 0
chan.SymbolRate /= 1000;
if (data.TryGetValue("Polarization", out var pol))
- chan.Polarity = pol == "0" ? 'H' : 'V';
+ chan.Polarity = pol == polarizationValueForHorizontal ? 'H' : 'V';
chan.Hidden |= data.TryGet("SystemHidden") == "1";
chan.Encrypted = data.TryGet("Scramble") == "1" || data.TryGet("Scrambled") == "1"; // v100 sometimes contains a "Scramble", v105/v110 always contain "Scrambled"
diff --git a/source/ChanSort/AboutForm.cs b/source/ChanSort/AboutForm.cs
index 076ee5b..368506c 100644
--- a/source/ChanSort/AboutForm.cs
+++ b/source/ChanSort/AboutForm.cs
@@ -15,11 +15,11 @@ namespace ChanSort.Ui
@"
Ciprian Leca: Romanian translation
Istvan Krisko: Hungarian translation
-Jakub Driver: Polish translation
+JakubDriver: Polish translation
Marco Sánchez: Spanish Translation
Pavel Mizera: Czech translation
Vitor Martins Augusto: Portuguese translation
-Yaşar Tuna Zorlu: Turkish Translation
+umitseyhan75, Yaşar Tuna Zorlu: Turkish Translation
TCr82 (Github): Support for VDR's channels.conf file format
";
diff --git a/source/ChanSort/AboutForm.pl.resx b/source/ChanSort/AboutForm.pl.resx
index c189d70..bce40b0 100644
--- a/source/ChanSort/AboutForm.pl.resx
+++ b/source/ChanSort/AboutForm.pl.resx
@@ -127,10 +127,10 @@
Licencja:
- Kredyty:
+ Dziękuję:
- Blisko
+ Zamknij
O ChanSort
diff --git a/source/ChanSort/CharsetForm.pl.resx b/source/ChanSort/CharsetForm.pl.resx
index f5b46ab..dff8dac 100644
--- a/source/ChanSort/CharsetForm.pl.resx
+++ b/source/ChanSort/CharsetForm.pl.resx
@@ -124,7 +124,7 @@
Domyślny zestaw znaków dla mojego kraju
- Dobrze
+ Ok
Zestaw znaków
diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs
index da3b8ac..5c2381d 100644
--- a/source/ChanSort/MainForm.cs
+++ b/source/ChanSort/MainForm.cs
@@ -672,6 +672,7 @@ namespace ChanSort.Ui
if (this.DataRoot.ChannelLists.All(l => l.Count == 0 || l.ReadOnly))
{
this.DataRoot.ApplyCurrentProgramNumbers(); // otherwise there wouldn't be any numbers in single pane view
+ this.RefreshGrids();
return;
}
diff --git a/source/ChanSort/MainForm.cs.resx b/source/ChanSort/MainForm.cs.resx
index 51c3f37..4fb0fac 100644
--- a/source/ChanSort/MainForm.cs.resx
+++ b/source/ChanSort/MainForm.cs.resx
@@ -570,9 +570,6 @@
&Nápověda
-
- mnuInputSource
-
&Nastavení
diff --git a/source/ChanSort/MainForm.es.resx b/source/ChanSort/MainForm.es.resx
index c0eade5..7a57911 100644
--- a/source/ChanSort/MainForm.es.resx
+++ b/source/ChanSort/MainForm.es.resx
@@ -276,9 +276,6 @@
Todos los sets de caracteres
-
- UTF-8 (Unicode)
-
Set de caracteres ISO
@@ -309,9 +306,6 @@
Seleccionar fuente de entrada
-
- mnuInputSource
-
Abre un submenú para la selección de la lista de programas o favoritos. Este menú puede ser activado directamente con las teclas Mayus+F1
diff --git a/source/ChanSort/MainForm.hu.resx b/source/ChanSort/MainForm.hu.resx
index 28e886e..0aa9f85 100644
--- a/source/ChanSort/MainForm.hu.resx
+++ b/source/ChanSort/MainForm.hu.resx
@@ -285,9 +285,6 @@
Az &összes karakter készlet...
-
- UTF-8 (Unicode)
-
ISO karakter készlet
@@ -318,9 +315,6 @@
Beviteli &forrás kiválasztása
-
- mnuInputSource
-
Megnyit egy almenüt a kedvencek listájának kiválasztásához. Ez a menü közvetlenül aktiválható a Shift+F1 gombbal
@@ -672,9 +666,6 @@
Osztott nézet
-
- &Nyelv
-
Alaphelyzetbe állítás és újraindítás
diff --git a/source/ChanSort/MainForm.pl.resx b/source/ChanSort/MainForm.pl.resx
index 3d2ecc6..e5c8db5 100644
--- a/source/ChanSort/MainForm.pl.resx
+++ b/source/ChanSort/MainForm.pl.resx
@@ -133,16 +133,16 @@
Ulubione
- Zablokować
+ Zablokowane
Blokada rodzicielska
- Pominąć
+ Pominięte
- Ukryć
+ Ukryte
Usunięte
@@ -166,7 +166,7 @@
Pr#
- Sub List
+ Lista podrzędna
&Plik
@@ -175,22 +175,22 @@
&Otwórz plik danych TV...
- &Przeładować
+ &Przeładuj
- Przywracania kopii zapasowej
+ Przywracanie kopii zapasowej
Plik &informacje...
- &Zapisać
+ &Zapisz
Zapisz &jako...
- Złóż zamówienie z listy referencyjnej ...
+ Przyjmij zamówienie z szablonu…
Dodaj kanały z listy referencyjnej ...
@@ -202,16 +202,16 @@
Eksportuj listę do Excela ...
- &Wydrukować...
+ &Wydrukuj...
- &Porzucić
+ &Porzuć
Ostatnie pliki
- &Edytować
+ &Edytuj
&Dodaj kanały
@@ -268,7 +268,7 @@
Ustawienie urządzenia...
- Dane kanału oczyszczania
+ Czyszczenie danych kanału
Reorganizuj rekordy kanału i usuwaj duplikaty
@@ -283,10 +283,7 @@
&Zestaw znaków
- Wszystkie i zestawy znaków ...
-
-
- UTF-8 (Unicode)
+ Wszystkie zestawy znaków...
Zestawy znaków ISO
@@ -310,7 +307,7 @@
Sprawdź aktualizacje
- &Dostępność
+ &Łatwość dostępu
Otwiera podmenu wyboru źródła wejściowego. To menu można aktywować bezpośrednio przyciskiem F1
@@ -318,9 +315,6 @@
Wybierz i wprowadź źródło
-
- mnuInputSource
-
Otwiera podmenu dla programu wyboru listy ulubionych. To menu można aktywować bezpośrednio za pomocą klawiszy Shift + F1
@@ -364,7 +358,7 @@
&Wsparcie
- Wiki
+ github.com
Strona internetowa ChanSort...
@@ -373,7 +367,7 @@
&O ChanSort...
- Przybory
+ Narzędzia
Przejdź w górę
@@ -532,13 +526,13 @@
Ulubione
- Zablokowany
+ Zablokowane
- Pominąć
+ Pominięte
- Ukryć
+ Ukryte
Usunięte
@@ -547,7 +541,7 @@
Szyfrowane
- Szyfrowane
+ Zaszyfrowane
Identyfikator typu usługi
@@ -610,7 +604,7 @@
Uid
- Zamówienie
+ Zamówione
Źródło sygnału
@@ -658,12 +652,39 @@
Oryginalne kanały
- Panel 2
+ Panel2
- splitContainerControl1
+ podzielonaKontrolaKontenera1
Schemat kolorów...
+
+ Wyszukaj kanał
+
+
+ Podzielony widok
+
+
+ Przywróć ustawienia domyślne i uruchom ponownie
+
+
+ Resetuje wszystkie niestandardowe ustawienia i ponownie uruchamia program
+
+
+ Wyszukaj kanał według nazwy
+
+
+ Wyszukaj kanał
+
+
+ Wyszukaj kanał według nazwy
+
+
+ Ukryj/odkryj kolumny automatycznie
+
+
+ Załaduj ostatnio używaną listę po uruchomieniu
+
\ No newline at end of file
diff --git a/source/ChanSort/MainForm.resx b/source/ChanSort/MainForm.resx
index 9b5884b..6bb4a71 100644
--- a/source/ChanSort/MainForm.resx
+++ b/source/ChanSort/MainForm.resx
@@ -388,6 +388,7 @@
English
+ @Invariant
Right
@@ -413,6 +414,7 @@
Magyar
+ @Invariant
182, 5
@@ -528,6 +530,7 @@
+ @Invariant
Sor&t channels alphabetically
@@ -796,6 +799,7 @@
XL - Segoe UI 11pt
+ @Invariant
23, 23
@@ -904,6 +908,7 @@
+ @Invariant
2, 23
@@ -1159,6 +1164,7 @@
+ @Invariant
23, 23
@@ -1174,6 +1180,7 @@
&Deutsch
+ @Invariant
15
@@ -1195,6 +1202,7 @@
ру́сский
+ @Invariant
23, 23
@@ -1249,6 +1257,7 @@
+ @Invariant
DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
@@ -1372,6 +1381,7 @@
Português
+ @Invariant
btnRemoveRight
@@ -1429,12 +1439,14 @@
Türkçe
+ @Invariant
New program number
+ @Invariant
@@ -1495,6 +1507,7 @@
+ @Invariant
@@ -1761,6 +1774,7 @@
+ @Invariant
DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
@@ -1776,6 +1790,7 @@
+ @Invariant
2
@@ -2297,6 +2312,7 @@
UTF-16 Big Endian (Unicode MSB first)
+ @Invariant
System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -2372,6 +2388,7 @@
Polski
+ @Invariant
28
@@ -2423,6 +2440,7 @@
L - Segoe UI 10pt
+ @Invariant
DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
@@ -2432,6 +2450,7 @@
Česky
+ @Invariant
0, 0
@@ -2459,6 +2478,7 @@
+ @Invariant
mnuLanguage
@@ -2585,6 +2605,7 @@
+ @Invariant
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
@@ -2646,6 +2667,7 @@
\d{1,4}
+ @Invariant
Fill
@@ -2769,6 +2791,7 @@
UTF-8 (Unicode)
+ @Invariant
DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
@@ -2805,6 +2828,7 @@
+ @Invariant
DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
@@ -2979,6 +3003,7 @@
+ @Invariant
DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
@@ -3024,6 +3049,7 @@
+ @Invariant
47, 20
@@ -3294,6 +3320,7 @@
UTF-16 Little Endian (Unicode LSB first)
+ @Invariant
-1
@@ -3441,6 +3468,7 @@
S - Tahoma 8pt
+ @Invariant
miOpen
@@ -3567,6 +3595,7 @@
XXL - Segoe UI 12pt
+ @Invariant
3
@@ -3618,6 +3647,7 @@
+ @Invariant
±H
@@ -3678,6 +3708,7 @@
mnuInputSource
+ @Invariant
-1
@@ -3771,6 +3802,7 @@
&Language
+ @Invariant
True
@@ -4009,4 +4041,12 @@
308, 17
+
+
+ @Invariant
+
+
+
+ @Invariant
+
\ No newline at end of file
diff --git a/source/ChanSort/MainForm.ro.resx b/source/ChanSort/MainForm.ro.resx
index 9069654..02b26e5 100644
--- a/source/ChanSort/MainForm.ro.resx
+++ b/source/ChanSort/MainForm.ro.resx
@@ -297,9 +297,6 @@
Selectați și sursa de &intrare
-
- mnuInputSource
-
Deschide un submeniu pentru programul de selecție a listei favorite. Acest meniu poate fi activat direct cu ajutorul tastei Shift+F1
diff --git a/source/ChanSort/MainForm.ru.resx b/source/ChanSort/MainForm.ru.resx
index feb39a6..de88e15 100644
--- a/source/ChanSort/MainForm.ru.resx
+++ b/source/ChanSort/MainForm.ru.resx
@@ -469,6 +469,6 @@
Индекс пр.
- Цветовая схема...
+ Цветовая схема…
\ No newline at end of file
diff --git a/source/ChanSort/MainForm.tr.resx b/source/ChanSort/MainForm.tr.resx
index 6a78b09..963587c 100644
--- a/source/ChanSort/MainForm.tr.resx
+++ b/source/ChanSort/MainForm.tr.resx
@@ -285,9 +285,6 @@
Tüm karakter setleri…
-
- UTF-8 (Unicode)
-
ISO karakter seti
@@ -318,9 +315,6 @@
Giriş kaynağı seçin
-
- mnuInputSource
-
Favori liste seçimi için bir alt menü açar. Bu menü Shift + F1 tuşuyla doğrudan etkinleştirilebilir
@@ -664,6 +658,6 @@
bölünmüşBirimKontrolü1
- Renk uyumu...
+ Renk uyumu...+X91
\ No newline at end of file
diff --git a/source/ChanSort/Properties/Resources.pl.resx b/source/ChanSort/Properties/Resources.pl.resx
index d65b2a6..686211b 100644
--- a/source/ChanSort/Properties/Resources.pl.resx
+++ b/source/ChanSort/Properties/Resources.pl.resx
@@ -146,7 +146,7 @@
Zapisz zmiany
- Odrzucać zmiany
+ Odrzuć zmiany
Nie znaleziono wtyczki do odczytu/zapisu plików {0}.
@@ -158,7 +158,7 @@
Zawartość pliku wykazuje pewne anomalie i prawdopodobnie jest uszkodzona.
- Walidacji danych
+ Weryfikacja danych
Wszystkie niestandardowe przechowywanie zostaną utracone.
diff --git a/source/ChanSort/ReferenceListForm.pl.resx b/source/ChanSort/ReferenceListForm.pl.resx
index c45629d..04bb62c 100644
--- a/source/ChanSort/ReferenceListForm.pl.resx
+++ b/source/ChanSort/ReferenceListForm.pl.resx
@@ -201,22 +201,16 @@ lub plik danych z innego telewizora (SCM, TLL, DB, BIN, ...)
Rodzaj sygnału:
- Analog
+ Analogowy
Cyfrowy
-
-
-
-
-
-
Rodzaj kanału:
- Zastosować
+ Zastosuj
grpInstrukcja
@@ -228,7 +222,7 @@ lub plik danych z innego telewizora (SCM, TLL, DB, BIN, ...)
Zamknij/Anuluj
- Otwórz Wiki ChanSort, aby uzyskać więcej informacji i pobrać listy referencyjne
+ Otwórz stronę ChanSort, aby uzyskać więcej informacji i pobrać listy referencyjne
1. Wybierz plik listy referencyjnej
diff --git a/source/ChanSort/ReferenceListForm.resx b/source/ChanSort/ReferenceListForm.resx
index 42cb4e3..427ad54 100644
--- a/source/ChanSort/ReferenceListForm.resx
+++ b/source/ChanSort/ReferenceListForm.resx
@@ -159,6 +159,7 @@
+ @Invariant
-1
@@ -483,6 +484,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)
1
+ @Invariant
123, 134
@@ -492,24 +494,31 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)
1
+ @Invariant
100
+ @Invariant
500
+ @Invariant
1000
+ @Invariant
2000
+ @Invariant
5000
+ @Invariant
7000
+ @Invariant
140, 20
@@ -783,6 +792,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)
+ @Invariant
lblTargetInfo
@@ -807,6 +817,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)
+ @Invariant
lblSourceInfo
diff --git a/source/ChanSort/SkinPickerForm.pl.resx b/source/ChanSort/SkinPickerForm.pl.resx
index ff3ac66..14a5c95 100644
--- a/source/ChanSort/SkinPickerForm.pl.resx
+++ b/source/ChanSort/SkinPickerForm.pl.resx
@@ -118,9 +118,18 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Dobrze
+ Ok
Schemat kolorów
+
+ Użyj domyślnego motywu
+
+
+ Anuluj
+
+
+ galeriaKontrola1
+
\ No newline at end of file
diff --git a/source/ChanSort/WaitForm1.es.resx b/source/ChanSort/WaitForm1.es.resx
index e05bb57..c87be50 100644
--- a/source/ChanSort/WaitForm1.es.resx
+++ b/source/ChanSort/WaitForm1.es.resx
@@ -118,7 +118,7 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Generando archivo de datos de TV
+ Generando archivo de datos de TV...
Por favor sea paciente
diff --git a/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_472.h b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_472.h
new file mode 100644
index 0000000..137b3c6
--- /dev/null
+++ b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_472.h
@@ -0,0 +1,172 @@
+#include
+
+struct Header
+{
+ uint32 blockId;
+ uint32 blockSize;
+ uint16 u1;
+ uint16 u2;
+ uint32 numTvChannels;
+ uint32 numRadioChannels;
+ uint32 u3;
+ uint32 channelBlockId;
+ uint32 channelBlockSize;
+};
+
+struct Channel
+{
+ uint32 curProgNr;
+ uint32 u1;
+ uint8 u2[8];
+ uint32 favNr;
+ char name[200];
+ uint16 u3;
+ uint16 u3b;
+ char provider[200];
+ uint8 u4[16];
+ uint32 freqInHz;
+ uint16 u6;
+ uint16 not_symRate;
+ uint32 oldProgNr;
+ uint8 u7[4];
+ uint32 channelIndex;
+ uint16 tsid;
+ uint16 symRate_maybe;
+ uint16 sid;
+ uint16 onid;
+ //uint16 freqInMhz2;
+ //uint16 u9;
+ uint32 u10;
+};
+
+struct Footer
+{
+ uint32 numDataBlocks;
+ uint32 numDataBlockBytes;
+ uint16 bytesumFrom0;
+ uint16 u_zero;
+};
+
+public struct Philips_mgr_chan_s_fta
+{
+ char filename[32];
+ Header header;
+ var recordCount = header.channelBlockSize / sizeof(Channel);
+ Channel channels[recordCount];
+ Footer footer;
+};
+
+//*****************************************************************************************
+// FLASH files
+//*****************************************************************************************
+
+struct ProgNr
+{
+ WORD nr : 14;
+ WORD flags : 2;
+};
+
+struct s_channelTransponder
+{
+ struct
+ {
+ WORD u1 : 3;
+ WORD isRadio: 1;
+ WORD u2 : 1;
+ WORD transponderId : 11;
+ } info;
+ WORD channelId;
+};
+
+struct s_transponder
+{
+ WORD id;
+ BYTE source_maybe;
+ BYTE satId_maybe;
+ WORD freqInMhz;
+ WORD symbolRate;
+ BYTE u2[2];
+ WORD onid;
+ WORD tsid;
+ WORD nid;
+ BYTE u3[5];
+ WORD freqInMhz2;
+ BYTE u4[8];
+};
+
+struct s_satTransponder
+{
+ WORD satId_maybe;
+ WORD transponderId;
+};
+
+struct s_unknown
+{
+ WORD u1;
+ BYTE u2[2];
+ DWORD zero;
+};
+
+struct s_channel
+{
+ WORD id;
+ BYTE u1[4];
+ BYTE u2[2];
+ WORD sid;
+ WORD pcrPid;
+ WORD vpid;
+ BYTE u3[8];
+ ProgNr progNr;
+ BYTE u3b[7];
+ WORD apid1_maybe;
+ char lang1[3];
+ BYTE u4[45];
+ WORD apid2_maybe;
+ char lang2[3];
+ BYTE u5[3];
+};
+
+struct s_channelBlock
+{
+ char ddtc[4];
+ s_channel channels[734];
+ BYTE filler[0x20000-0x1ff32];
+};
+
+#define numChannelTransponderMap 5000
+#define numSatTransponderMap 1090
+#define numTransponder 1100
+#define numSatData 4592
+#define numUnknown 310*8
+public struct Philips_FLASH_DTVINFO_S_FTA
+{
+ char ddtc[4];
+ s_channelTransponder channelTranponderMap[numChannelTransponderMap];
+ s_satTransponder satTransponderMap[numSatTransponderMap];
+ s_transponder transponder[numTransponder];
+ BYTE satData[numSatData];
+ s_unknown unkData[numUnknown];
+ s_channelBlock channelBlocks[*];
+};
+
+#undef numChannelTransponderMap
+#define numChannelTransponderMap 2000
+#undef numSatTransponderMap
+#define numSatTransponderMap 590
+#undef numTransponder
+#define numTransponder 550
+#undef numSatData
+#define numSatData 4592
+#undef numUnknown
+#define numUnknown 310
+public struct Philips_FLASH_DTVINFO_S_PKG
+{
+ char ddtc[4];
+ s_channelTransponder channelTranponderMap[numChannelTransponderMap];
+ s_satTransponder satTransponderMap[numSatTransponderMap];
+ s_transponder transponder[numTransponder];
+ BYTE satData[numSatData];
+ var off0 = current_offset;
+ BYTE unk[0x10000 - off0];
+ s_channelBlock channelBlocks[*];
+};
diff --git a/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_476.h b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_476.h
new file mode 100644
index 0000000..65bf63a
--- /dev/null
+++ b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_476.h
@@ -0,0 +1,219 @@
+#include
+
+struct SHeader
+{
+ uint32 blockId;
+ uint32 blockSize;
+ uint16 u1;
+ uint16 u2;
+ uint32 numTvChannels;
+ uint32 numRadioChannels;
+ uint32 u3;
+ uint32 channelBlockId;
+ uint32 channelBlockSize;
+};
+
+struct SChannel_fta
+{
+ uint32 curProgNr;
+ uint32 u1;
+ uint8 u2[8];
+ uint32 favNr;
+ char chName1[200];
+ uint16 u3;
+ uint8 u3b[208];
+ uint8 u3c[2];
+ uint16 u3d;
+ uint8 u4[10];
+ uint32 freqInMhz1;
+ uint16 u6;
+ uint16 symRate;
+ uint32 oldProgNr;
+ uint32 channelIndex;
+ uint16 tsid;
+ uint16 u7;
+ uint16 sid;
+ uint16 onid;
+ uint16 freqInMhz2;
+ uint8 padding[6];
+};
+
+struct SFooter
+{
+ uint32 numDataBlocks;
+ uint32 numDataBlockBytes;
+ uint16 bytesumFrom0;
+ uint16 u_zero;
+};
+
+public struct Philips_mgr_chan_s_fta
+{
+ char filename[32];
+ SHeader header;
+ var recordCount = header.channelBlockSize / sizeof(SChannel_fta);
+ SChannel_fta channels[recordCount];
+ SFooter footer;
+};
+
+//#########################################################
+
+struct SChannel_pkg
+{
+ uint32 curProgNr;
+ uint32 u1;
+ uint8 u2[8];
+ uint32 favNr;
+ char chName1[200];
+ uint16 u3;
+ uint8 u3b[208];
+ uint8 u3c[2];
+ uint16 u3d;
+ uint8 u4[10];
+ uint32 freqInMhz1;
+ uint16 u6;
+ uint16 symRate;
+ uint32 oldProgNr;
+ uint32 channelIndex;
+ uint16 tsid;
+ uint16 u7;
+ uint16 sid;
+ uint16 onid;
+ uint16 freqInMhz2;
+ uint8 padding[6];
+};
+
+public struct Philips_mgr_chan_s_pkg
+{
+ char filename[32];
+ SHeader header;
+ var recordCount = header.channelBlockSize / sizeof(SChannel_pkg);
+ SChannel_pkg channels[recordCount];
+ SFooter footer;
+};
+
+
+//*****************************************************************************************
+// FLASH files
+//*****************************************************************************************
+
+struct ProgNr
+{
+ WORD nr : 14;
+ WORD flags : 2;
+};
+
+struct s_channelTransponder
+{
+ struct
+ {
+ WORD u1 : 3;
+ WORD isRadio: 1;
+ WORD u2 : 1;
+ WORD transponderId : 11;
+ } info;
+ WORD channelId;
+};
+
+struct s_transponder
+{
+ var off0 = current_offset;
+ WORD id;
+ BYTE source_maybe;
+ BYTE satId_maybe;
+ WORD freqInMhz;
+ WORD symbolRate;
+ BYTE u2[2];
+ WORD onid;
+ WORD tsid;
+ WORD nid;
+ BYTE u3[5];
+ WORD freqInMhz2;
+ BYTE u4[31 - (current_offset - off0)];
+};
+
+struct s_satTransponder
+{
+ WORD satId_maybe;
+ WORD transponderId;
+};
+
+struct s_unknown
+{
+ WORD u1;
+ BYTE u2[2];
+ DWORD zero;
+};
+
+struct s_channel
+{
+ var off0 = current_offset;
+ WORD id;
+ BYTE u1[4];
+ BYTE u2[2];
+ WORD sid;
+ WORD pcrPid;
+ WORD vpid;
+ BYTE u3[8];
+ ProgNr progNr;
+ BYTE u3b[7];
+ WORD apid1_maybe;
+ char lang1[3];
+ BYTE u4[45];
+ WORD apid2_maybe;
+ char lang2[3];
+ BYTE u5[89 - (current_offset - off0)]; // 3
+};
+
+struct s_channelBlock
+{
+ char ddtc[4];
+ s_channel channels[734];
+ BYTE filler[0x20000-0x1ff32];
+};
+
+struct s_satellite
+{
+ BYTE data[42];
+};
+
+#define numChannelTransponderMap 5000
+#define numSatTransponderMap 1000
+#define numTransponder 1100
+#define numSatellites 100
+#define numUnknown 250 //(0x10000-0xF650)/8
+public struct Philips_FLASH_DTVINFO_S_FTA
+{
+ char ddtc[4];
+ s_channelTransponder channelTranponderMap[numChannelTransponderMap];
+ s_satTransponder satTransponderMap[numSatTransponderMap];
+ BYTE unk[360];
+ s_transponder transponder[numTransponder];
+ s_satellite satellites[numSatellites];
+ BYTE unk[0xF650-current_offset];
+ s_unknown unknownTable[numUnknown];
+ BYTE filler[0x10000-current_offset];
+ s_channelBlock channelBlocks[*];
+};
+
+#undef numChannelTransponderMap
+#define numChannelTransponderMap 2000
+#undef numSatTransponderMap
+#define numSatTransponderMap 500
+#undef numTransponder
+#define numTransponder 550
+#undef numSatellites
+#define numSatellites 100
+#undef numUnknown
+#define numUnknown 0
+public struct Philips_FLASH_DTVINFO_S_PKG
+{
+ char ddtc[4];
+ s_channelTransponder channelTranponderMap[numChannelTransponderMap];
+ s_satTransponder satTransponderMap[numSatTransponderMap];
+ BYTE unk[360];
+ s_transponder transponder[numTransponder];
+ s_satellite satellites[numSatellites];
+ //s_unknown unknownTable[numUnknown];
+ BYTE filler[0x10000-current_offset];
+ s_channelBlock channelBlocks[*];
+};
\ No newline at end of file
diff --git a/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_chan_s_fta.db.h b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_480.h
similarity index 60%
rename from source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_chan_s_fta.db.h
rename to source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_480.h
index 69fe0a9..dc0c86d 100644
--- a/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_chan_s_fta.db.h
+++ b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/philips_mgr_480.h
@@ -26,7 +26,6 @@ struct SChannel_fta
uint16 u3d;
uint8 u4[10];
uint32 freqInMhz1;
- //uint16 u5;
uint16 u6;
uint16 symRate;
uint32 oldProgNr;
@@ -47,61 +46,18 @@ struct SFooter
uint16 u_zero;
};
-#pragma script("get_doc_size.js")
-
public struct Philips_mgr_chan_s_fta
{
- var docSize = GetDocumentSize();
-
char filename[32];
-
SHeader header;
-
var recordCount = header.channelBlockSize / sizeof(SChannel_fta);
SChannel_fta channels[recordCount];
-
SFooter footer;
};
//#########################################################
-struct SChannel_pkg_476
-{
- uint32 curProgNr;
- uint32 u1;
- uint8 u2[8];
- uint32 favNr;
- char chName1[200];
- uint16 u3;
- uint8 u3b[208];
- uint8 u3c[2];
- uint16 u3d;
- uint8 u4[10];
- uint32 freqInMhz1;
- uint16 u6;
- uint16 symRate;
- uint32 oldProgNr;
- uint32 channelIndex;
- uint16 tsid;
- uint16 u7;
- uint16 sid;
- uint16 onid;
- uint16 freqInMhz2;
- uint8 padding[6];
- // some files have this additional size of 4 bytes
- //uint8 padding2[4];
-};
-
-public struct Philips_mgr_chan_s_pkg_476
-{
- char filename[32];
- SHeader header;
- var recordCount = header.channelBlockSize / sizeof(SChannel_pkg_476);
- SChannel_pkg_476 channels[recordCount];
- SFooter footer;
-};
-
-struct SChannel_pkg_480
+struct SChannel_pkg
{
uint32 curProgNr;
uint32 u1;
@@ -128,12 +84,12 @@ struct SChannel_pkg_480
uint8 padding2[4];
};
-public struct Philips_mgr_chan_s_pkg_480
+public struct Philips_mgr_chan_s_pkg
{
char filename[32];
SHeader header;
- var recordCount = header.channelBlockSize / sizeof(SChannel_pkg_480);
- SChannel_pkg_480 channels[recordCount];
+ var recordCount = header.channelBlockSize / sizeof(SChannel_pkg);
+ SChannel_pkg channels[recordCount];
SFooter footer;
};
@@ -247,117 +203,6 @@ struct s_unknown
};
struct s_channel
-{
- WORD id;
- BYTE u1[4];
- BYTE u2[2];
- WORD sid;
- WORD pcrPid;
- WORD vpid;
- BYTE u3[8];
- ProgNr progNr;
- BYTE u3b[7];
- WORD apid1_maybe;
- char lang1[3];
- BYTE u4[45];
- WORD apid2_maybe;
- char lang2[3];
- BYTE u5[3];
- // optional
- BYTE u6[4];
-};
-
-struct s_channelBlock
-{
- char ddtc[4];
- s_channel channels[734];
- BYTE filler[0x20000-0x1ff32];
-};
-
-#define numChannelTransponderMap 5000
-#define numSatTransponderMap 1090
-#define numTransponder 1100
-#define numSatData 4592
-#define numUnknown 310*8
-public struct Philips_FLASH_DTVINFO_S_FTA
-{
- char ddtc[4];
- s_channelTransponder channelTranponderMap[numChannelTransponderMap];
- s_satTransponder satTransponderMap[numSatTransponderMap];
- s_transponder transponder[numTransponder];
- BYTE satData[numSatData];
- s_unknown unkData[numUnknown];
- s_channelBlock channelBlocks[*];
-};
-
-#undef numChannelTransponderMap
-#define numChannelTransponderMap 2000
-#undef numSatTransponderMap
-#define numSatTransponderMap 590
-#undef numTransponder
-#define numTransponder 550
-#undef numSatData
-#define numSatData 4592
-#undef numUnknown
-#define numUnknown 310
-public struct Philips_FLASH_DTVINFO_S_PKG
-{
- char ddtc[4];
- s_channelTransponder channelTranponderMap[numChannelTransponderMap];
- s_satTransponder satTransponderMap[numSatTransponderMap];
- s_transponder transponder[numTransponder];
- BYTE satData[numSatData];
- var off0 = current_offset;
- BYTE unk[0x10000 - off0];
- s_channelBlock channelBlocks[*];
-};
-
-
-/////////////////////////////////////////////////////////////////
-
-struct s_channelTransponder2
-{
- struct
- {
- WORD u1 : 3;
- WORD isRadio: 1;
- WORD u2 : 1;
- WORD transponderId : 11;
- } info;
- WORD channelId;
-};
-
-struct s_transponder2
-{
- WORD id;
- BYTE source_maybe;
- BYTE satId_maybe;
- WORD freqInMhz;
- WORD symbolRate;
- BYTE u2[2];
- WORD onid;
- WORD tsid;
- WORD nid;
- BYTE u3[5];
- WORD freqInMhz2;
- BYTE u4[8];
- BYTE u5[5];
-};
-
-struct s_satTransponder2
-{
- WORD satId_maybe;
- WORD transponderId;
-};
-
-struct s_unknown2
-{
- WORD u1;
- BYTE u2[2];
- DWORD zero;
-};
-
-struct s_channel2
{
WORD id;
BYTE u1[4];
@@ -374,34 +219,60 @@ struct s_channel2
WORD apid2_maybe;
char lang2[3];
BYTE u5[3];
+ // optional
BYTE u6[1];
};
-struct s_channelBlock2
+struct s_channelBlock
+{
+ char ddtc[4];
+ s_channel channels[703];
+ BYTE filler[0x20000-0x1ff67];
+};
+
+struct s_satellite
+{
+ BYTE data[42];
+};
+
+#define numChannelTransponderMap 4000
+#define numSatTransponderMap 1000
+#define numTransponder 1100
+#define numSatellites 80 //Data 0xf77c - 0xe9c4
+#define numUnknown 250
+public struct Philips_FLASH_DTVINFO_S_FTA
{
char ddtc[4];
- s_channel2 channels[703];
- BYTE filler[0x20000 - 0x1ff67];
+ s_channelTransponder channelTranponderMap[numChannelTransponderMap];
+ s_satTransponder satTransponderMap[numSatTransponderMap];
+ BYTE unknownData[240];
+ s_transponder transponder[numTransponder];
+ s_satellite satellites[numSatellites];
+ BYTE unk[0xF77C-current_offset];
+ s_unknown unknownTable[numUnknown];
+ BYTE filler[0x10000-current_offset];
+ s_channelBlock channelBlocks[*];
};
#undef numChannelTransponderMap
-#define numChannelTransponderMap 5000
+#define numChannelTransponderMap 2000
#undef numSatTransponderMap
-#define numSatTransponderMap 60
+#define numSatTransponderMap 1000
#undef numTransponder
-#define numTransponder 1100
-#undef numSatData
-#define numSatData 3512
+#define numTransponder 550
+#undef numSatellites
+#define numSatellites 80 //Data 0xf77c - 0xe9c4
#undef numUnknown
-#define numUnknown 2180
-public struct Philips_FLASH_DTVINFO_S_FTA_for_pkg
+#define numUnknown 0
+public struct Philips_FLASH_DTVINFO_S_PKG
{
char ddtc[4];
- s_channelTransponder2 channelTranponderMap[numChannelTransponderMap];
- s_satTransponder2 satTransponderMap[numSatTransponderMap];
- s_transponder2 transponder[numTransponder];
- BYTE satData[numSatData];
- BYTE unknown[numUnknown];
- s_channelBlock2 channelBlocks[*];
-};
-
+ s_channelTransponder channelTranponderMap[numChannelTransponderMap];
+ s_satTransponder satTransponderMap[numSatTransponderMap];
+ BYTE unknownData[240];
+ s_transponder transponder[numTransponder];
+ s_satellite satellites[numSatellites];
+ //s_unknown unknownTable[numUnknown];
+ BYTE filler[0x10000-current_offset];
+ s_channelBlock channelBlocks[*];
+};
\ No newline at end of file
diff --git a/source/Translation.xlsx b/source/Translation.xlsx
index 1e9ce4e..d8847fb 100644
Binary files a/source/Translation.xlsx and b/source/Translation.xlsx differ
diff --git a/source/changelog.md b/source/changelog.md
index 1ae1d80..b00962c 100644
--- a/source/changelog.md
+++ b/source/changelog.md
@@ -1,6 +1,13 @@
ChanSort Change Log
===================
+2021-09-19
+- Philips: added support for ChannelMap_115 format
+- Philips: ChannelMap formats 100-115 did not always fill "Source" and "Polarity" columns correctly
+- Philips: improved experimental support for Philips FLASH\_\*/\*.db file formats
+ (read-only by default, can be enabled in Philips.ini for testing)
+- added Polish readme and updated translation (by JakubDriver)
+
2021-09-13
- column order is now preserved between program starts even when lists with different supported columns
were loaded and columns reordered.
@@ -15,7 +22,7 @@ ChanSort Change Log
2021-09-06
- Philips: fixes for ChannelMap_100, 105 and 110 formats
-- Philips: support for FLASH/*.bin DVB-T/C and preset DVB-S lists (mgr_chan_s_pkg.db)
+- Philips: support for FLASH/*.db DVB-T/C and preset DVB-S lists (mgr_chan_s_pkg.db)
- Toshiba: lists with chmgt_type001\\chmgt.bin can now be opened without zipping them
- Toshiba: selecting the hotelopt_type001.bin will now also load the list (if the type is supported)
- Alden: added support for "Alden" Android SmartTV channel list format (dvr_rtk_tv.db)