mirror of
https://github.com/PredatH0r/ChanSort.git
synced 2026-01-19 13:52:04 +01:00
- fixed Nuget hell: (auto) binding redirects to prevent compiler warning flood and ensure unit tests to be runnable
- put file name in Sqlite connect string in quotes - improvements to Mediatek Philips 120+125/Sony serializer (physically reorder XML nodes, use flags stored in Java serialized blob) - selecting a RefList changed the current working directory, which prevented .ini files to be found by loaders
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ source/ChanSort.opensdf
|
||||
/source/packages/
|
||||
/source/ChanSort.Loader.PhilipsBin/DllClient.cs
|
||||
/source/ChanSort.Loader.MediaTek/.vs/
|
||||
/source/__.vs/
|
||||
|
||||
@@ -81,7 +81,9 @@ System requirements
|
||||
- winetricks (sudo apt-get install winetricks)
|
||||
- start winetricks, select or create a wineprefix (32 bit or 64 bit), select
|
||||
"Install Windows DLL or component" and install the "dotnet48" package and ignore dozens of message boxes
|
||||
- right-click on ChanSort.exe and select "open with", "all applications", "A wine application"
|
||||
- right-click on ChanSort.exe and select "open with", "all applications", "A wine application"
|
||||
Last tested with Ubuntu 24.10, wine-9.0, winetricks 20240105
|
||||
|
||||
Or using Docker: https://github.com/PredatH0r/ChanSort/issues/285
|
||||
|
||||
**Mac**
|
||||
|
||||
@@ -80,8 +80,10 @@ Systemvoraussetzungen
|
||||
- winetricks (sudo apt-get install winetricks)
|
||||
- Starte winetricks, wähle oder erstelle ein wineprefix (32 bit oder 64 bit), wähle
|
||||
"Installiere Windows DLL oder Komponente", installiere das "dotnet48" Paket and ignore dutzende Popup-Dialoge
|
||||
- Rechtsklick auf ChanSort.exe, wähle "Öffnen mit", "Alle Anwendungen", "Eine wine Anwendung"
|
||||
Or mit Docker: https://github.com/PredatH0r/ChanSort/issues/285
|
||||
- Rechtsklick auf ChanSort.exe, wähle "Öffnen mit", "Alle Anwendungen", "Eine wine Anwendung"
|
||||
Zuletzt getestet mit Ubuntu 24.10, wine-9.0, winetricks 20240105
|
||||
|
||||
Oder mit Docker: https://github.com/PredatH0r/ChanSort/issues/285
|
||||
|
||||
**Mac**
|
||||
- macOS wird nicht direkt unterstützt, aber mit Parallels oder UTM kann eine VM mit Windows 10/11 am Mac genutzt werden
|
||||
|
||||
@@ -79,7 +79,8 @@ Wymagania systemowe
|
||||
- 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"
|
||||
"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"
|
||||
Ostatnio testowano z Ubuntu 24.10, wine-9.0, winetricks 20240105
|
||||
|
||||
**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
|
||||
|
||||
@@ -75,7 +75,8 @@ Sistem Gereksinimleri
|
||||
- wine (sudo apt-get install wine)
|
||||
- winetricks (sudo apt-get install winetricks)
|
||||
- winetricks'i başlatın, wineprefix'i seçin ya da oluşturun (32 bit ya da 64 bit), "Install Windows DLL or component"i seçin ve "dotnet48" paketini yükleyin, bu sırada çıkan düzinelerce uyarı mesajını görmezden gelin
|
||||
- ChanSort.exe'ye sağ tıklayın ve "open with", "all applications", "A wine application" sırasınca seçin
|
||||
- ChanSort.exe'ye sağ tıklayın ve "open with", "all applications", "A wine application" sırasınca seçin
|
||||
Son olarak Ubuntu 24.10, wine-9.0, winetricks 20240105 ile test edildi
|
||||
|
||||
**Mac**
|
||||
- macOS doğrudan desteklenmez, ancak Mac'te Windows 10/11 ile bir VM kurmak için Parallels veya UTM kullanabilirsiniz
|
||||
|
||||
@@ -1,24 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Update="Resources.de.Designer.cs">
|
||||
|
||||
@@ -105,6 +105,30 @@ namespace ChanSort.Api
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region MemComp()
|
||||
|
||||
/// <summary>
|
||||
/// Bytewise comparison of 2 arrays
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// <0 if <param name="arr1"></param>[i] < <param name="with"></param>[i] or ends earlier
|
||||
/// </returns>
|
||||
public static int MemComp(byte[] arr1, int idx1, byte[] with)
|
||||
{
|
||||
int i = idx1;
|
||||
int j = 0;
|
||||
int c = Math.Min(with.Length, arr1.Length - idx1);
|
||||
while (j < c)
|
||||
{
|
||||
var v = arr1[i++] - with[j++];
|
||||
if (v != 0)
|
||||
return v;
|
||||
}
|
||||
|
||||
return j - with.Length;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReverseByteOrder()
|
||||
public static ushort ReverseByteOrder(ushort input)
|
||||
{
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace ChanSort.Loader.Amdb
|
||||
#region Load()
|
||||
public override void Load()
|
||||
{
|
||||
string connString = $"Data Source={this.FileName};Pooling=False";
|
||||
string connString = $"Data Source=\"{this.FileName}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(connString);
|
||||
conn.Open();
|
||||
|
||||
@@ -253,7 +253,7 @@ order by t.db_sat_para_id, case p.service_type when 0 then 3 when 1 then 0 when
|
||||
#region Save()
|
||||
public override void Save()
|
||||
{
|
||||
string channelConnString = $"Data Source={this.FileName};Pooling=False";
|
||||
string channelConnString = $"Data Source=\"{this.FileName}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(channelConnString);
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<ImplicitUsings>disable</ImplicitUsings>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\Solution.props" />
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
@@ -13,8 +8,8 @@
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -87,7 +87,7 @@ namespace ChanSort.Loader.Android
|
||||
#region Load()
|
||||
public override void Load()
|
||||
{
|
||||
using var conn = new SqliteConnection($"Data Source={this.FileName};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{this.FileName}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
|
||||
@@ -162,7 +162,7 @@ namespace ChanSort.Loader.Android
|
||||
/// </summary>
|
||||
public override void Save()
|
||||
{
|
||||
using var conn = new SqliteConnection($"Data Source={this.FileName};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{this.FileName}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
@@ -15,11 +16,7 @@
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -1,4 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
@@ -44,23 +45,7 @@
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Remove="C:\Users\horst\.nuget\packages\sqlitepclraw.lib.e_sqlite3\2.1.2\buildTransitive\net461\..\..\runtimes\win-x86\native\e_sqlite3.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Remove="C:\Users\horst\.nuget\packages\sqlitepclraw.lib.e_sqlite3\2.1.2\buildTransitive\net461\..\..\runtimes\win-x64\native\e_sqlite3.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Remove="C:\Users\horst\.nuget\packages\sqlitepclraw.lib.e_sqlite3\2.1.2\buildTransitive\net461\..\..\runtimes\win-arm\native\e_sqlite3.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\app.config" Link="app.config" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -141,7 +141,7 @@ namespace ChanSort.Loader.Hisense.ChannelDb
|
||||
|
||||
public override void Load()
|
||||
{
|
||||
using (var conn = new SqliteConnection($"Data Source={this.FileName};Pooling=False"))
|
||||
using (var conn = new SqliteConnection($"Data Source=\"{this.FileName}\";Pooling=False"))
|
||||
{
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -468,7 +468,7 @@ namespace ChanSort.Loader.Hisense.ChannelDb
|
||||
{
|
||||
Editor.SequentializeFavPos(this.channelLists[6], 4);
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={this.FileName};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{this.FileName}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
|
||||
@@ -114,7 +114,7 @@ namespace ChanSort.Loader.Hisense.ServicelistDb
|
||||
|
||||
public override void Load()
|
||||
{
|
||||
using (var conn = new SqliteConnection($"Data Source={this.FileName};Pooling=False"))
|
||||
using (var conn = new SqliteConnection($"Data Source=\"{this.FileName}\";Pooling=False"))
|
||||
{
|
||||
conn.Open();
|
||||
using (var cmd = conn.CreateCommand())
|
||||
@@ -445,7 +445,7 @@ left outer join {dbSchema.DvbServiceTable} digs on digs.ServiceId=s.Pid
|
||||
|
||||
public override void Save()
|
||||
{
|
||||
using var conn = new SqliteConnection($"Data Source={this.FileName};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{this.FileName}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
|
||||
@@ -45,4 +45,8 @@
|
||||
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Update="System.Memory" Version="4.6.3" />
|
||||
<PackageReference Update="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,28 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Update="Resource.Designer.cs">
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
@@ -14,7 +16,7 @@ public class Serializer : SerializerBase
|
||||
* Examples are Philips channel list formats 120 and 125 and Sony BRAVIA 7 (2024).
|
||||
* However there are differences between Philips and Sony:
|
||||
* - Sony lacks a number of XML elements
|
||||
* - Sony seems to manage TV, Radio and Data channels internally in separate lists, all starting at 1, while Philips seems to use one combined list with no duplicate major_channel_numbers
|
||||
* - Sony uses separate lists for TV, radio and data, while Philips puts them in a combine list. This is controlled by the MultiBank-setting in <internal><scan>
|
||||
*
|
||||
* <service_list_transfer>
|
||||
* <service_list_infos>
|
||||
@@ -45,7 +47,7 @@ public class Serializer : SerializerBase
|
||||
* <satelliteName>
|
||||
* <internal>
|
||||
* <summary> (base64 encoded Java serialized binary)
|
||||
* <scan> (base64 encoded Java serialized binary)
|
||||
* <scan> (base64 encoded Java serialized binary, containing several scan settings)
|
||||
* <service_database> (base64 encoded Java serialized binary, which contains proprietary MediaTek compressed/encrypted cl_Zip data)
|
||||
*/
|
||||
|
||||
@@ -53,22 +55,22 @@ public class Serializer : SerializerBase
|
||||
private byte[] content;
|
||||
private string textContent;
|
||||
private readonly StringBuilder fileInfo = new();
|
||||
private readonly bool splitTvRadioData;
|
||||
private bool splitTvRadioData; // controlled by the MultiBank setting inside the <scan> Java serialized stream; Philips=false, Sony=true
|
||||
private bool usesLcn;
|
||||
public readonly Dictionary<string, string> ScanParameters = new();
|
||||
|
||||
|
||||
#region ctor()
|
||||
public Serializer(string inputFile, bool separateTvRadioData = false) : base(inputFile)
|
||||
public Serializer(string inputFile) : base(inputFile)
|
||||
{
|
||||
this.splitTvRadioData = separateTvRadioData;
|
||||
this.Features.ChannelNameEdit = ChannelNameEditMode.All;
|
||||
this.Features.DeleteMode = DeleteMode.NotSupported;
|
||||
this.Features.FavoritesMode = FavoritesMode.None;
|
||||
this.Features.CanSkipChannels = false;
|
||||
this.Features.CanLockChannels = true;
|
||||
this.Features.CanHideChannels = false;
|
||||
this.Features.CanHideChannels = false; // unclear how "visible_service" works (3 for normal channels, 1 for hidden?)
|
||||
this.Features.CanSaveAs = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Load()
|
||||
@@ -102,18 +104,74 @@ public class Serializer : SerializerBase
|
||||
if (fail || root == null || root.LocalName != "service_list_transfer")
|
||||
throw LoaderException.TryNext("\"" + this.FileName + "\" is not a supported MediaTek XML file");
|
||||
|
||||
var nodesByName = new Dictionary<string, XmlNode>();
|
||||
foreach (XmlNode child in root.ChildNodes)
|
||||
nodesByName[child.LocalName] = child;
|
||||
|
||||
// read <internal><scan> first to determine this.splitTvRadioData
|
||||
if (nodesByName.TryGetValue("internal", out var node))
|
||||
{
|
||||
switch (child.LocalName)
|
||||
foreach (XmlNode childNode in node.ChildNodes)
|
||||
{
|
||||
case "service_list_infos":
|
||||
ReadServiceListInfos(child);
|
||||
break;
|
||||
case "internal":
|
||||
// child elements: summary, scan, service_database
|
||||
break;
|
||||
if (childNode.LocalName == "scan")
|
||||
ReadScanElement(Convert.FromBase64String(childNode.InnerText));
|
||||
}
|
||||
}
|
||||
|
||||
// now read the channels
|
||||
if (nodesByName.TryGetValue("service_list_infos", out node))
|
||||
ReadServiceListInfos(node);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadScanElement()
|
||||
|
||||
private static readonly byte[] EnumMarker = [0, 0, 0, 0, 0, 0, 0, 0, 0x12, 0, 0, 0x78, 0x71, 0, 0x7e, 0]; // , 0x0e, 0x74 philips; , 0x14, 0x74 sony;
|
||||
private void ReadScanElement(byte[] data)
|
||||
{
|
||||
/*
|
||||
* The base64 encoded <scan> element contains serialized Java objects.
|
||||
* The exact binary data layout is unknown and varies between brands and maybe firmware versions.
|
||||
* Some data in it gives clues about LCNs are used and whether a FULL scan was used to setup the channel list, whether TV,radio and data channels are in a combined list or separated, ...
|
||||
*
|
||||
* To detectd values, we look for: (uiLen "com.[mediatek|sony].dtv.broadcast.middleware.scan.engine.ScanSettings$<name>") \x00{8} \x12 \x00\x00\x78\x71 \x00\x7e \x00\x?? \x74 (uiLen "<value>")
|
||||
*/
|
||||
|
||||
var str = Encoding.ASCII.GetString(data);
|
||||
for (int idx = str.IndexOf("com.", StringComparison.InvariantCulture); idx >= 2; idx = str.IndexOf("com.", idx, StringComparison.InvariantCulture))
|
||||
{
|
||||
// get the setting name
|
||||
var len = data[idx - 2] * 256 + data[idx - 1];
|
||||
var name = str.Substring(idx, len);
|
||||
var i = name.IndexOf('$'); // only care about the name part after the $-sign
|
||||
if (i >= 0)
|
||||
name = name.Substring(i + 1);
|
||||
|
||||
// check for the EnumMarker, followed by 2 bytes (first of them varies between Philips and sony)
|
||||
idx += len;
|
||||
if (idx + EnumMarker.Length + 2 >= data.Length)
|
||||
continue;
|
||||
if (Tools.MemComp(data, idx, EnumMarker) != 0)
|
||||
continue;
|
||||
idx += EnumMarker.Length + 2;
|
||||
|
||||
// get the enum value
|
||||
len = data[idx] * 256 + data[idx + 1];
|
||||
idx += 2;
|
||||
if (idx + len >= data.Length)
|
||||
continue;
|
||||
var value = str.Substring(idx, len);
|
||||
idx += len;
|
||||
|
||||
this.ScanParameters[name] = value;
|
||||
this.fileInfo.AppendLine($"{name}: {value}");
|
||||
|
||||
// handle relevant settings
|
||||
if (name == "MultiBank")
|
||||
splitTvRadioData |= value == "SEPARATE_TV_RADIO_DATA";
|
||||
else if (name == "LcnType")
|
||||
usesLcn |= value != "LCNS_DISABLED";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -176,10 +234,10 @@ public class Serializer : SerializerBase
|
||||
chan.RecordOrder = idx;
|
||||
|
||||
chan.OldProgramNr = si.GetElementInt("major_channel_number");
|
||||
// user_edit_flag ("none" in all observed records)
|
||||
// user_edit_flag ("none" in all observed records, must be "update" for the TV to process the record)
|
||||
chan.Name = si.GetElementString("service_name");
|
||||
chan.ServiceType = si.GetElementInt("sdt_service_type");
|
||||
// visible_service ("3" in all observed records)
|
||||
chan.Hidden = si.GetElementInt("visible_service") != 3; // visible_service ("3" in most observed record, "1" in some others)
|
||||
chan.ServiceId = si.GetElementInt("service_id");
|
||||
chan.TransportStreamId = si.GetElementInt("transport_stream_id");
|
||||
chan.FreqInMhz = si.GetElementInt("frequency");
|
||||
@@ -212,6 +270,8 @@ public class Serializer : SerializerBase
|
||||
name += " " + ((ss & SignalSource.Tv) != 0 ? " TV" : (ss & SignalSource.Radio) != 0 ? " Radio" : " Data");
|
||||
|
||||
list = new ChannelList(ss, name);
|
||||
if (this.usesLcn)
|
||||
list.ReadOnly = true;
|
||||
this.DataRoot.AddChannelList(list);
|
||||
}
|
||||
|
||||
@@ -219,11 +279,11 @@ public class Serializer : SerializerBase
|
||||
list.ReadOnly |= elements.Count == 1 && elements[0].Attributes!["editable", si.NamespaceURI].InnerText == "false";
|
||||
|
||||
list.AddChannel(chan);
|
||||
chan.SignalSource = ss;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region GetFileInformation()
|
||||
|
||||
public override string GetFileInformation()
|
||||
@@ -238,17 +298,54 @@ public class Serializer : SerializerBase
|
||||
#region Save()
|
||||
public override void Save()
|
||||
{
|
||||
// if splitTvRadioData is set, the 3 lists must be recombined and sorted together as a single list; there may still be multiple lists depending on input sources (DVB-T/C/S)
|
||||
var recombinedLists = new Dictionary<SignalSource, List<ChannelInfo>>();
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
{
|
||||
foreach (var chan in list.Channels)
|
||||
if (list.Channels.Count == 0 || list.ReadOnly)
|
||||
continue;
|
||||
|
||||
if (this.splitTvRadioData)
|
||||
{
|
||||
if (!recombinedLists.TryGetValue(list.SignalSource & ~SignalSource.MaskTvRadioData, out var combinedList))
|
||||
{
|
||||
combinedList = new List<ChannelInfo>();
|
||||
recombinedLists[list.SignalSource & ~SignalSource.MaskTvRadioData] = combinedList;
|
||||
}
|
||||
|
||||
combinedList.AddRange(list.Channels);
|
||||
}
|
||||
else
|
||||
{
|
||||
recombinedLists.Add(list.SignalSource, list.Channels.ToList());
|
||||
}
|
||||
}
|
||||
|
||||
// sort the channels in the recombined lists
|
||||
foreach (var list in recombinedLists.Values)
|
||||
{
|
||||
XmlNode serviceListInfoNode = null;
|
||||
foreach (var chan in list.OrderBy(c => c.NewProgramNr).ThenBy(c => c.OldProgramNr).ThenBy(c => c.RecordIndex))
|
||||
{
|
||||
if (chan is not Channel ch || ch.IsProxy)
|
||||
continue;
|
||||
|
||||
var si = ch.Xml;
|
||||
|
||||
// reorder nodes physically: first remove all, then add them 1-by-1
|
||||
if (serviceListInfoNode == null)
|
||||
{
|
||||
serviceListInfoNode = si.ParentNode;
|
||||
while (serviceListInfoNode!.HasChildNodes)
|
||||
serviceListInfoNode.RemoveChild(serviceListInfoNode.FirstChild);
|
||||
}
|
||||
serviceListInfoNode.AppendChild(si);
|
||||
|
||||
si["major_channel_number"]!.InnerText = ch.NewProgramNr.ToString();
|
||||
si["service_name"]!.InnerText = ch.Name;
|
||||
si["visible_service"]!.InnerText = ch.Hidden ? "1" : "3";
|
||||
si["user_edit_flag"]!.InnerText = "update";
|
||||
if (ch.IsNameModified)
|
||||
si["service_name"]!.InnerText = ch.Name;
|
||||
// si["visible_service"]!.InnerText = ch.Hidden ? "1" : "3"; // reported to have no effect in Philips v125 lists
|
||||
if (si["lock"] != null) // Sony lists don't have this elements
|
||||
si["lock"].InnerText = ch.Lock ? "1" : "0";
|
||||
}
|
||||
|
||||
@@ -1,25 +1,13 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
|
||||
</ItemGroup>
|
||||
@@ -32,11 +20,7 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,4 +1,8 @@
|
||||
using System;
|
||||
// The NuGet packages Microsoft.Data.Sqlite 9.0.0-9.0.5 throw an AccessViolationException and terminate the program when reading a "string" column with GetBytes()
|
||||
// uncomment this #define when using Sqlite < 9.x or when MS fixed the error
|
||||
//#define NoAccessViolationInSQLitePCLRaw
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Data;
|
||||
@@ -200,8 +204,8 @@ namespace ChanSort.Loader.Panasonic
|
||||
/// </summary>
|
||||
private void ReadNamesWithEncodingDetection(IDataReader r, IDictionary<string, int> field, Encoding encoding)
|
||||
{
|
||||
#if true || NoAccessViolationInSQLitePCLRaw
|
||||
// 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()
|
||||
#if NoAccessViolationInSQLitePCLRaw
|
||||
// The NuGet packages Microsoft.Data.Sqlite 9.0.0-9.0.5 throw an AccessViolationException and terminate the program when reading a "string" column with GetBytes()
|
||||
byte[] buffer = new byte[300];
|
||||
int len = (int)r.GetBytes(field["sname"], 0, buffer, 0, buffer.Length/3);
|
||||
#else
|
||||
|
||||
@@ -167,7 +167,7 @@ internal class IdtvChannelSerializer : SerializerBase
|
||||
if (!File.Exists(binFile))
|
||||
throw LoaderException.Fail("expected file not found: " + binFile);
|
||||
|
||||
string connString = $"Data Source={this.dbFile};Pooling=False";
|
||||
string connString = $"Data Source=\"{this.dbFile}\";Pooling=False";
|
||||
using var db = new SqliteConnection(connString);
|
||||
db.Open();
|
||||
using var cmd = db.CreateCommand();
|
||||
@@ -590,7 +590,7 @@ internal class IdtvChannelSerializer : SerializerBase
|
||||
#region SaveTvDb()
|
||||
private void SaveTvDb(IDictionary<ushort, int> newChannelIndexMap)
|
||||
{
|
||||
string connString = $"Data Source={this.dbFile};Pooling=False";
|
||||
string connString = $"Data Source=\"{this.dbFile}\";Pooling=False";
|
||||
using var db = new SqliteConnection(connString);
|
||||
db.Open();
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace ChanSort.Loader.Panasonic
|
||||
|
||||
this.CreateDummySatellites();
|
||||
|
||||
string channelConnString = $"Data Source={this.workFile};Pooling=False";
|
||||
string channelConnString = $"Data Source=\"{this.workFile}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(channelConnString);
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -301,7 +301,7 @@ order by s.ntype,major_channel
|
||||
#region Save()
|
||||
public override void Save()
|
||||
{
|
||||
string channelConnString = $"Data Source={this.workFile};Pooling=False";
|
||||
string channelConnString = $"Data Source=\"{this.workFile}\";Pooling=False";
|
||||
using (var conn = new SqliteConnection(channelConnString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -605,7 +605,7 @@ namespace ChanSort.Loader.Philips
|
||||
return;
|
||||
this.dataFilePaths.Add(dbPath);
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={dbPath};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{dbPath}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
|
||||
@@ -677,7 +677,7 @@ namespace ChanSort.Loader.Philips
|
||||
}
|
||||
}
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={tvDb};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{tvDb}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
cmd.CommandText = "select _id, display_number, display_name, original_network_id, transport_stream_id, service_id, service_type from channels";
|
||||
@@ -737,7 +737,7 @@ namespace ChanSort.Loader.Philips
|
||||
this.Features.FavoritesMode = FavoritesMode.OrderedPerSource;
|
||||
this.Features.MaxFavoriteLists = 4;
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={listDb};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{listDb}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
|
||||
@@ -795,7 +795,7 @@ namespace ChanSort.Loader.Philips
|
||||
this.Features.MaxFavoriteLists = 8;
|
||||
this.Features.AllowGapsInFavNumbers = false;
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={listDb};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{listDb}\";Pooling=False");
|
||||
conn.Open();
|
||||
|
||||
// older versions of ChanSort wrote invalid "list_id" values starting at 0 instead of 1 and going past 8.
|
||||
@@ -1105,7 +1105,7 @@ namespace ChanSort.Loader.Philips
|
||||
if (!File.Exists(dbPath))
|
||||
return;
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={dbPath};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{dbPath}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -1144,7 +1144,7 @@ namespace ChanSort.Loader.Philips
|
||||
if (!File.Exists(tvDb))
|
||||
return;
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={tvDb};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{tvDb}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -1185,7 +1185,7 @@ namespace ChanSort.Loader.Philips
|
||||
if (!File.Exists(listDb) || this.channelsById.Count == 0)
|
||||
return;
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={listDb};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{listDb}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -1248,7 +1248,7 @@ namespace ChanSort.Loader.Philips
|
||||
if (!File.Exists(listDb))
|
||||
return;
|
||||
|
||||
using var conn = new SqliteConnection($"Data Source={listDb};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{listDb}\";Pooling=False");
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
|
||||
@@ -1,24 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
@@ -44,12 +38,8 @@
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="DllClient.cs" />
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
@@ -229,14 +230,14 @@ namespace ChanSort.Loader.Philips
|
||||
LoadAndValidateMtkChannelList(dir);
|
||||
|
||||
// version 120 and 125 ignore the modified main channel numbers and only take changes from the favorites.xml
|
||||
if ((chanLstBin?.VersionMajor ?? 0) >= 120)
|
||||
{
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
{
|
||||
if (!list.IsMixedSourceFavoritesList)
|
||||
list.ReadOnly = true;
|
||||
}
|
||||
}
|
||||
//if ((chanLstBin?.VersionMajor ?? 0) >= 120)
|
||||
//{
|
||||
// foreach (var list in this.DataRoot.ChannelLists)
|
||||
// {
|
||||
// if (!list.IsMixedSourceFavoritesList)
|
||||
// list.ReadOnly = true;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -352,6 +353,8 @@ namespace ChanSort.Loader.Philips
|
||||
medium = fname;
|
||||
bool hasEncrypt = false;
|
||||
|
||||
var ver = this.chanLstBin?.VersionMajor ?? 0;
|
||||
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
{
|
||||
list.VisibleColumnFieldNames.Remove("ServiceType");
|
||||
@@ -417,7 +420,6 @@ namespace ChanSort.Loader.Philips
|
||||
if (!hasEncrypt)
|
||||
chList?.VisibleColumnFieldNames.Remove("Encrypted");
|
||||
|
||||
var ver = this.chanLstBin?.VersionMajor ?? 0;
|
||||
if (ver > 0)
|
||||
this.iniMapSection = ini.GetSection("Map" + ver);
|
||||
|
||||
@@ -765,12 +767,16 @@ namespace ChanSort.Loader.Philips
|
||||
|
||||
public override void Save()
|
||||
{
|
||||
bool readOnly = false;
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
{
|
||||
if (list.IsMixedSourceFavoritesList)
|
||||
this.UpdateFavList();
|
||||
else
|
||||
{
|
||||
this.UpdateChannelList(list);
|
||||
readOnly |= list.ReadOnly;
|
||||
}
|
||||
}
|
||||
|
||||
// It is unclear whether XML nodes must be sorted by the new program number or kept in the original order. This may be different for the various format versions.
|
||||
@@ -791,7 +797,14 @@ namespace ChanSort.Loader.Philips
|
||||
}
|
||||
|
||||
this.chanLstBin?.Save(this.FileName);
|
||||
this.mtkSerializer?.Save();
|
||||
|
||||
// save the MtkChannelList.xml for format 120 and 125
|
||||
if (mtkSerializer != null && !readOnly)
|
||||
{
|
||||
foreach (var list in mtkSerializer.DataRoot.ChannelLists) // apply Philips' LCN-ReadOnly to MediaTek's ReadOnly
|
||||
list.ReadOnly = false;
|
||||
this.mtkSerializer.Save();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -799,6 +812,31 @@ namespace ChanSort.Loader.Philips
|
||||
#region UpdateChannelList()
|
||||
private void UpdateChannelList(ChannelList list)
|
||||
{
|
||||
if (list.ReadOnly)
|
||||
return;
|
||||
|
||||
#if false
|
||||
// ensure consecutive numbers for channels (seems to be a requirement for successful import of MtkChannelList.xml)
|
||||
if (this.chanLstBin?.VersionMajor is >= 120 and <= 125)
|
||||
{
|
||||
var ordered = list.Channels
|
||||
.Where(c => !c.IsProxy)
|
||||
.OrderBy(c => (c.SignalSource & SignalSource.Tv) != 0 ? 0 : 1)
|
||||
.ThenBy(c => c.NewProgramNr > 0 ? 0 : 1)
|
||||
.ThenBy(c => c.NewProgramNr)
|
||||
.ThenBy(c => c.OldProgramNr)
|
||||
.ToList();
|
||||
int i = 0;
|
||||
foreach (var ch in ordered)
|
||||
{
|
||||
if (ch.IsProxy)
|
||||
list.Channels.Remove(ch);
|
||||
else
|
||||
ch.NewProgramNr = ++i;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
var padChannelNameBytes = this.iniMapSection?.GetBool("padChannelName", true) ?? true;
|
||||
var setFavoriteNumber = this.iniMapSection?.GetBool("setFavoriteNumber", false) ?? false;
|
||||
var userReorderChannel = this.iniMapSection?.GetString("userReorderChannel") ?? "";
|
||||
@@ -826,7 +864,7 @@ namespace ChanSort.Loader.Philips
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region UpdateRepairXml()
|
||||
|
||||
@@ -898,7 +936,7 @@ namespace ChanSort.Loader.Philips
|
||||
private void UpdateMtkChannel(Channel channel)
|
||||
{
|
||||
var mtk = channel.MtkChannel;
|
||||
//mtk.Name = channel.Name;
|
||||
mtk.Name = channel.Name;
|
||||
mtk.NewProgramNr = channel.NewProgramNr;
|
||||
mtk.Lock = channel.Lock;
|
||||
mtk.Skip = channel.Skip;
|
||||
@@ -1050,7 +1088,10 @@ namespace ChanSort.Loader.Philips
|
||||
#region GetFileInformation()
|
||||
public override string GetFileInformation()
|
||||
{
|
||||
return base.GetFileInformation() + this.logMessages.Replace("\n", "\r\n");
|
||||
return base.GetFileInformation()
|
||||
+ this.logMessages.Replace("\n", "\r\n")
|
||||
+ "\r\n\r\n"
|
||||
+ this.mtkSerializer?.GetFileInformation();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -1,29 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
@@ -38,12 +32,8 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -77,7 +77,7 @@ namespace ChanSort.Loader.Samsung.Zip
|
||||
{
|
||||
try
|
||||
{
|
||||
using var conn = new SqliteConnection($"Data Source={(this.TempPath + "\\sat")};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{this.TempPath + "\\sat"}\";Pooling=False");
|
||||
conn.Open();
|
||||
this.ReadSatDatabase(conn);
|
||||
}
|
||||
@@ -100,7 +100,7 @@ namespace ChanSort.Loader.Samsung.Zip
|
||||
FileType type;
|
||||
try
|
||||
{
|
||||
using var conn = new SqliteConnection($"Data Source={filePath};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{filePath}\";Pooling=False");
|
||||
conn.Open();
|
||||
using (var cmd = conn.CreateCommand())
|
||||
{
|
||||
@@ -535,7 +535,7 @@ namespace ChanSort.Loader.Samsung.Zip
|
||||
#region SaveChannelList()
|
||||
private void SaveChannelList(ChannelList channelList, string dbPath)
|
||||
{
|
||||
using var conn = new SqliteConnection($"Data Source={dbPath};Pooling=False");
|
||||
using var conn = new SqliteConnection($"Data Source=\"{dbPath}\";Pooling=False");
|
||||
conn.Open();
|
||||
using (var trans = conn.BeginTransaction())
|
||||
{
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -11,14 +11,16 @@ namespace ChanSort.Loader.Sony
|
||||
|
||||
public SerializerBase CreateSerializer(string inputFile)
|
||||
{
|
||||
// Bravia 7 (and 8?) from 2024 onward use the same sdb.xml filename, but it contains Mediatek's XML
|
||||
using (var rdr = new StreamReader(inputFile))
|
||||
{
|
||||
var line1 = rdr.ReadLine() ?? "";
|
||||
var line2 = rdr.ReadLine() ?? "";
|
||||
if (line1.Contains("<service_list_transfer>") || line2.Contains("<service_list_transfer>"))
|
||||
return new MediaTek.Serializer(inputFile, true);
|
||||
return new MediaTek.Serializer(inputFile);
|
||||
}
|
||||
|
||||
// older versions use Sony's proprietary XML
|
||||
return new Serializer(inputFile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,15 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Update="System.Memory" Version="4.6.3" />
|
||||
<PackageReference Update="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -194,7 +194,7 @@ namespace ChanSort.Loader.TCL
|
||||
{
|
||||
if (this.satFile == null)
|
||||
return;
|
||||
string satConnString = $"Data Source={satFile};Pooling=False";
|
||||
string satConnString = $"Data Source=\"{satFile}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(satConnString);
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -217,7 +217,7 @@ namespace ChanSort.Loader.TCL
|
||||
#region ReadDtvDataDb()
|
||||
private void ReadDtvDataDb()
|
||||
{
|
||||
string dtvConnString = $"Data Source={dtvFile};Pooling=False";
|
||||
string dtvConnString = $"Data Source=\"{dtvFile}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(dtvConnString);
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -372,7 +372,7 @@ left outer join CurCIOPSerType c on c.u8DtvRoute=p.u8DtvRoute
|
||||
#region Save()
|
||||
public override void Save()
|
||||
{
|
||||
string channelConnString = $"Data Source={dtvFile};Pooling=False";
|
||||
string channelConnString = $"Data Source=\"{dtvFile}\";Pooling=False";
|
||||
using (var conn = new SqliteConnection(channelConnString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
@@ -30,12 +31,8 @@
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
|
||||
<PackageReference Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -53,7 +53,7 @@ namespace ChanSort.Loader.Toshiba
|
||||
else
|
||||
workingDir = Path.GetDirectoryName(this.FileName);
|
||||
|
||||
var sysDataConnString = $"Data Source={this.workingDir + FILE_dvbSysData_db};Pooling=false";
|
||||
var sysDataConnString = $"Data Source=\"{this.workingDir + FILE_dvbSysData_db}\";Pooling=false";
|
||||
using (var conn = new SqliteConnection(sysDataConnString))
|
||||
{
|
||||
conn.Open();
|
||||
@@ -63,7 +63,7 @@ namespace ChanSort.Loader.Toshiba
|
||||
ReadTransponders(cmd);
|
||||
}
|
||||
|
||||
var mainDataConnString = $"Data Source={this.workingDir + FILE_dvbMainData_db};Pooling=False";
|
||||
var mainDataConnString = $"Data Source=\"{this.workingDir + FILE_dvbMainData_db}\";Pooling=False";
|
||||
using (var conn = new SqliteConnection(mainDataConnString))
|
||||
{
|
||||
conn.Open();
|
||||
@@ -71,7 +71,7 @@ namespace ChanSort.Loader.Toshiba
|
||||
ReadCryptInfo(cmd);
|
||||
}
|
||||
|
||||
var channelConnString = $"Data Source={this.workingDir + FILE_chmgt_db};Pooling=False";
|
||||
var channelConnString = $"Data Source=\"{this.workingDir + FILE_chmgt_db}\";Pooling=False";
|
||||
using (var conn = new SqliteConnection(channelConnString))
|
||||
{
|
||||
conn.Open();
|
||||
@@ -260,7 +260,7 @@ namespace ChanSort.Loader.Toshiba
|
||||
|
||||
public override void Save()
|
||||
{
|
||||
var channelConnString = $"Data Source={this.workingDir + FILE_chmgt_db};Pooling=False";
|
||||
var channelConnString = $"Data Source=\"{this.workingDir + FILE_chmgt_db}\";Pooling=False";
|
||||
using (var conn = new SqliteConnection(channelConnString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace ChanSort.Loader.Toshiba
|
||||
#region Load()
|
||||
public override void Load()
|
||||
{
|
||||
string sysDataConnString = $"Data Source={this.FileName};Pooling=False";
|
||||
string sysDataConnString = $"Data Source=\"{this.FileName}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(sysDataConnString);
|
||||
conn.Open();
|
||||
|
||||
@@ -208,7 +208,7 @@ left outer join ChanDataTable ac on ac.handle=a.m_channel_no
|
||||
#region Save()
|
||||
public override void Save()
|
||||
{
|
||||
string channelConnString = $"Data Source={this.FileName};Pooling=False";
|
||||
string channelConnString = $"Data Source=\"{this.FileName}\";Pooling=False";
|
||||
using (var conn = new SqliteConnection(channelConnString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -1,4 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
@@ -13,12 +14,17 @@
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Update="System.Memory" Version="4.6.3" />
|
||||
<PackageReference Update="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace ChanSort.Loader.VisionEdge4K
|
||||
#region Load()
|
||||
public override void Load()
|
||||
{
|
||||
string connString = $"Data Source={this.FileName};Pooling=False";
|
||||
string connString = $"Data Source=\"{this.FileName}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(connString);
|
||||
conn.Open();
|
||||
|
||||
@@ -281,7 +281,7 @@ order by p.tv_type,p.disp_order";
|
||||
#region Save()
|
||||
public override void Save()
|
||||
{
|
||||
string channelConnString = $"Data Source={this.FileName};Pooling=False";
|
||||
string channelConnString = $"Data Source=\"{this.FileName}\";Pooling=False";
|
||||
using var conn = new SqliteConnection(channelConnString);
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
|
||||
1070
source/ChanSort.sln
1070
source/ChanSort.sln
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>ChanSort.Ui</RootNamespace>
|
||||
@@ -218,13 +217,17 @@
|
||||
<PackageReference Include="DevExpress.Utils.UI" Version="23.2.5" />
|
||||
<PackageReference Include="DevExpress.Win" Version="23.2.5" />
|
||||
<PackageReference Include="DevExpress.Win.Reporting" Version="23.2.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Remove="ActionImages.resx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Update="System.Memory" Version="4.6.3" />
|
||||
<PackageReference Update="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>
|
||||
$(MSBuildProjectDirectory)\..\deployLibs.cmd $(TargetDir)
|
||||
|
||||
@@ -557,6 +557,8 @@ namespace ChanSort.Ui
|
||||
return null;
|
||||
}
|
||||
|
||||
SetCurrentDirectory(); // make sure .ini files are in the current dir
|
||||
|
||||
List<ISerializerPlugin> candidates = new List<ISerializerPlugin>();
|
||||
if (hint != null)
|
||||
candidates.Add(hint);
|
||||
@@ -630,6 +632,20 @@ namespace ChanSort.Ui
|
||||
|
||||
#endregion
|
||||
|
||||
#region SetCurrentDirectory()
|
||||
/// <summary>
|
||||
/// Sets the current directory to the directory from where the .exe was started.
|
||||
/// This is so that .ini files can be found by loaders
|
||||
/// </summary>
|
||||
internal static void SetCurrentDirectory()
|
||||
{
|
||||
var curDir = Path.GetDirectoryName(typeof(MainForm).Assembly.Location);
|
||||
if (curDir == null)
|
||||
return;
|
||||
Directory.SetCurrentDirectory(curDir);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region LoadTvDataFile()
|
||||
|
||||
private bool LoadTvDataFile(ISerializerPlugin plugin, string tvDataFile)
|
||||
@@ -641,6 +657,8 @@ namespace ChanSort.Ui
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||||
return false;
|
||||
}
|
||||
|
||||
SetCurrentDirectory();
|
||||
|
||||
// abort action if there is no currentTvSerializer for the input file
|
||||
SerializerBase serializer = this.GetSerializerForFile(tvDataFile, ref plugin);
|
||||
|
||||
@@ -53,22 +53,6 @@
|
||||
</System.Windows.Forms.ApplicationConfigurationSection>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -0,0 +1,204 @@
|
||||
#include "tll-common.h"
|
||||
|
||||
#define MAX_SAT_COUNT 64
|
||||
struct TLL44_Satellite;
|
||||
typedef TLL44_Satellite TLL_Satellite;
|
||||
|
||||
#define MAX_TP_COUNT 2400
|
||||
struct TLL48_Transponder;
|
||||
typedef TLL48_Transponder TLL_Transponder;
|
||||
|
||||
#define MAX_DVBS_COUNT 6000
|
||||
struct TLL84_SatChannel;
|
||||
typedef TLL84_SatChannel TLL_SatChannel;
|
||||
|
||||
#define MAX_LNB_COUNT 40
|
||||
struct TLL48_Lnb;
|
||||
typedef TLL48_Lnb TLL_Lnb;
|
||||
|
||||
#define DVBS_CHANNELLIST_PREFIXSIZE 2
|
||||
|
||||
#include "tll-satellite.h"
|
||||
|
||||
struct LF252_AnalogChannel
|
||||
{
|
||||
byte t1[8];
|
||||
TLL_SignalSource SignalSource;
|
||||
byte t1b;
|
||||
word ChannelTransponder1;
|
||||
word ProgramNr;
|
||||
word LogicalProgramNr1;
|
||||
byte t2[4];
|
||||
byte Favorites1;
|
||||
byte t2b[3];
|
||||
word Frequency1Div50;
|
||||
word APID1;
|
||||
byte ChannelNumberInBand;
|
||||
byte ChannelBand;
|
||||
byte t3[10];
|
||||
char CH_Name1[40];
|
||||
byte CH_NameLength1;
|
||||
byte t4;
|
||||
word SID1;
|
||||
byte t5a[38];
|
||||
word ChannelTransponder2;
|
||||
dword FrequencyDiv50;
|
||||
byte t6[6];
|
||||
word ONID;
|
||||
word TSID;
|
||||
byte t7[32];
|
||||
word ChannelTransponder3;
|
||||
word ProgramNr2;
|
||||
word LogicalProgramNr2;
|
||||
word ChannelTransponder4;
|
||||
byte Favorites2;
|
||||
TLL_EditFlags EditFlags;
|
||||
word SID2;
|
||||
byte ServiceType;
|
||||
byte CH_NameLength2;
|
||||
char CH_Name2[40];
|
||||
byte t10[12];
|
||||
word Frequency2Div50;
|
||||
word APID2;
|
||||
word u1;
|
||||
word u2;
|
||||
byte t11[12];
|
||||
};
|
||||
|
||||
struct LF252_AnalogBlock
|
||||
{
|
||||
dword BlockSize;
|
||||
dword ChannelCount;
|
||||
LF252_AnalogChannel Channels[ChannelCount];
|
||||
};
|
||||
|
||||
struct LF252_FirmwareBlock
|
||||
{
|
||||
dword BlockSize;
|
||||
byte u[BlockSize];
|
||||
};
|
||||
|
||||
struct LF252_DvbCtChannel
|
||||
{
|
||||
byte t1[8];
|
||||
TLL_SignalSource SignalSource;
|
||||
byte t1b;
|
||||
word ChannelTransponder1;
|
||||
word ProgramNr;
|
||||
word LogicalProgramNr1;
|
||||
byte t2a[4];
|
||||
byte Fav1;
|
||||
byte t2b[3];
|
||||
TLL_DvbID PcrPid1;
|
||||
TLL_DvbID APID1;
|
||||
byte t2c[8];
|
||||
TLL_DvbID VPID1;
|
||||
byte t3[6];
|
||||
char CH_Name1[40];
|
||||
byte CH_NameLength1;
|
||||
byte t4;
|
||||
word SID1;
|
||||
byte t5a[47];
|
||||
byte NitVersion;
|
||||
word ChannelTransponder2;
|
||||
byte t5b[2];
|
||||
dword Frequency;
|
||||
byte t6[4];
|
||||
word ONID;
|
||||
word TSID;
|
||||
word NID;
|
||||
dword SpecialData;
|
||||
byte t7[15];
|
||||
word ChannelTransponder3;
|
||||
byte t7b;
|
||||
word ProgramNr2;
|
||||
word LogicalProgramNr2;
|
||||
word ChannelTransponder4;
|
||||
byte Favorites2;
|
||||
TLL_EditFlags EditFlags;
|
||||
byte t7c[2];
|
||||
word SID2;
|
||||
byte ServiceType;
|
||||
byte CH_NameLength2;
|
||||
char CH_Name2[40];
|
||||
//byte t10[12];
|
||||
TLL_DvbID PcrPid2;
|
||||
TLL_DvbID APID2;
|
||||
word u1;
|
||||
word u2;
|
||||
byte t11[14];
|
||||
};
|
||||
|
||||
struct LF252_DvbCTBlock
|
||||
{
|
||||
dword BlockSize;
|
||||
dword ChannelCount;
|
||||
LF252_DvbCtChannel Channels[ChannelCount];
|
||||
};
|
||||
|
||||
struct TLL48_Transponder
|
||||
{
|
||||
byte t1[10];
|
||||
word TP_Number;
|
||||
word TP_Freq;
|
||||
byte t2[8];
|
||||
word NID;
|
||||
word TID;
|
||||
byte t3[3];
|
||||
word SRateTimes2;
|
||||
byte t4[9];
|
||||
byte SatIndexTimes2;
|
||||
byte t5[3];
|
||||
byte u40[4];
|
||||
};
|
||||
|
||||
struct TLL84_SatChannel
|
||||
{
|
||||
word LnbIndex;
|
||||
word t1;
|
||||
TLL_SignalSource SignalSource;
|
||||
//byte t2;
|
||||
word TP_Number;
|
||||
byte t2;
|
||||
TLL_DvbID CH_Number;
|
||||
word CH_NumberFixed;
|
||||
word TP_Number2;
|
||||
byte FavCrypt;
|
||||
TLL_EditFlags EditFlags;
|
||||
byte t3[2];
|
||||
word SID;
|
||||
byte ServiceType;
|
||||
byte CH_NameLength;
|
||||
char CH_Name[40];
|
||||
TLL_DvbID VPID;
|
||||
TLL_DvbID APID;
|
||||
byte t3[18];
|
||||
};
|
||||
|
||||
struct TLL48_Lnb
|
||||
{
|
||||
byte SettingsID;
|
||||
byte t2[3];
|
||||
byte SatelliteID;
|
||||
byte ScanSearchType;
|
||||
byte NetworkSearch;
|
||||
byte BlindSearch;
|
||||
byte t3[4];
|
||||
char FrequencyName[12];
|
||||
word LOF1;
|
||||
byte t4[2];
|
||||
word LOF2;
|
||||
byte t5[18];
|
||||
};
|
||||
|
||||
|
||||
public struct LF252
|
||||
{
|
||||
byte Header[4];
|
||||
|
||||
LF252_AnalogBlock Analog;
|
||||
LF252_FirmwareBlock Firmware;
|
||||
LF252_DvbCTBlock DvbCT;
|
||||
TLL_DvbSBlock DvbS;
|
||||
TLL_SettingsBlock Settings;
|
||||
};
|
||||
@@ -61,3 +61,9 @@ struct TLL_SettingsBlock
|
||||
dword BlockSize;
|
||||
byte Data[BlockSize];
|
||||
};
|
||||
|
||||
struct TLL_DvbID
|
||||
{
|
||||
word id : 12;
|
||||
word flags : 4;
|
||||
};
|
||||
@@ -1,13 +1,26 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<ImplicitUsings>disable</ImplicitUsings>
|
||||
<LangVersion>latest</LangVersion>
|
||||
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\app.config" Link="app.config" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- latest versions of nuget packages where older versions are indirectly included through other libraries; this should avoid a flood of compiler warnings -->
|
||||
<!--
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
<None Include="..\app.config" Link="app.config">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
-->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.1" />
|
||||
<PackageReference Include="System.Buffers" Version="4.6.1" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
103
source/Spike.LgWebOs5/MediaTekStatsCollector.cs
Normal file
103
source/Spike.LgWebOs5/MediaTekStatsCollector.cs
Normal file
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace Spike.MediatekXml
|
||||
{
|
||||
class MediatekXmlStatsCollector
|
||||
{
|
||||
private static readonly string[] ChannelListFileNames = ["sdb.xml", "MtkChannelList.xml"]; // Sony, Philips
|
||||
static void Main()
|
||||
{
|
||||
using var w = new StreamWriter(@"c:\sources\chansort\testfiles\testfiles_mediatek\stats.txt");
|
||||
w.WriteLine(
|
||||
"File\tNumChan\tDVB-?\tDVB-T\tDVB-C\tDVB-S\tDVB-IP\tOther\tTV\tRadio\tData\tInOrder\tConseq\tHasFav\t" +
|
||||
"LcnType\tOperator\tMultiBank\tScanType\tServiceType");
|
||||
|
||||
var dirs = new[] { "testfiles_philips\\120.0", "testfiles_philips\\125.0", "testfiles_sony\\mediatek" };
|
||||
foreach (var dir in dirs)
|
||||
ProcessDir(Path.Combine(@"c:\sources\chansort\testfiles", dir), w);
|
||||
}
|
||||
|
||||
private static void ProcessDir(string dir, StreamWriter w)
|
||||
{
|
||||
foreach (var bak in Directory.GetFiles(dir, "*.bak"))
|
||||
File.Copy(bak, bak.Replace(".bak", ""), true);
|
||||
|
||||
foreach (var subdir in Directory.GetDirectories(dir))
|
||||
ProcessDir(subdir, w);
|
||||
|
||||
foreach (var name in ChannelListFileNames)
|
||||
{
|
||||
var file = Path.Combine(dir, name);
|
||||
if (File.Exists(file))
|
||||
ProcessFile(file, w);
|
||||
}
|
||||
}
|
||||
|
||||
private static void ProcessFile(string file, StreamWriter w)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(file);
|
||||
try
|
||||
{
|
||||
var ser = new ChanSort.Loader.MediaTek.Serializer(file);
|
||||
ser.Load();
|
||||
int totalChans = 0;
|
||||
var conseq = true;
|
||||
var inOrder = true;
|
||||
var hasFav = false;
|
||||
var srcSum = new int[5];
|
||||
var typeSum = new int[4];
|
||||
foreach (var list in ser.DataRoot.ChannelLists)
|
||||
{
|
||||
if (list.IsMixedSourceFavoritesList)
|
||||
continue;
|
||||
totalChans += list.Channels.Count;
|
||||
var lastNr = 0;
|
||||
var chanCountBySrc = new int[5,4];
|
||||
foreach (var c in list.Channels)
|
||||
{
|
||||
inOrder &= c.OldProgramNr >= lastNr;
|
||||
if (!inOrder)
|
||||
{
|
||||
}
|
||||
conseq &= c.OldProgramNr == lastNr + 1;
|
||||
if (!conseq)
|
||||
{
|
||||
}
|
||||
lastNr = c.OldProgramNr;
|
||||
hasFav |= c.GetOldPosition(1) != -1;
|
||||
var s = c.SignalSource;
|
||||
var i0 = (s & SignalSource.Antenna) != 0 ? 1 : (s & SignalSource.Cable) != 0 ? 2 : (s & SignalSource.Sat) != 0 ? 3 : (s & SignalSource.Ip) != 0 ? 4 : 0;
|
||||
var i1 = (s & SignalSource.Tv) != 0 ? 1 : (s & SignalSource.Radio) != 0 ? 2 : (s & SignalSource.Data) != 0 ? 3 : 0;
|
||||
++chanCountBySrc[i0, i1];
|
||||
++srcSum[i0];
|
||||
++typeSum[i1];
|
||||
}
|
||||
}
|
||||
|
||||
sb.Append($"\t{totalChans}");
|
||||
foreach(var n in srcSum)
|
||||
sb.Append("\t").Append(n);
|
||||
foreach (var n in typeSum)
|
||||
sb.Append("\t").Append(n);
|
||||
sb.Append($"\t{inOrder}\t{conseq}\t{hasFav}");
|
||||
|
||||
var lcnType = ser.ScanParameters.TryGet("LcnType");
|
||||
var operat = ser.ScanParameters.TryGet("Operator");
|
||||
var multiBank = ser.ScanParameters.TryGet("MultiBank");
|
||||
var scanType = ser.ScanParameters.TryGet("ScanType");
|
||||
var serviceType = ser.ScanParameters.TryGet("ServiceType"); // n/a in Sony lists
|
||||
|
||||
sb.Append($"\t{lcnType}\t{operat}\t{multiBank}\t{scanType}\t{serviceType}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.Append("\t").Append(ex.Message);
|
||||
}
|
||||
w.WriteLine(sb.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,13 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>Spike.LgWebOs5</RootNamespace>
|
||||
<AssemblyName>Spike.LgWebOs5</AssemblyName>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Include="ChecksumFinder.cs" />
|
||||
<None Include="PhilipsXmlStatsCollector.cs" />
|
||||
<None Include="TechnisatDecrypt.cs" />
|
||||
<None Include="WebOs5StatsCollector.cs" />
|
||||
@@ -26,12 +18,13 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="ChecksumFinder.cs" />
|
||||
<Compile Remove="PhilipsXmlStatsCollector.cs" />
|
||||
<Compile Remove="TechnisatDecrypt.cs" />
|
||||
<Compile Remove="WebOs5StatsCollector.cs" />
|
||||
|
||||
@@ -1,14 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
@@ -17,13 +10,8 @@
|
||||
<Folder Include="TestFiles\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\app.config" Link="app.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
</Project>
|
||||
@@ -5,8 +5,8 @@
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup />
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
<Folder Include="TestFiles\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
</Project>
|
||||
@@ -18,8 +18,8 @@
|
||||
<Folder Include="TestFiles\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
</Project>
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using ChanSort.Api;
|
||||
using ChanSort.Loader.Hisense;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
@@ -8,6 +9,14 @@ namespace Test.Loader.Hisense.ChannelDb
|
||||
[TestClass]
|
||||
public class HisenseChannelDbTest
|
||||
{
|
||||
static HisenseChannelDbTest()
|
||||
{
|
||||
foreach (var ass in AppDomain.CurrentDomain.GetAssemblies())
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(ass.GetName().FullName+ ": GAC=" + ass.GlobalAssemblyCache + "; " + ass.Location);
|
||||
}
|
||||
}
|
||||
|
||||
#region TestSatChannelsAddedToCorrectLists
|
||||
[TestMethod]
|
||||
public void TestSatChannelsAddedToCorrectLists()
|
||||
|
||||
@@ -1,29 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Import Project="..\Solution.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
<ProjectReference Include="..\ChanSort.Loader.Hisense\ChanSort.Loader.Hisense.csproj" />
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<PostBuildEvent>
|
||||
$(MSBuildProjectDirectory)\..\deployLibs.cmd $(TargetDir)
|
||||
</PostBuildEvent>
|
||||
<PostBuildEvent>$(MSBuildProjectDirectory)\..\deployLibs.cmd $(MSBuildProjectDirectory)\bin\$(Configuration)\net48</PostBuildEvent>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -35,8 +35,8 @@
|
||||
<Content Include="GlobalClone.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
<PackageReference Include="NUnit" Version="3.14.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -26,8 +26,8 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
<PackageReference Include="NUnit" Version="3.14.0" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
|
||||
@@ -1,22 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\Solution.props" />
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
<ProjectReference Include="..\ChanSort.Loader.Panasonic\ChanSort.Loader.Panasonic.csproj" />
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -205,10 +205,10 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
</Project>
|
||||
@@ -45,7 +45,7 @@ namespace Test.Loader.Samsung.Scm
|
||||
var models = new Dictionary<string, string>();
|
||||
foreach (var file in list)
|
||||
{
|
||||
if (file.Contains("Apu TV") || file.Contains("__broken"))
|
||||
if (file.Contains("Apu TV") || file.Contains("__broken") || file.Contains("unsupported"))
|
||||
continue;
|
||||
|
||||
Debug.Print("Testing " + file);
|
||||
|
||||
@@ -1,49 +1,17 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<Choose>
|
||||
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
||||
</ItemGroup>
|
||||
</When>
|
||||
<Otherwise />
|
||||
</Choose>
|
||||
<Import Project="..\Solution.props" />
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj" />
|
||||
<ProjectReference Include="..\ChanSort.Loader.Samsung\ChanSort.Loader.Samsung.csproj" />
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Choose>
|
||||
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>
|
||||
$(MSBuildProjectDirectory)\..\deployLibs.cmd $(TargetDir)
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
</Project>
|
||||
@@ -18,7 +18,7 @@
|
||||
<Folder Include="TestFiles\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -9,6 +9,7 @@ namespace Test.Loader.Sony
|
||||
public class SonyXmlTest
|
||||
{
|
||||
// Android OS seems to use the "FormateVer" XML element, KDL 2012 and 2014 use "FormatVer"
|
||||
// Bravia 7 and 8 (2024, 2025) contain a Mediatek XML inside sdb.xml, just like Philips' "MtkChannelList.xml" with slight differences
|
||||
|
||||
#region TestAndroid ... ChannelsAddedToCorrectLists
|
||||
[TestMethod]
|
||||
@@ -51,6 +52,17 @@ namespace Test.Loader.Sony
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region TestMediatek (Bravia 2024,2025)
|
||||
[TestMethod]
|
||||
public void TestMediatekCableChannelsAddedToCorrectLists()
|
||||
{
|
||||
// there are 237 tv+radio channels in the list, but only a subset has assigned program numbers
|
||||
this.TestChannelsAddedToCorrectLists("mediatek-sdb.xml", SignalSource.DvbC | SignalSource.Tv, 237, 237, 0);
|
||||
this.TestChannelsAddedToCorrectLists("mediatek-sdb.xml", SignalSource.DvbC | SignalSource.Radio, 138, 0, 138);
|
||||
this.TestChannelsAddedToCorrectLists("mediatek-sdb.xml", SignalSource.DvbC | SignalSource.Data, 0, 0, 0);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region TestChannelsAddedToCorrectList
|
||||
private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTotal, int expectedTv, int expectedRadio, int dataProgramSid = 0, string dataProgramName = null)
|
||||
@@ -63,7 +75,13 @@ namespace Test.Loader.Sony
|
||||
var root = ser.DataRoot;
|
||||
|
||||
var list = root.GetChannelList(signalSource);
|
||||
Assert.IsNotNull(list);
|
||||
|
||||
if (list == null)
|
||||
{
|
||||
if (expectedTotal == 0)
|
||||
return;
|
||||
Assert.IsNotNull(list);
|
||||
}
|
||||
Assert.AreEqual(expectedTotal, list.Channels.Count);
|
||||
Assert.AreEqual(expectedTv, list.Channels.Count(ch => (ch.SignalSource & SignalSource.Tv) != 0));
|
||||
Assert.AreEqual(expectedRadio, list.Channels.Count(ch => (ch.SignalSource & SignalSource.Radio) != 0));
|
||||
@@ -190,6 +208,5 @@ namespace Test.Loader.Sony
|
||||
RoundtripTest.TestChannelAndFavListEditing(tempFile, new SonyPlugin());
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
</Project>
|
||||
4796
source/Test.Loader.Sony/TestFiles/mediatek-sdb.xml
Normal file
4796
source/Test.Loader.Sony/TestFiles/mediatek-sdb.xml
Normal file
File diff suppressed because it is too large
Load Diff
4934
source/Test.Loader.Sony/TestFiles/mediatek_sdb-cable.xml
Normal file
4934
source/Test.Loader.Sony/TestFiles/mediatek_sdb-cable.xml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\Solution.props" />
|
||||
<ItemGroup>
|
||||
<None Update="TestFiles\settingsDB.db">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
@@ -21,10 +14,10 @@
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.13" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.13" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.5" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
<ProjectReference Include="..\Test.Loader\Test.Loader.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\net48\NETStandard.Library.targets')" />
|
||||
</Project>
|
||||
@@ -28,7 +28,7 @@ namespace Test.Loader
|
||||
foreach(var file in list)
|
||||
{
|
||||
var lfile = file.ToLowerInvariant();
|
||||
if (lfile.Contains("globalclone") || lfile.Contains("atsc") || lfile.Contains("broken") || lfile.Contains("bad") || lfile.Contains("incomplete"))
|
||||
if (lfile.Contains("globalclone") || lfile.Contains("atsc") || lfile.Contains("broken") || lfile.Contains("bad") || lfile.Contains("incomplete") || lfile.Contains("unsupported"))
|
||||
continue;
|
||||
//Debug.Print("Testing " + file);
|
||||
try
|
||||
|
||||
@@ -1,19 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\Solution.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<OutputType>Library</OutputType>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
|
||||
<Visible>False</Visible>
|
||||
@@ -24,7 +14,7 @@
|
||||
<ProjectReference Include="..\ChanSort.Loader.LG\ChanSort.Loader.LG.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="SQLitePCLRaw.core" publicKeyToken="1488e028ca7ab535" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.0.5.1236" newVersion="2.0.5.1236" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="SQLitePCLRaw.provider.dynamic_cdecl" publicKeyToken="b68184102cba0b3b" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.0.5.1236" newVersion="2.0.5.1236" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -1,31 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- no longer used; using auto generated assembly bindings instead -->
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.3.0" newVersion="6.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.6.0" newVersion="4.1.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="SQLitePCLRaw.core" publicKeyToken="1488e028ca7ab535" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.0.5.1236" newVersion="2.0.5.1236" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.1.10.2445" newVersion="2.1.10.2445" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="SQLitePCLRaw.provider.dynamic_cdecl" publicKeyToken="b68184102cba0b3b" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.0.5.1236" newVersion="2.0.5.1236" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.1.10.2445" newVersion="2.1.10.2445" />
|
||||
</dependentAssembly>
|
||||
|
||||
</assemblyBinding>
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
cd "%~dp0"
|
||||
if "%1"=="" goto:eof
|
||||
|
||||
copy packages\SQLitePCLRaw.lib.e_sqlite3.2.1.2\runtimes\win-x64\native %1
|
||||
rem this script is deactivated
|
||||
|
||||
rem copy packages\SQLitePCLRaw.lib.e_sqlite3.2.1.2\runtimes\win-x64\native %1
|
||||
|
||||
goto :eof
|
||||
mkdir %1\runtimes\win-x64\native 2>nul
|
||||
copy %userprofile%\.nuget\packages\SQLitePCLRaw.lib.e_sqlite3\2.1.10\runtimes\win-x64\native %1\runtimes\win-x64\native
|
||||
copy %userprofile%\.nuget\packages\System.Memory\4.6.3\lib\net462\*.dll %1
|
||||
|
||||
:eof
|
||||
Reference in New Issue
Block a user