mirror of
https://github.com/PredatH0r/ChanSort.git
synced 2026-05-07 01:26:24 +02:00
- removed superfluous parameter from SerializerBase.Save()
- added "Pooling=False" parameter to all Sqlite connection strings to prevent open file locks after closing the connection and to avoid extreme delays when using CloseAllPools()
- C# code refactoring "using var" instead of "using ( ) { }" where possible
This commit is contained in:
@@ -183,7 +183,7 @@ internal class IdtvChannelSerializer : SerializerBase
|
||||
if (!File.Exists(binFile))
|
||||
throw LoaderException.Fail("expected file not found: " + binFile);
|
||||
|
||||
string connString = "Data Source=" + this.dbFile;
|
||||
string connString = $"Data Source={this.dbFile};Pooling=False";
|
||||
using var db = new SqliteConnection(connString);
|
||||
db.Open();
|
||||
using var cmd = db.CreateCommand();
|
||||
@@ -409,7 +409,7 @@ internal class IdtvChannelSerializer : SerializerBase
|
||||
|
||||
|
||||
#region Save()
|
||||
public override void Save(string tvOutputFile)
|
||||
public override void Save()
|
||||
{
|
||||
// saving the list requires to:
|
||||
// - update fields inside the .bin file data records and physically reorder the records
|
||||
@@ -593,66 +593,56 @@ internal class IdtvChannelSerializer : SerializerBase
|
||||
#region SaveTvDb()
|
||||
private void SaveTvDb(IDictionary<ushort, int> newChannelIndexMap)
|
||||
{
|
||||
try
|
||||
string connString = $"Data Source={this.dbFile};Pooling=False";
|
||||
using var db = new SqliteConnection(connString);
|
||||
db.Open();
|
||||
|
||||
using var trans = db.BeginTransaction();
|
||||
|
||||
using var upd = db.CreateCommand();
|
||||
upd.CommandText = "update channels set display_number=@progNr, browsable=@browseable, locked=@locked, favorite=@fav, channel_index=@recIdx where _id=@id"; // searchable=@searchable,
|
||||
upd.Parameters.Add("@id", SqliteType.Integer);
|
||||
upd.Parameters.Add("@progNr", SqliteType.Text);
|
||||
upd.Parameters.Add("@browseable", SqliteType.Integer);
|
||||
//upd.Parameters.Add("@searchable", SqliteType.Integer);
|
||||
upd.Parameters.Add("@locked", SqliteType.Integer);
|
||||
upd.Parameters.Add("@fav", SqliteType.Integer);
|
||||
upd.Parameters.Add("@recIdx", SqliteType.Integer);
|
||||
//upd.Parameters.Add("@ipf2", SqliteType.Integer);
|
||||
upd.Prepare();
|
||||
|
||||
using var del = db.CreateCommand();
|
||||
del.CommandText = "delete from channels where _id=@id";
|
||||
del.Parameters.Add("@id", SqliteType.Integer);
|
||||
del.Prepare();
|
||||
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
{
|
||||
string connString = "Data Source=" + this.dbFile;
|
||||
using var db = new SqliteConnection(connString);
|
||||
db.Open();
|
||||
|
||||
using var trans = db.BeginTransaction();
|
||||
|
||||
using var upd = db.CreateCommand();
|
||||
upd.CommandText = "update channels set display_number=@progNr, browsable=@browseable, locked=@locked, favorite=@fav, channel_index=@recIdx where _id=@id"; // searchable=@searchable,
|
||||
upd.Parameters.Add("@id", SqliteType.Integer);
|
||||
upd.Parameters.Add("@progNr", SqliteType.Text);
|
||||
upd.Parameters.Add("@browseable", SqliteType.Integer);
|
||||
//upd.Parameters.Add("@searchable", SqliteType.Integer);
|
||||
upd.Parameters.Add("@locked", SqliteType.Integer);
|
||||
upd.Parameters.Add("@fav", SqliteType.Integer);
|
||||
upd.Parameters.Add("@recIdx", SqliteType.Integer);
|
||||
//upd.Parameters.Add("@ipf2", SqliteType.Integer);
|
||||
upd.Prepare();
|
||||
|
||||
using var del = db.CreateCommand();
|
||||
del.CommandText = "delete from channels where _id=@id";
|
||||
del.Parameters.Add("@id", SqliteType.Integer);
|
||||
del.Prepare();
|
||||
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
foreach (var ch in list.Channels)
|
||||
{
|
||||
foreach (var ch in list.Channels)
|
||||
if (ch is not DbChannel dbc)
|
||||
continue;
|
||||
if (ch.NewProgramNr < 0 || ch.IsDeleted)
|
||||
{
|
||||
if (ch is not DbChannel dbc)
|
||||
continue;
|
||||
if (ch.NewProgramNr < 0 || ch.IsDeleted)
|
||||
{
|
||||
del.Parameters["@id"].Value = ch.RecordIndex;
|
||||
del.ExecuteNonQuery();
|
||||
}
|
||||
else
|
||||
{
|
||||
upd.Parameters["@id"].Value = ch.RecordIndex;
|
||||
upd.Parameters["@progNr"].Value = ch.NewProgramNr;
|
||||
upd.Parameters["@browseable"].Value = !ch.Skip;
|
||||
//upd.Parameters["@searchable"].Value = !ch.Hidden;
|
||||
upd.Parameters["@locked"].Value = ch.Lock;
|
||||
upd.Parameters["@fav"].Value = (int)ch.Favorites;
|
||||
upd.Parameters["@recIdx"].Value = newChannelIndexMap[(ushort)dbc.InternalProviderFlag2];
|
||||
//upd.Parameters["@ipf2"].Value = (int)(ushort)dbc.InternalProviderFlag2; // fix broken short/ushort/int sign extension
|
||||
upd.ExecuteNonQuery();
|
||||
}
|
||||
del.Parameters["@id"].Value = ch.RecordIndex;
|
||||
del.ExecuteNonQuery();
|
||||
}
|
||||
else
|
||||
{
|
||||
upd.Parameters["@id"].Value = ch.RecordIndex;
|
||||
upd.Parameters["@progNr"].Value = ch.NewProgramNr;
|
||||
upd.Parameters["@browseable"].Value = !ch.Skip;
|
||||
//upd.Parameters["@searchable"].Value = !ch.Hidden;
|
||||
upd.Parameters["@locked"].Value = ch.Lock;
|
||||
upd.Parameters["@fav"].Value = (int)ch.Favorites;
|
||||
upd.Parameters["@recIdx"].Value = newChannelIndexMap[(ushort)dbc.InternalProviderFlag2];
|
||||
//upd.Parameters["@ipf2"].Value = (int)(ushort)dbc.InternalProviderFlag2; // fix broken short/ushort/int sign extension
|
||||
upd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trans.Commit();
|
||||
}
|
||||
finally
|
||||
{
|
||||
// force closing the file and releasing the locks
|
||||
SqliteConnection.ClearAllPools();
|
||||
GC.Collect();
|
||||
GC.WaitForPendingFinalizers();
|
||||
}
|
||||
trans.Commit();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace ChanSort.Loader.Panasonic
|
||||
|
||||
this.CreateDummySatellites();
|
||||
|
||||
string channelConnString = "Data Source=" + this.workFile;
|
||||
string channelConnString = $"Data Source={this.workFile};Pooling=False";
|
||||
using var conn = new SqliteConnection(channelConnString);
|
||||
conn.Open();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -112,15 +112,13 @@ namespace ChanSort.Loader.Panasonic
|
||||
#region GetCypherMode()
|
||||
private CypherMode GetCypherMode(string file)
|
||||
{
|
||||
using (var stream = File.OpenRead(file))
|
||||
using (var rdr = new BinaryReader(stream))
|
||||
{
|
||||
uint value = (uint)rdr.ReadInt32();
|
||||
if (value == 0x694C5153) return CypherMode.None; // "SQLi"
|
||||
if (value == 0x42445350) return CypherMode.HeaderAndChecksum; // "PSDB"
|
||||
if (value == 0xA07DCB50) return CypherMode.Encryption;
|
||||
return CypherMode.Unknown;
|
||||
}
|
||||
using var stream = File.OpenRead(file);
|
||||
using var rdr = new BinaryReader(stream);
|
||||
uint value = (uint)rdr.ReadInt32();
|
||||
if (value == 0x694C5153) return CypherMode.None; // "SQLi"
|
||||
if (value == 0x42445350) return CypherMode.HeaderAndChecksum; // "PSDB"
|
||||
if (value == 0xA07DCB50) return CypherMode.Encryption;
|
||||
return CypherMode.Unknown;
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -297,15 +295,11 @@ order by s.ntype,major_channel
|
||||
|
||||
|
||||
#region Save()
|
||||
public override void Save(string tvOutputFile)
|
||||
public override void Save()
|
||||
{
|
||||
this.FileName = tvOutputFile;
|
||||
|
||||
try
|
||||
string channelConnString = $"Data Source={this.workFile};Pooling=False";
|
||||
using (var conn = new SqliteConnection(channelConnString))
|
||||
{
|
||||
string channelConnString = "Data Source=" + this.workFile;
|
||||
using var conn = new SqliteConnection(channelConnString);
|
||||
|
||||
conn.Open();
|
||||
using var trans = conn.BeginTransaction();
|
||||
using var cmd = conn.CreateCommand();
|
||||
@@ -322,13 +316,6 @@ order by s.ntype,major_channel
|
||||
cmd.Transaction = null;
|
||||
this.RepairCorruptedDatabaseImage(cmd);
|
||||
}
|
||||
finally
|
||||
{
|
||||
// force closing the file and releasing the locks
|
||||
SqliteConnection.ClearAllPools();
|
||||
GC.Collect();
|
||||
GC.WaitForPendingFinalizers();
|
||||
}
|
||||
|
||||
this.WriteCypheredFile();
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ namespace ChanSort.Loader.Panasonic
|
||||
|
||||
#region Save()
|
||||
|
||||
public override void Save(string tvOutputFile)
|
||||
public override void Save()
|
||||
{
|
||||
var sec = ini.GetSection("channel_list.xml");
|
||||
var reorder = sec?.GetBool("reorderRecordsByChannelNumber", true) ?? true;
|
||||
@@ -194,8 +194,7 @@ namespace ChanSort.Loader.Panasonic
|
||||
var xml = stringWriter.ToString();
|
||||
xml = UnescapeXmlChars(xml); // create same broken XML as the original export with unescaped entities
|
||||
xml = xml.Replace(" />", "/>"); // original file has no space before the element end
|
||||
File.WriteAllText(tvOutputFile, xml, xmlSettings.Encoding);
|
||||
this.FileName = tvOutputFile;
|
||||
File.WriteAllText(this.FileName, xml, xmlSettings.Encoding);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user