diff --git a/source/ChanSort.Api/Utils/IniFile.cs b/source/ChanSort.Api/Utils/IniFile.cs index fd1822e..24316c5 100644 --- a/source/ChanSort.Api/Utils/IniFile.cs +++ b/source/ChanSort.Api/Utils/IniFile.cs @@ -121,7 +121,7 @@ namespace ChanSort.Api } int.TryParse(value, out var intValue); - return intValue; + return sig * intValue; } #endregion diff --git a/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini b/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini index 93b1b98..671af1f 100644 --- a/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini +++ b/source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini @@ -44,6 +44,53 @@ offPcrPid=104 offVideoPid=106 +;--------------------------------------- + +[dbm:109720] +; overall file layout +isDvbS=false +separateTvRadioData=false +offChecksum=-1 +offDataLength=-1 +offData=0 + +offTransponderBitmap=0x0000 +lenTransponderBitmap=16 +offTransponderData=0x0010 +numTransponder=100 +lenTransponderData=40 + +offChannelBitmap=0x0fc6 +lenChannelBitmap=75 +offChannelData=0x1014 +numChannel=600 +lenChannelData=176 + +;transponder record +offFreq=0 +offSymRate=8 + +;channel record +offName=0 +lenName=64 +offProgNr=64 +offLcn=66 +offTransponderIndex=70 +offServiceType=76 +offHide=77 +maskHide=0x04 +offSkip=77 +maskSkip=0x08 +offLock=77 +maskLock=0x10 +offFavorites=79 +offTsid=96 +offOnid=98 +offSid=100 +offPcrPid=104 +offVideoPid=106 + + ;--------------------------------------- [dbm:163772] diff --git a/source/ChanSort.Loader.DBM/DbmSerializer.cs b/source/ChanSort.Loader.DBM/DbmSerializer.cs index 44c7e4c..2d7e142 100644 --- a/source/ChanSort.Loader.DBM/DbmSerializer.cs +++ b/source/ChanSort.Loader.DBM/DbmSerializer.cs @@ -108,6 +108,9 @@ namespace ChanSort.Loader.DBM #region ValidateChecksum() private void ValidateChecksum() { + if (mapping.Settings.GetInt("offChecksum") < 0) + return; + var expectedChecksum = BitConverter.ToUInt16(data, 0); var calculatedChecksum = CalcChecksum(data, sec.GetInt("offData"), (int)mapping.GetDword("offDataLength")); if (expectedChecksum != calculatedChecksum) @@ -263,9 +266,13 @@ namespace ChanSort.Loader.DBM mapping.SetByte("offFavorites", fav); } - mapping.BaseOffset = 0; - var calculatedChecksum = CalcChecksum(data, sec.GetInt("offData"), (int)mapping.GetDword("offDataLength")); - mapping.SetWord("offChecksum", calculatedChecksum); + if (mapping.Settings.GetInt("offChecksum") >= 0) + { + mapping.BaseOffset = 0; + var calculatedChecksum = CalcChecksum(data, sec.GetInt("offData"), (int)mapping.GetDword("offDataLength")); + mapping.SetWord("offChecksum", calculatedChecksum); + } + File.WriteAllBytes(this.FileName, this.data); } #endregion diff --git a/source/ChanSort.Loader.LG/GlobalClone/GcXmlSerializer.cs b/source/ChanSort.Loader.LG/GlobalClone/GcXmlSerializer.cs index 9d0dbff..7f445e7 100644 --- a/source/ChanSort.Loader.LG/GlobalClone/GcXmlSerializer.cs +++ b/source/ChanSort.Loader.LG/GlobalClone/GcXmlSerializer.cs @@ -30,6 +30,7 @@ namespace ChanSort.Loader.GlobalClone this.Features.CanSkipChannels = true; this.Features.CanLockChannels = true; this.Features.CanHideChannels = true; + this.Features.FavoritesMode = FavoritesMode.Flags; // will be overwritten when a element is found this.DataRoot.AddChannelList(this.atvChannels); this.DataRoot.AddChannelList(this.dtvTvChannels); @@ -329,7 +330,7 @@ namespace ChanSort.Loader.GlobalClone int n = info.LocalName[11] - 'A'; var mask = 1 << n; this.Features.FavoritesMode = FavoritesMode.OrderedPerSource; - this.Features.MaxFavoriteLists = Math.Max(this.Features.MaxFavoriteLists, n); + this.Features.MaxFavoriteLists = Math.Max(this.Features.MaxFavoriteLists, n + 1); if (((int)ch.Favorites & mask) != 0) // xml element holds bad index data (250) when fav is not set ch.SetOldPosition(n + 1, int.Parse(info.InnerText)); } diff --git a/source/ChanSort.Loader.Panasonic/SvlSerializer.cs b/source/ChanSort.Loader.Panasonic/SvlSerializer.cs index 8713774..e166277 100644 --- a/source/ChanSort.Loader.Panasonic/SvlSerializer.cs +++ b/source/ChanSort.Loader.Panasonic/SvlSerializer.cs @@ -241,7 +241,7 @@ namespace ChanSort.Loader.Panasonic select s.rowid,s.major_channel,s.physical_ch,cast(s.sname as blob),t.freq,s.skip,s.running_status,s.free_CA_mode,s.child_lock, profile1index,profile2index,profile3index,profile4index,s.stype,s.onid,s.tsid,s.svcid,s.ntype,s.ya_svcid,delivery,ifnull(t.delivery_type, 0) from SVL s -left outer join TSL t on s.ntype=t.ntype and s.physical_ch=t.physical_ch and s.tsid=t.tsid +left outer join TSL t on s.ntype=t.ntype and s.physical_ch=t.physical_ch and s.tsid=t.tsid and s.onid=t.onid order by s.ntype,major_channel "; diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs index 20f93f9..90e0df2 100644 --- a/source/ChanSort/MainForm.cs +++ b/source/ChanSort/MainForm.cs @@ -2407,6 +2407,35 @@ namespace ChanSort.Ui #endregion + #region tabSubList_MouseUp + private void tabSubList_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + var list = this.CurrentChannelList; + if (list == null) + return; + if (this.currentTvSerializer?.Features.CanEditFavListNames != true) + return; + var hit = this.tabSubList.CalcHitInfo(e.Location); + if (hit.IsValid && hit.Page != null) + { + using var dlg = new TextInputForm(); + dlg.StartPosition = FormStartPosition.Manual; + dlg.Location = this.tabSubList.PointToScreen(e.Location); + var favIndex = this.tabSubList.TabPages.IndexOf(hit.Page) - 1; + dlg.Text = list.GetFavListCaption(favIndex); + if (dlg.ShowDialog(this) == DialogResult.OK) + { + list.SetFavListCaption(favIndex, dlg.Text); + hit.Page.Text = list.GetFavListCaption(favIndex, true); + } + } + } + } + + #endregion + #region gview_CustomUnboundColumnData private void gview_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) @@ -3972,32 +4001,5 @@ namespace ChanSort.Ui } #endregion - - #region tabSubList_MouseUp - private void tabSubList_MouseUp(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Right) - { - var list = this.CurrentChannelList; - if (list == null) - return; - var hit = this.tabSubList.CalcHitInfo(e.Location); - if (hit.IsValid && hit.Page != null) - { - using var dlg = new TextInputForm(); - dlg.StartPosition = FormStartPosition.Manual; - dlg.Location = this.tabSubList.PointToScreen(e.Location); - var favIndex = this.tabSubList.TabPages.IndexOf(hit.Page) - 1; - dlg.Text = list.GetFavListCaption(favIndex); - if (dlg.ShowDialog(this) == DialogResult.OK) - { - list.SetFavListCaption(favIndex, dlg.Text); - hit.Page.Text = list.GetFavListCaption(favIndex, true); - } - } - } - } - - #endregion } } \ No newline at end of file diff --git a/source/ChanSort/Properties/licenses.licx b/source/ChanSort/Properties/licenses.licx index e69de29..4815838 100644 --- a/source/ChanSort/Properties/licenses.licx +++ b/source/ChanSort/Properties/licenses.licx @@ -0,0 +1,6 @@ +DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/source/ChanSort/ReferenceListForm.resx b/source/ChanSort/ReferenceListForm.resx index a66b78f..61a2b7d 100644 --- a/source/ChanSort/ReferenceListForm.resx +++ b/source/ChanSort/ReferenceListForm.resx @@ -173,14 +173,36 @@ True - + - - + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4xLCBWZXJzaW9uPTIzLjEu + Ni4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFlE + ZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVi + bGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURldkV4cHJlc3MuVXRpbHMuU3VwZXJUb29s + VGlwBQAAAA1BbGxvd0h0bWxUZXh0EUZpeGVkVG9vbFRpcFdpZHRoCkl0ZW1zQ291bnQJaXRlbVR5cGUw + BWl0ZW0wBAAABAQfRGV2RXhwcmVzcy5VdGlscy5EZWZhdWx0Qm9vbGVhbgMAAAABCCVEZXZFeHByZXNz + LlV0aWxzLlN1cGVyVG9vbFRpcEl0ZW1UeXBlAgAAACFEZXZFeHByZXNzLlV0aWxzLlRvb2xUaXBUaXRs + ZUl0ZW0CAAAAAgAAAAX8////H0RldkV4cHJlc3MuVXRpbHMuRGVmYXVsdEJvb2xlYW4BAAAAB3ZhbHVl + X18ACAMAAAACAAAAAAEAAAAF+////yVEZXZFeHByZXNzLlV0aWxzLlN1cGVyVG9vbFRpcEl0ZW1UeXBl + AQAAAAd2YWx1ZV9fAAgCAAAAAQAAAAkGAAAADAcAAABRU3lzdGVtLkRyYXdpbmcsIFZlcnNpb249NC4w + LjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhBQYAAAAh + RGV2RXhwcmVzcy5VdGlscy5Ub29sVGlwVGl0bGVJdGVtBwAAAA1BbGxvd0h0bWxUZXh0BEljb24MSW1h + Z2VPcHRpb25zCkxlZnRJbmRlbnQITWF4V2lkdGgST3duZXJBbGxvd0h0bWxUZXh0BFRleHQEBAQAAAAB + H0RldkV4cHJlc3MuVXRpbHMuRGVmYXVsdEJvb2xlYW4DAAAAE1N5c3RlbS5EcmF3aW5nLkljb24HAAAA + KERldkV4cHJlc3MuVXRpbHMuVG9vbFRpcEl0ZW1JbWFnZU9wdGlvbnMCAAAACAgBAgAAAAH4/////P// + /wIAAAAKCQkAAAAAAAAAPAEAAAAGCgAAAAAFCQAAAChEZXZFeHByZXNzLlV0aWxzLlRvb2xUaXBJdGVt + SW1hZ2VPcHRpb25zBQAAAAhJbWFnZVVyaQxTdmdJbWFnZVNpemUJQWxpZ25tZW50CkltYWdlSW5kZXgT + SW1hZ2VUb1RleHREaXN0YW5jZQEEBAAAE1N5c3RlbS5EcmF3aW5nLlNpemUHAAAAJkRldkV4cHJlc3Mu + VXRpbHMuVG9vbFRpcEltYWdlQWxpZ25tZW50AgAAAAgIAgAAAAkKAAAABfX///8TU3lzdGVtLkRyYXdp + bmcuU2l6ZQIAAAAFd2lkdGgGaGVpZ2h0AAAICAcAAAAAAAAAAAAAAAX0////JkRldkV4cHJlc3MuVXRp + bHMuVG9vbFRpcEltYWdlQWxpZ25tZW50AQAAAAd2YWx1ZV9fAAgCAAAAAAAAAP////8OAAAACw== + Default @@ -1127,16 +1149,4 @@ This step can be repeated as needed. DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - - - 1. Select reference list file - - - 2. Bring order to your TV file - - - Data/Other - \ No newline at end of file diff --git a/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dbm.h b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dbm.h index bad9e15..c1c0d4a 100644 --- a/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dbm.h +++ b/source/Information/FileStructures_for_HHD_Hex_Editor_Neo/dbm.h @@ -60,8 +60,20 @@ struct s_Channel word progNrMinus1; word lcn; byte u3[2]; - word satelliteIndex; - word transponderIndex; + union + { + struct + { + word satelliteIndex; + word transponderIndex; + } dvbs; + struct + { + byte transponderIndex; + byte unknown; + word dummy; + } dvbc; + } transponder; byte u4[bytesBetweenTransponderIndexAndServiceType]; e_ServiceType serviceType; e_Flags flags; @@ -75,6 +87,7 @@ struct s_Channel byte u7[2]; word pcrPidMaybe; word vpidMaybe; + word pmt; var off1 = current_offset; byte unk[channelRecordLength - (off1-off0)]; @@ -83,14 +96,16 @@ struct s_Channel public struct DBM { + var hasHeader = 1; var satBitmapLength = 0; var satRecordCount = 0; var satRecordLength = 0; var transponderBitmapLength = 0; var transponderRecordCount = 0; var transponderRecordLength = 0; - var unknownDataLength = 0; + var unknownDataAfterTransponderData = 0; var channelBitmapLength = 0; + var unknownDataAfterChannelBitmap = 0; var channelRecordCount = 0; var channelRecordLength = 0; var bytesBetweenTransponderIndexAndServiceType = 6; @@ -101,16 +116,32 @@ public struct DBM // Renkforce 1510 C HD, Telestar digiHD TC 7 satBitmapLength = 0; satRecordCount = 0; - satRecordLength = 84; + satRecordLength = 0; transponderBitmapLength = 16; transponderRecordCount = 100; transponderRecordLength = 36; - unknownDataLength = 22; + unknownDataAfterTransponderData = 22; channelBitmapLength = 50; channelRecordCount = 400; channelRecordLength = 176; bytesBetweenTransponderIndexAndServiceType = 2; break; + case 109720: + // XORO DVB-C tuner + hasHeader = 0; + satBitmapLength = 0; + satRecordCount = 0; + satRecordLength = 0; + transponderBitmapLength = 16; + transponderRecordCount = 100; + transponderRecordLength = 40; + unknownDataAfterTransponderData = 22; + channelBitmapLength = 78; + unknownDataAfterChannelBitmap = 0; + channelRecordCount = 600; + channelRecordLength = 176; + bytesBetweenTransponderIndexAndServiceType = 2; + break; case 163772: // TechniSat DVB-C TS_Programmliste_06_01.DBM satBitmapLength = 0; @@ -119,7 +150,7 @@ public struct DBM transponderBitmapLength = 16; transponderRecordCount = 100; transponderRecordLength = 36; - unknownDataLength = 22; + unknownDataAfterTransponderData = 22; channelBitmapLength = 126; channelRecordCount = 1000; channelRecordLength = 160; @@ -133,7 +164,7 @@ public struct DBM transponderBitmapLength = 376; transponderRecordCount = 3000; transponderRecordLength = 36; - unknownDataLength = 22; + unknownDataAfterTransponderData = 22; channelBitmapLength = 502; channelRecordCount = 4000; channelRecordLength = 164; @@ -146,7 +177,7 @@ public struct DBM transponderBitmapLength = 376; transponderRecordCount = 3000; transponderRecordLength = 36; - unknownDataLength = 20; + unknownDataAfterTransponderData = 20; channelBitmapLength = 500; channelRecordCount = 4000; channelRecordLength = 164; @@ -159,7 +190,7 @@ public struct DBM transponderBitmapLength = 376; transponderRecordCount = 3000; transponderRecordLength = 40; - unknownDataLength = 22; + unknownDataAfterTransponderData = 22; channelBitmapLength = 502; channelRecordCount = 4000; channelRecordLength = 164; @@ -172,7 +203,7 @@ public struct DBM transponderBitmapLength = 376; transponderRecordCount = 3000; transponderRecordLength = 36; - unknownDataLength = 22; + unknownDataAfterTransponderData = 22; channelBitmapLength = 626; channelRecordCount = 5000; channelRecordLength = 164; @@ -181,9 +212,11 @@ public struct DBM $assert(false, "Structure for this file size is not supported"); break; } - - word BytesumPlus0x55; - dword DataLengthForBytesum; + + if (hasHeader != 0) { + word BytesumPlus0x55; + dword DataLengthForBytesum; + } byte SatelliteBitmap[satBitmapLength]; s_Satellite SatelliteData[satRecordCount]; @@ -191,9 +224,12 @@ public struct DBM byte TransponderBitmap[transponderBitmapLength]; s_Transponder TransponderData[transponderRecordCount]; - byte unknown[unknownDataLength]; + byte unknown[unknownDataAfterTransponderData]; byte ChannelBitmap[channelBitmapLength]; + + byte unknown2[unknownDataAfterChannelBitmap]; + s_Channel ChannelData[channelRecordCount]; byte Extra[*]; diff --git a/source/changelog.md b/source/changelog.md index df410cc..89c37af 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,6 +1,14 @@ ChanSort Change Log =================== +2023-12-18 +- fixed loading Panasonic tv.db / idtvChannel.bin lists which contain DVB-T2 channels +- fixed Panasonic svl.db/svl.bin lists that contained multiple transponder records with the same frequency +- LG webOS4 lists only showed favorites A-G, missing out H +- Favorite list names can now only be edited when the file formation actually supports it +- Added a few missing translations in polish and italian language +- added experimental support for Xoro DVB-C receiver HB\_DATABASE\_C.HBM format with file size 109720 (108KB) + 2023-12-12 - fixed Panasonic svl.db / svl.db error "no such table SVL" when saving the list more than once - partial support for Philips ChannelMap_120 format. The TV will only import the reordered favorite