Skip to content

Commit 10a53f3

Browse files
committed
- Panasonic Fire-OS Channels.sdx lists: removed trailing underscore and space characters from channel names
- downgraded SQLite libraries to avoid a memory access violation crash in the SQLitePCL.raw 2.1.10 (causing at least Panasonic lists to crash on load) - added support for \*.dbm files with size 782536 (e.g. Vantage VT-80 HD) - moved "Save as..." and "Export reference list" to a sub menu as they caused frequent confusion with the regular "Save".
1 parent 0d9cdfe commit 10a53f3

34 files changed

Lines changed: 213 additions & 46 deletions

File tree

source/ChanSort.Loader.Amdb/ChanSort.Loader.Amdb.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
<OutputPath>..\Release\</OutputPath>
1414
</PropertyGroup>
1515
<ItemGroup>
16-
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0" />
16+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
17+
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
1718
</ItemGroup>
1819

1920
<ItemGroup>

source/ChanSort.Loader.Android/ChanSort.Loader.Android.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
1616
</ItemGroup>
1717
<ItemGroup>
18-
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.0" />
18+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
19+
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
1920
<PackageReference Include="System.Buffers" Version="4.6.0" />
2021
<PackageReference Include="System.Memory" Version="4.6.0" />
2122
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />

source/ChanSort.Loader.DBM/ChanSort.Loader.DBM.ini

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,66 @@ offVideoPid=110
242242

243243
;---------------------------------------
244244

245+
[dbm:782536]
246+
; overall file layout, e.g. Vantage VT-80 HD
247+
isDvbS=true
248+
offChecksum=0x0000
249+
offDataLength=0x0002
250+
offData=0x0006
251+
252+
offSatelliteBitmap=0x0006
253+
lenSatelliteBitmap=28
254+
offSatelliteData=0x0022
255+
numSatellite=200
256+
lenSatelliteData=88
257+
258+
offTransponderBitmap=0x44e0
259+
lenTransponderBitmap=376
260+
offTransponderData=0x465A
261+
numTransponder=3000
262+
lenTransponderData=36
263+
264+
offChannelBitmap=0x1EC50
265+
lenChannelBitmap=502
266+
offChannelData=0x1EE46
267+
numChannel=4000
268+
lenChannelData=164
269+
270+
;satellite record
271+
offSatName=0
272+
lenSatName=34
273+
offLowFreq=34
274+
offHighFreq=36
275+
offOribalPos=74
276+
277+
;transponder record
278+
offFreq=0
279+
offSymRate=20
280+
281+
;channel record
282+
reorderPhysically=true
283+
offName=0
284+
lenName=64
285+
offProgNr=64
286+
offLcn=66
287+
offSatelliteIndex=70
288+
offTransponderIndex=72
289+
offServiceType=80
290+
offHide=81
291+
maskHide=0x04
292+
offSkip=81
293+
maskSkip=0x08
294+
offLock=81
295+
maskLock=0x10
296+
offFavorites=83
297+
offTsid=100
298+
offOnid=102
299+
offSid=104
300+
offPcrPid=108
301+
offVideoPid=110
302+
303+
;---------------------------------------
304+
245305
[dbm:785256]
246306
; overall file layout, e.g. Strong HB_DATABASE_5_4.DBM
247307
isDvbS=true

source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
</EmbeddedResource>
4545
</ItemGroup>
4646
<ItemGroup>
47-
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0" />
47+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
48+
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
4849
<PackageReference Include="System.Buffers" Version="4.6.0" />
4950
<PackageReference Include="System.Memory" Version="4.6.0" />
5051
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />

source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
</None>
3333
</ItemGroup>
3434
<ItemGroup>
35-
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0" />
35+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
36+
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
3637
<PackageReference Include="System.Buffers" Version="4.6.0" />
3738
<PackageReference Include="System.Memory" Version="4.6.0" />
3839
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />

