Ensure runtime closes database connection after each operation.

This commit is contained in:
2020-04-01 17:33:35 +01:00
parent ef65b70ddd
commit 801611f682

View File

@@ -63,14 +63,18 @@ namespace Aaru.Core
/// <summary>Loads saved statistics from disk</summary>
public static void LoadStats()
{
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
try
{
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
if(File.Exists(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml")))
try
{
var allStats = new Stats();
var xs = new XmlSerializer(allStats.GetType());
var sr = new StreamReader(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml"));
allStats = (Stats)xs.Deserialize(sr);
sr.Close();
@@ -78,7 +82,8 @@ namespace Aaru.Core
{
if(allStats.Commands.Analyze > 0)
{
Command command = ctx.Commands.FirstOrDefault(c => c.Name == "analyze" && c.Synchronized) ??
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "analyze" && c.Synchronized) ??
new Command
{
Name = "analyze", Synchronized = true
@@ -91,7 +96,8 @@ namespace Aaru.Core
if(allStats.Commands.Checksum > 0)
{
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "checksum" && c.Synchronized) ?? new Command
ctx.Commands.FirstOrDefault(c => c.Name == "checksum" && c.Synchronized) ??
new Command
{
Name = "checksum", Synchronized = true
};
@@ -102,7 +108,8 @@ namespace Aaru.Core
if(allStats.Commands.Compare > 0)
{
Command command = ctx.Commands.FirstOrDefault(c => c.Name == "compare" && c.Synchronized) ??
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "compare" && c.Synchronized) ??
new Command
{
Name = "compare", Synchronized = true
@@ -140,7 +147,8 @@ namespace Aaru.Core
if(allStats.Commands.Decode > 0)
{
Command command = ctx.Commands.FirstOrDefault(c => c.Name == "decode" && c.Synchronized) ??
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "decode" && c.Synchronized) ??
new Command
{
Name = "decode", Synchronized = true
@@ -191,7 +199,8 @@ namespace Aaru.Core
if(allStats.Commands.Entropy > 0)
{
Command command = ctx.Commands.FirstOrDefault(c => c.Name == "entropy" && c.Synchronized) ??
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "entropy" && c.Synchronized) ??
new Command
{
Name = "entropy", Synchronized = true
@@ -216,7 +225,8 @@ namespace Aaru.Core
if(allStats.Commands.Formats > 0)
{
Command command = ctx.Commands.FirstOrDefault(c => c.Name == "formats" && c.Synchronized) ??
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "formats" && c.Synchronized) ??
new Command
{
Name = "formats", Synchronized = true
@@ -306,7 +316,8 @@ namespace Aaru.Core
if(allStats.Commands.PrintHex > 0)
{
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "printhex" && c.Synchronized) ?? new Command
ctx.Commands.FirstOrDefault(c => c.Name == "printhex" && c.Synchronized) ??
new Command
{
Name = "printhex", Synchronized = true
};
@@ -317,7 +328,8 @@ namespace Aaru.Core
if(allStats.Commands.Verify > 0)
{
Command command = ctx.Commands.FirstOrDefault(c => c.Name == "verify" && c.Synchronized) ??
Command command =
ctx.Commands.FirstOrDefault(c => c.Name == "verify" && c.Synchronized) ??
new Command
{
Name = "verify", Synchronized = true
@@ -340,7 +352,8 @@ namespace Aaru.Core
c.Version == operatingSystem.version &&
c.Synchronized) ?? new OperatingSystem
{
Name = operatingSystem.name, Version = operatingSystem.version, Synchronized = true
Name = operatingSystem.name, Version = operatingSystem.version,
Synchronized = true
};
existing.Count += (ulong)operatingSystem.Value;
@@ -353,7 +366,8 @@ namespace Aaru.Core
if(string.IsNullOrWhiteSpace(nvs.name))
continue;
Version existing = ctx.Versions.FirstOrDefault(c => c.Name == nvs.name && c.Synchronized) ??
Version existing =
ctx.Versions.FirstOrDefault(c => c.Name == nvs.name && c.Synchronized) ??
new Version
{
Name = nvs.name, Synchronized = true
@@ -437,8 +451,8 @@ namespace Aaru.Core
if(string.IsNullOrWhiteSpace(nvs.name))
continue;
Filter existing = ctx.Filters.FirstOrDefault(c => c.Name == nvs.name && c.Synchronized) ??
new Filter
Filter existing =
ctx.Filters.FirstOrDefault(c => c.Name == nvs.name && c.Synchronized) ?? new Filter
{
Name = nvs.name, Synchronized = true
};
@@ -458,7 +472,8 @@ namespace Aaru.Core
ctx.SeenDevices.Add(new DeviceStat
{
Bus = device.Bus, Manufacturer = device.Manufacturer, Model = device.Model,
Bus = device.Bus, Manufacturer = device.Manufacturer,
Model = device.Model,
Revision = device.Revision, Synchronized = true
});
}
@@ -493,8 +508,8 @@ namespace Aaru.Core
ctx.OperatingSystems.Add(new OperatingSystem
{
Name = DetectOS.GetRealPlatformID().ToString(), Synchronized = false, Version = DetectOS.GetVersion(),
Count = 1
Name = DetectOS.GetRealPlatformID().ToString(), Synchronized = false,
Version = DetectOS.GetVersion(), Count = 1
});
ctx.Versions.Add(new Version
@@ -502,8 +517,6 @@ namespace Aaru.Core
Name = CommonTypes.Interop.Version.GetVersion(), Synchronized = false, Count = 1
});
try
{
ctx.SaveChanges();
}
catch(SqliteException ex)
@@ -518,7 +531,8 @@ namespace Aaru.Core
{
try
{
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.SaveChanges();
}
catch(SqliteException ex)
@@ -537,7 +551,7 @@ namespace Aaru.Core
{
var submitThread = new Thread(() =>
{
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
try
{
@@ -1174,7 +1188,7 @@ namespace Aaru.Core
!Settings.Settings.Current.Stats.DeviceStats)
return;
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.Commands.Add(new Command
{
@@ -1203,7 +1217,7 @@ namespace Aaru.Core
!Settings.Settings.Current.Stats.FilesystemStats)
return;
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.Filesystems.Add(new Filesystem
{
@@ -1232,7 +1246,7 @@ namespace Aaru.Core
!Settings.Settings.Current.Stats.PartitionStats)
return;
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.Partitions.Add(new Partition
{
@@ -1261,7 +1275,7 @@ namespace Aaru.Core
!Settings.Settings.Current.Stats.FilterStats)
return;
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.Filters.Add(new Filter
{
@@ -1290,7 +1304,7 @@ namespace Aaru.Core
!Settings.Settings.Current.Stats.MediaImageStats)
return;
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.MediaFormats.Add(new MediaFormat
{
@@ -1325,7 +1339,7 @@ namespace Aaru.Core
else
deviceBus = dev.Type.ToString();
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.SeenDevices.Add(new DeviceStat
{
@@ -1354,7 +1368,7 @@ namespace Aaru.Core
!Settings.Settings.Current.Stats.MediaStats)
return;
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.Medias.Add(new Database.Models.Media
{
@@ -1380,7 +1394,7 @@ namespace Aaru.Core
!Settings.Settings.Current.Stats.MediaStats)
return;
var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.RemoteApplications.Add(new RemoteApplication
{