[Core] Change statistics update to be async.

This commit is contained in:
2024-05-02 01:45:22 +01:00
parent 81de9bc02e
commit 6a3ef12e25
3 changed files with 565 additions and 583 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -148,8 +148,8 @@ public sealed class SplashWindowViewModel(SplashWindow view) : ViewModelBase
foreach(string migration in ctx.Database.GetPendingMigrations()) foreach(string migration in ctx.Database.GetPendingMigrations())
{ {
ctx.Database
#pragma warning disable EF1002 #pragma warning disable EF1002
ctx.Database
.ExecuteSqlRaw($"INSERT INTO \"__EFMigrationsHistory\" (MigrationId, ProductVersion) VALUES ('{ .ExecuteSqlRaw($"INSERT INTO \"__EFMigrationsHistory\" (MigrationId, ProductVersion) VALUES ('{
migration}', '0.0.0')"); migration}', '0.0.0')");
#pragma warning restore EF1002 #pragma warning restore EF1002
@@ -294,9 +294,9 @@ public sealed class SplashWindowViewModel(SplashWindow view) : ViewModelBase
Message = UI.Saving_statistics; Message = UI.Saving_statistics;
AaruConsole.WriteLine(UI.Saving_statistics); AaruConsole.WriteLine(UI.Saving_statistics);
Task.Run(() => Task.Run(async () =>
{ {
Statistics.SaveStats(); await Statistics.SaveStats();
Dispatcher.UIThread.Post(LoadMainWindow); Dispatcher.UIThread.Post(LoadMainWindow);
}); });

View File

@@ -37,6 +37,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks;
using Aaru.Commands; using Aaru.Commands;
using Aaru.Commands.Archive; using Aaru.Commands.Archive;
using Aaru.Commands.Database; using Aaru.Commands.Database;
@@ -62,7 +63,7 @@ class MainClass
static string _assemblyTitle; static string _assemblyTitle;
static AssemblyInformationalVersionAttribute _assemblyVersion; static AssemblyInformationalVersionAttribute _assemblyVersion;
public static int Main([NotNull] string[] args) public static async Task<int> Main([NotNull] string[] args)
{ {
IAnsiConsole stderrConsole = AnsiConsole.Create(new AnsiConsoleSettings IAnsiConsole stderrConsole = AnsiConsole.Create(new AnsiConsoleSettings
{ {
@@ -113,14 +114,17 @@ class MainClass
try try
{ {
ctx = AaruContext.Create(Settings.Settings.LocalDbPath, false); ctx = AaruContext.Create(Settings.Settings.LocalDbPath, false);
ctx.Database.Migrate(); await ctx.Database.MigrateAsync();
} }
catch(NotSupportedException) catch(NotSupportedException)
{ {
try try
{ {
ctx?.Database.CloseConnection(); if(ctx is not null)
ctx?.Dispose(); {
await ctx.Database.CloseConnectionAsync();
await ctx.DisposeAsync();
}
} }
catch(Exception) catch(Exception)
{ {
@@ -129,21 +133,21 @@ class MainClass
File.Delete(Settings.Settings.LocalDbPath); File.Delete(Settings.Settings.LocalDbPath);
ctx = AaruContext.Create(Settings.Settings.LocalDbPath); ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
ctx.Database.EnsureCreated(); await ctx.Database.EnsureCreatedAsync();
ctx.Database await ctx.Database
.ExecuteSqlRaw("CREATE TABLE IF NOT EXISTS \"__EFMigrationsHistory\" (\"MigrationId\" TEXT PRIMARY KEY, \"ProductVersion\" TEXT)"); .ExecuteSqlRawAsync("CREATE TABLE IF NOT EXISTS \"__EFMigrationsHistory\" (\"MigrationId\" TEXT PRIMARY KEY, \"ProductVersion\" TEXT)");
foreach(string migration in ctx.Database.GetPendingMigrations()) foreach(string migration in await ctx.Database.GetPendingMigrationsAsync())
{ {
ctx.Database
#pragma warning disable EF1002 #pragma warning disable EF1002
.ExecuteSqlRaw($"INSERT INTO \"__EFMigrationsHistory\" (MigrationId, ProductVersion) VALUES ('{ await ctx.Database
migration}', '0.0.0')"); .ExecuteSqlRawAsync($"INSERT INTO \"__EFMigrationsHistory\" (MigrationId, ProductVersion) VALUES ('{
migration}', '0.0.0')");
#pragma warning restore EF1002 #pragma warning restore EF1002
} }
ctx.SaveChanges(); await ctx.SaveChangesAsync();
} }
// Remove duplicates // Remove duplicates
@@ -170,7 +174,7 @@ class MainClass
// Remove nulls // Remove nulls
ctx.RemoveRange(ctx.SeenDevices.Where(d => d.Manufacturer == null && d.Model == null && d.Revision == null)); ctx.RemoveRange(ctx.SeenDevices.Where(d => d.Manufacturer == null && d.Model == null && d.Revision == null));
ctx.SaveChanges(); await ctx.SaveChangesAsync();
var mainDbUpdate = false; var mainDbUpdate = false;
@@ -182,7 +186,7 @@ class MainClass
var mainContext = AaruContext.Create(Settings.Settings.MainDbPath, false); var mainContext = AaruContext.Create(Settings.Settings.MainDbPath, false);
if(mainContext.Database.GetPendingMigrations().Any()) if((await mainContext.Database.GetPendingMigrationsAsync()).Any())
{ {
AaruConsole.WriteLine(UI.New_database_version_updating); AaruConsole.WriteLine(UI.New_database_version_updating);
@@ -198,8 +202,8 @@ class MainClass
return (int)ErrorNumber.CannotRemoveDatabase; return (int)ErrorNumber.CannotRemoveDatabase;
} }
mainContext.Database.CloseConnection(); await mainContext.Database.CloseConnectionAsync();
mainContext.Dispose(); await mainContext.DisposeAsync();
UpdateCommand.DoUpdate(true); UpdateCommand.DoUpdate(true);
} }
@@ -244,9 +248,9 @@ class MainClass
rootCommand.AddCommand(new ListNamespacesCommand()); rootCommand.AddCommand(new ListNamespacesCommand());
rootCommand.AddCommand(new RemoteCommand()); rootCommand.AddCommand(new RemoteCommand());
int ret = rootCommand.Invoke(args); int ret = await rootCommand.InvokeAsync(args);
Statistics.SaveStats(); await Statistics.SaveStats();
if(!rootCommand.Parse(args).RootCommandResult.GetValueForOption(pauseOption)) return ret; if(!rootCommand.Parse(args).RootCommandResult.GetValueForOption(pauseOption)) return ret;