source/ChanSort.Loader.Panasonic/DbChannel.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,15 @@ protected void ReadDvbData(IDataReader r, IDictionary<string, int> field, DataRo
200200
/// </summary>
201201
private void ReadNamesWithEncodingDetection(IDataReader r, IDictionary<string, int> field, Encoding encoding)
202202
{
203-
byte[] buffer = new byte[100];
204-
int len = (int)r.GetBytes(field["sname"], 0, buffer, 0, buffer.Length);
203+
#if true || NoAccessViolationInSQLitePCLRaw
204+
// The NuGet packages Microsoft.Data.Sqlite 9.0.0-9.0.2 throw an AccessViolationException and terminate the program when reading a "string" column with GetBytes()
205+
byte[] buffer = new byte[300];
206+
int len = (int)r.GetBytes(field["sname"], 0, buffer, 0, buffer.Length/3);
207+
#else
208+
var str = r.GetString(field["sname"]);
209+
var buffer = Encoding.UTF8.GetBytes(str);
210+
var len = buffer.Length;
211+
#endif
205212
this.RawName = new byte[len];
206213
Array.Copy(buffer, 0, this.RawName, 0, len);
207214
this.ChangeEncoding(encoding);

source/ChanSort.Loader.Philips/ChanSort.Loader.Philips.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
</EmbeddedResource>
4545
</ItemGroup>
4646
<ItemGroup>
47-
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0" />
47+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
48+
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
4849
<PackageReference Include="System.Buffers" Version="4.6.0" />
4950
<PackageReference Include="System.Memory" Version="4.6.0" />
5051
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />

source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
</None>
3939
</ItemGroup>
4040
<ItemGroup>
41-
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0" />
41+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
42+
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
4243
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
4344
<PackageReference Include="System.Buffers" Version="4.6.0" />
4445
<PackageReference Include="System.Memory" Version="4.6.0" />

source/ChanSort.Loader.SatcoDX/Channel.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ internal class Channel : ChannelInfo
1010
private readonly byte[] data;
1111
public int FileOffset { get; }
1212
public int Length { get; }
13+
private bool forceUtf8;
1314

1415
#region ctor()
1516

@@ -27,7 +28,7 @@ internal Channel(int pos, string line, byte[] data, int start, int length, DvbSt
2728
throw LoaderException.Fail("Unrecognized channel format");
2829

2930
// 10-27: satellite name
30-
this.Satellite = line.Substring(10, 18);
31+
this.Satellite = line.Substring(10, 18).TrimEnd('\0', ' ', '_');
3132

3233
// 28: channel type
3334
var type = line[28];
@@ -96,14 +97,19 @@ public void ParseName(DvbStringDecoder decoder)
9697

9798
// 43-50 + 115-126 in version 103 or 115-131 in version 105: channel name
9899
byte[] nameBytes = new byte[8 + 17];
99-
var nameLen2 = Math.Min(length - 115, 17); // version 103 has 12 extra bytes for channel name, version 105 has 17
100+
int lineEnd = Array.IndexOf(data, (byte)'\x0A', start + 115);
101+
var maxLen = lineEnd < 0 ? data.Length - start : lineEnd - start >= 132 ? 17 : 12;
102+
var nameLen2 = Math.Min(length - 115, maxLen); // version 103 has 12 extra bytes for channel name, version 105 has 17 (uploaded_service_list.sdx) or 12 (Panasonic Fire-OS Channels.sdx)
100103
Array.Copy(data, start + 43, nameBytes, 0, 8);
101104
Array.Copy(data, start + 115, nameBytes, 8, nameLen2);
102105

103106
// I have seen format 103 files using only implicit CP1252 encoding for Umlauts, as well as format 105 with implicit UTF-8/explicit DVB-encoding
104107
var oldDefaultEncoding = decoder.DefaultEncoding;
105108
if (nameLen2 > 12)
109+
{
106110
decoder.DefaultEncoding = Encoding.UTF8;
111+
this.forceUtf8 = true;
112+
}
107113
decoder.GetChannelNames(nameBytes, 0, nameBytes.Length, out var longName, out var shortName);
108114
decoder.DefaultEncoding = oldDefaultEncoding;
109115
this.Name = longName.TrimEnd();
@@ -119,6 +125,8 @@ public void Export(byte[] buffer, Encoding encoding)
119125
return;
120126

121127
// 43-50 + 115-126 in version 103 or 115-131 in version 105: channel name
128+
if (this.forceUtf8)
129+
encoding = Encoding.UTF8;
122130
var bytes = encoding.GetBytes(this.Name);
123131
Tools.MemSet(buffer, 43, 32, 8);
124132
Tools.MemSet(buffer, 115, 32, buffer.Length - 115 -1);

source/ChanSort.Loader.TCL/ChanSort.Loader.TCL.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
<LangVersion>latest</LangVersion>
77
</PropertyGroup>
88
<ItemGroup>
9-
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0" />
9+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
10+
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
1011
</ItemGroup>
1112
<ItemGroup>
1213
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />

0 commit comments

Comments
 (0)