- replaced System.Data.SQLite with Microsoft.Data.Sqlite because MS removed the required VC2010 Redist x86 from their website

- updated bunch of other Nuget packages
This commit is contained in:
Horst Beham
2021-04-25 18:31:05 +02:00
parent fb4005c99b
commit 8b956ed364
76 changed files with 1593 additions and 718 deletions

View File

@@ -14,6 +14,8 @@
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -66,12 +68,37 @@
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Data.SQLite">
<HintPath>..\DLL\System.Data.SQLite.dll</HintPath>
<Reference Include="Microsoft.Data.Sqlite, Version=5.0.5.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.Sqlite.Core.5.0.5\lib\netstandard2.0\Microsoft.Data.Sqlite.dll</HintPath>
</Reference>
<Reference Include="SQLitePCLRaw.batteries_v2, Version=2.0.4.976, Culture=neutral, PublicKeyToken=8226ea5df37bcae9, processorArchitecture=MSIL">
<HintPath>..\packages\SQLitePCLRaw.bundle_e_sqlite3.2.0.4\lib\net461\SQLitePCLRaw.batteries_v2.dll</HintPath>
</Reference>
<Reference Include="SQLitePCLRaw.core, Version=2.0.4.976, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
<HintPath>..\packages\SQLitePCLRaw.core.2.0.4\lib\netstandard2.0\SQLitePCLRaw.core.dll</HintPath>
</Reference>
<Reference Include="SQLitePCLRaw.nativelibrary, Version=2.0.4.976, Culture=neutral, PublicKeyToken=502ed628492ab262, processorArchitecture=MSIL">
<HintPath>..\packages\SQLitePCLRaw.bundle_e_sqlite3.2.0.4\lib\net461\SQLitePCLRaw.nativelibrary.dll</HintPath>
</Reference>
<Reference Include="SQLitePCLRaw.provider.dynamic_cdecl, Version=2.0.4.976, Culture=neutral, PublicKeyToken=b68184102cba0b3b, processorArchitecture=MSIL">
<HintPath>..\packages\SQLitePCLRaw.provider.dynamic_cdecl.2.0.4\lib\netstandard2.0\SQLitePCLRaw.provider.dynamic_cdecl.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
@@ -95,12 +122,21 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="ChanSort.Loader.Samsung.ini">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\SQLitePCLRaw.lib.e_sqlite3.2.0.4\build\net461\SQLitePCLRaw.lib.e_sqlite3.targets" Condition="Exists('..\packages\SQLitePCLRaw.lib.e_sqlite3.2.0.4\build\net461\SQLitePCLRaw.lib.e_sqlite3.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\SQLitePCLRaw.lib.e_sqlite3.2.0.4\build\net461\SQLitePCLRaw.lib.e_sqlite3.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SQLitePCLRaw.lib.e_sqlite3.2.0.4\build\net461\SQLitePCLRaw.lib.e_sqlite3.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@@ -1,5 +1,5 @@
using System.Collections.Generic;
using System.Data.SQLite;
using System.Data;
using ChanSort.Api;
namespace ChanSort.Loader.Samsung.Zip
@@ -7,7 +7,7 @@ namespace ChanSort.Loader.Samsung.Zip
internal class DbChannel : ChannelInfo
{
#region ctor()
internal DbChannel(SQLiteDataReader r, IDictionary<string, int> field, DbSerializer loader, Dictionary<long, string> providers, Satellite sat, Transponder tp)
internal DbChannel(IDataReader r, IDictionary<string, int> field, DbSerializer loader, Dictionary<long, string> providers, Satellite sat, Transponder tp)
{
var chType = r.GetInt32(field["chType"]);
this.SignalSource = DbSerializer.ChTypeToSignalSource(chType);
@@ -49,14 +49,14 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadAnalogData()
private void ReadAnalogData(SQLiteDataReader r, IDictionary<string, int> field)
private void ReadAnalogData(IDataReader r, IDictionary<string, int> field)
{
}
#endregion
#region ReadDvbData()
protected void ReadDvbData(SQLiteDataReader r, IDictionary<string, int> field, DbSerializer loader, Dictionary<long, string> providers)
protected void ReadDvbData(IDataReader r, IDictionary<string, int> field, DbSerializer loader, Dictionary<long, string> providers)
{
this.ShortName = loader.ReadUtf16(r, field["srvName"]);
this.RecordOrder = r.GetInt32(field["major"]);

View File

@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Data.Sqlite;
using ChanSort.Api;
namespace ChanSort.Loader.Samsung.Zip
@@ -48,7 +48,7 @@ namespace ChanSort.Loader.Samsung.Zip
{
try
{
using (var conn = new SQLiteConnection("Data Source=" + this.TempPath + "\\sat"))
using (var conn = new SqliteConnection("Data Source=" + this.TempPath + "\\sat"))
{
conn.Open();
this.ReadSatDatabase(conn);
@@ -70,7 +70,7 @@ namespace ChanSort.Loader.Samsung.Zip
continue;
try
{
using (var conn = new SQLiteConnection("Data Source=" + filePath))
using (var conn = new SqliteConnection("Data Source=" + filePath))
{
FileType type;
conn.Open();
@@ -100,7 +100,7 @@ namespace ChanSort.Loader.Samsung.Zip
finally
{
// force closing the file and releasing the locks
SQLiteConnection.ClearAllPools();
//SqliteConnection.ClearAllPools();
GC.Collect();
GC.WaitForPendingFinalizers();
}
@@ -108,7 +108,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region RepairCorruptedDatabaseImage()
private void RepairCorruptedDatabaseImage(SQLiteCommand cmd)
private void RepairCorruptedDatabaseImage(IDbCommand cmd)
{
cmd.CommandText = "REINDEX";
cmd.ExecuteNonQuery();
@@ -116,7 +116,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region DetectFileType()
private FileType DetectFileType(SQLiteCommand cmd)
private FileType DetectFileType(IDbCommand cmd)
{
this.tableNames.Clear();
cmd.CommandText = "select name from sqlite_master where type='table'";
@@ -141,7 +141,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadSatDatabase()
private void ReadSatDatabase(SQLiteConnection conn)
private void ReadSatDatabase(SqliteConnection conn)
{
using (var cmd = conn.CreateCommand())
{
@@ -153,7 +153,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadSatellites()
private void ReadSatellites(SQLiteCommand cmd)
private void ReadSatellites(IDbCommand cmd)
{
cmd.CommandText = "select distinct satId, cast(satName as blob), satPos, satDir from SAT";
using (var r = cmd.ExecuteReader())
@@ -174,7 +174,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadTransponders()
private void ReadTransponders(SQLiteCommand cmd)
private void ReadTransponders(IDbCommand cmd)
{
cmd.CommandText = "select satId, tpFreq, tpPol, tpSr, tpId from SAT_TP";
using (var r = cmd.ExecuteReader())
@@ -198,7 +198,7 @@ namespace ChanSort.Loader.Samsung.Zip
#region ReadChannelDatabase()
private void ReadChannelDatabase(SQLiteConnection conn, string dbPath, FileType fileType)
private void ReadChannelDatabase(SqliteConnection conn, string dbPath, FileType fileType)
{
this.channelById.Clear();
using (var cmd = conn.CreateCommand())
@@ -212,7 +212,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadProviders()
private Dictionary<long, string> ReadProviders(SQLiteCommand cmd)
private Dictionary<long, string> ReadProviders(IDbCommand cmd)
{
var dict = new Dictionary<long, string>();
try
@@ -236,7 +236,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadChannels()
private ChannelList ReadChannels(SQLiteCommand cmd, string dbPath, Dictionary<long, string> providers, FileType fileType)
private ChannelList ReadChannels(IDbCommand cmd, string dbPath, Dictionary<long, string> providers, FileType fileType)
{
var signalSource = DetectSignalSource(cmd, fileType);
@@ -299,7 +299,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region DetectSignalSource()
private static SignalSource DetectSignalSource(SQLiteCommand cmd, FileType fileType)
private static SignalSource DetectSignalSource(IDbCommand cmd, FileType fileType)
{
if (fileType == FileType.ChannelDbIp)
return SignalSource.IP|SignalSource.Digital;
@@ -368,7 +368,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadFavorites()
private void ReadFavorites(SQLiteCommand cmd)
private void ReadFavorites(IDbCommand cmd)
{
cmd.CommandText = "select srvId, fav, pos from SRV_FAV";
var r = cmd.ExecuteReader();
@@ -390,12 +390,23 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region ReadUtf16()
internal string ReadUtf16(SQLiteDataReader r, int fieldIndex)
internal string ReadUtf16(IDataReader r, int fieldIndex)
{
if (r.IsDBNull(fieldIndex))
return null;
byte[] nameBytes = new byte[200];
int nameLen = (int)r.GetBytes(fieldIndex, 0, nameBytes, 0, nameBytes.Length);
// Microsoft.Data.SqlDataReader (and the underlying native DLLs) are bugged and throw a memory access violation when using r.GetBytes(...)
// nameLen = (int)r.GetBytes(fieldIndex, 0, nameBytes, 0, nameBytes.Length);
int nameLen = 0;
var obj = r.GetValue(fieldIndex);
if (obj is byte[] buffer)
{
nameBytes = buffer;
nameLen = buffer.Length;
}
this.encoding ??= AutoDetectUtf16Encoding(nameBytes, nameLen);
if (this.encoding == null)
return string.Empty;
@@ -486,7 +497,7 @@ namespace ChanSort.Loader.Samsung.Zip
}
// force closing the file and releasing the locks
SQLiteConnection.ClearAllPools();
//SqliteConnection.ClearAllPools();
GC.Collect();
GC.WaitForPendingFinalizers();
@@ -497,44 +508,46 @@ namespace ChanSort.Loader.Samsung.Zip
#region SaveChannelList()
private void SaveChannelList(ChannelList channelList, string dbPath)
{
using var conn = new SQLiteConnection("Data Source=" + dbPath);
using var conn = new SqliteConnection("Data Source=" + dbPath);
conn.Open();
using var cmdUpdateSrv = PrepareUpdateCommand(conn);
using var cmdDeleteSrv = PrepareDeleteCommand(conn, (channelList.SignalSource & SignalSource.Digital) != 0);
using var cmdInsertFav = PrepareInsertFavCommand(conn);
using var cmdUpdateFav = PrepareUpdateFavCommand(conn);
using var cmdDeleteFav = PrepareDeleteFavCommand(conn);
using (var trans = conn.BeginTransaction())
{
using var cmdUpdateSrv = PrepareUpdateCommand(conn);
using var cmdDeleteSrv = PrepareDeleteCommand(conn, (channelList.SignalSource & SignalSource.Digital) != 0);
using var cmdInsertFav = PrepareInsertFavCommand(conn);
using var cmdUpdateFav = PrepareUpdateFavCommand(conn);
using var cmdDeleteFav = PrepareDeleteFavCommand(conn);
Editor.SequentializeFavPos(channelList, 5);
this.WriteChannels(cmdUpdateSrv, cmdDeleteSrv, cmdInsertFav, cmdUpdateFav, cmdDeleteFav, channelList);
trans.Commit();
}
this.RepairCorruptedDatabaseImage(cmdUpdateSrv);
using var cmd = conn.CreateCommand();
this.RepairCorruptedDatabaseImage(cmd);
}
#endregion
#region Prepare*Command()
private SQLiteCommand PrepareUpdateCommand(SQLiteConnection conn)
private SqliteCommand PrepareUpdateCommand(SqliteConnection conn)
{
var canUpdateNames = this.Features.ChannelNameEdit != ChannelNameEditMode.None;
var cmd = conn.CreateCommand();
var updateSrvName = canUpdateNames ? ", srvName=cast(@srvname as varchar)" : "";
cmd.CommandText = "update SRV set major=@nr, lockMode=@lock, hideGuide=@hidden, hidden=@hidden, numSel=@numsel" + updateSrvName + " where srvId=@id";
cmd.Parameters.Add(new SQLiteParameter("@id", DbType.Int64));
cmd.Parameters.Add(new SQLiteParameter("@nr", DbType.Int32));
cmd.Parameters.Add(new SQLiteParameter("@lock", DbType.Boolean));
cmd.Parameters.Add(new SQLiteParameter("@hidden", DbType.Boolean));
cmd.Parameters.Add(new SQLiteParameter("@numsel", DbType.Boolean));
cmd.Parameters.Add("@id", SqliteType.Integer);
cmd.Parameters.Add("@nr", SqliteType.Integer);
cmd.Parameters.Add("@lock", SqliteType.Integer);
cmd.Parameters.Add("@hidden", SqliteType.Integer);
cmd.Parameters.Add("@numsel", SqliteType.Integer);
if (canUpdateNames)
cmd.Parameters.Add(new SQLiteParameter("@srvname", DbType.Binary));
cmd.Parameters.Add("@srvname", SqliteType.Blob);
cmd.Prepare();
return cmd;
}
private SQLiteCommand PrepareDeleteCommand(SQLiteConnection conn, bool digital)
private SqliteCommand PrepareDeleteCommand(SqliteConnection conn, bool digital)
{
var cmd = conn.CreateCommand();
var sql = new StringBuilder();
@@ -545,38 +558,38 @@ namespace ChanSort.Loader.Samsung.Zip
sql.AppendLine($"; delete from {r.GetString(0)} where srvId=@id");
}
cmd.CommandText = sql.ToString();
cmd.Parameters.Add(new SQLiteParameter("@id", DbType.Int64));
cmd.Parameters.Add("@id", SqliteType.Integer);
cmd.Prepare();
return cmd;
}
private SQLiteCommand PrepareInsertFavCommand(SQLiteConnection conn)
private SqliteCommand PrepareInsertFavCommand(SqliteConnection conn)
{
var cmd = conn.CreateCommand();
cmd.CommandText = "insert into SRV_FAV (srvId, fav, pos) values (@id, @fav, @pos)";
cmd.Parameters.Add(new SQLiteParameter("@id", DbType.Int64));
cmd.Parameters.Add(new SQLiteParameter("@fav", DbType.Int32));
cmd.Parameters.Add(new SQLiteParameter("@pos", DbType.Int32));
cmd.Parameters.Add("@id", SqliteType.Integer);
cmd.Parameters.Add("@fav", SqliteType.Integer);
cmd.Parameters.Add("@pos", SqliteType.Integer);
cmd.Prepare();
return cmd;
}
private SQLiteCommand PrepareUpdateFavCommand(SQLiteConnection conn)
private SqliteCommand PrepareUpdateFavCommand(SqliteConnection conn)
{
var cmd = conn.CreateCommand();
cmd.CommandText = "update SRV_FAV set pos=@pos where srvId=@id and fav=@fav";
cmd.Parameters.Add(new SQLiteParameter("@id", DbType.Int64));
cmd.Parameters.Add(new SQLiteParameter("@fav", DbType.Int32));
cmd.Parameters.Add(new SQLiteParameter("@pos", DbType.Int32));
cmd.Parameters.Add("@id", SqliteType.Integer);
cmd.Parameters.Add("@fav", SqliteType.Integer);
cmd.Parameters.Add("@pos", SqliteType.Integer);
cmd.Prepare();
return cmd;
}
private SQLiteCommand PrepareDeleteFavCommand(SQLiteConnection conn)
private SqliteCommand PrepareDeleteFavCommand(SqliteConnection conn)
{
var cmd = conn.CreateCommand();
cmd.CommandText = "delete from SRV_FAV where srvId=@id and fav=@fav";
cmd.Parameters.Add(new SQLiteParameter("@id", DbType.Int64));
cmd.Parameters.Add(new SQLiteParameter("@fav", DbType.Int32));
cmd.Parameters.Add("@id", SqliteType.Integer);
cmd.Parameters.Add("@fav", SqliteType.Integer);
cmd.Prepare();
return cmd;
}
@@ -584,7 +597,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region WriteChannels()
private void WriteChannels(SQLiteCommand cmdUpdateSrv, SQLiteCommand cmdDeleteSrv, SQLiteCommand cmdInsertFav, SQLiteCommand cmdUpdateFav, SQLiteCommand cmdDeleteFav,
private void WriteChannels(SqliteCommand cmdUpdateSrv, SqliteCommand cmdDeleteSrv, SqliteCommand cmdInsertFav, SqliteCommand cmdUpdateFav, SqliteCommand cmdDeleteFav,
ChannelList channelList, bool analog = false)
{
bool canUpdateNames = this.Features.ChannelNameEdit != ChannelNameEditMode.None;

View File

@@ -0,0 +1,11 @@
<?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-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Data.Sqlite" version="5.0.5" targetFramework="net48" />
<package id="Microsoft.Data.Sqlite.Core" version="5.0.5" targetFramework="net48" />
<package id="SQLitePCLRaw.bundle_e_sqlite3" version="2.0.4" targetFramework="net48" />
<package id="SQLitePCLRaw.core" version="2.0.4" targetFramework="net48" />
<package id="SQLitePCLRaw.lib.e_sqlite3" version="2.0.4" targetFramework="net48" />
<package id="SQLitePCLRaw.provider.dynamic_cdecl" version="2.0.4" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net48" />
</packages>