From 567253d147132d94b7c1a9cf22bbc6fc970b1f9e Mon Sep 17 00:00:00 2001 From: chylex Date: Sun, 24 Dec 2023 13:26:11 +0100 Subject: [PATCH] Use multiple threads to download attachments --- app/Desktop/Main/MainWindow.axaml.cs | 6 +- app/Desktop/Main/MainWindowModel.cs | 12 +- app/Desktop/Main/Pages/AttachmentsPage.axaml | 2 +- .../Main/Pages/AttachmentsPageModel.cs | 62 +++++---- .../Main/Screens/MainContentScreenModel.cs | 8 +- app/Server/Data/DownloadStatus.cs | 1 + app/Server/Database/DummyDatabaseFile.cs | 2 +- app/Server/Database/IDatabaseFile.cs | 2 +- app/Server/Database/Sqlite/Schema.cs | 8 +- .../Database/Sqlite/SqliteDatabaseFile.cs | 52 ++++--- .../Database/Sqlite/Utils/SqliteExtensions.cs | 4 + .../Download/BackgroundDownloadThread.cs | 130 ------------------ app/Server/Download/BackgroundDownloader.cs | 107 ++++++++++++++ app/Utils/Tasks/TaskExtensions.cs | 12 ++ 14 files changed, 213 insertions(+), 195 deletions(-) delete mode 100644 app/Server/Download/BackgroundDownloadThread.cs create mode 100644 app/Server/Download/BackgroundDownloader.cs create mode 100644 app/Utils/Tasks/TaskExtensions.cs diff --git a/app/Desktop/Main/MainWindow.axaml.cs b/app/Desktop/Main/MainWindow.axaml.cs index 742c2d4..5f417e1 100644 --- a/app/Desktop/Main/MainWindow.axaml.cs +++ b/app/Desktop/Main/MainWindow.axaml.cs @@ -20,9 +20,9 @@ public sealed partial class MainWindow : Window { DataContext = new MainWindowModel(this, args); } - public void OnClosed(object? sender, EventArgs e) { - if (DataContext is IDisposable disposable) { - disposable.Dispose(); + public async void OnClosed(object? sender, EventArgs e) { + if (DataContext is MainWindowModel model) { + await model.DisposeAsync(); } foreach (var temporaryFile in ViewerPageModel.TemporaryFiles) { diff --git a/app/Desktop/Main/MainWindowModel.cs b/app/Desktop/Main/MainWindowModel.cs index 80783a7..d555c9a 100644 --- a/app/Desktop/Main/MainWindowModel.cs +++ b/app/Desktop/Main/MainWindowModel.cs @@ -12,7 +12,7 @@ using DHT.Utils.Models; namespace DHT.Desktop.Main; -sealed class MainWindowModel : BaseModel, IDisposable { +sealed class MainWindowModel : BaseModel, IAsyncDisposable { private const string DefaultTitle = "Discord History Tracker"; public string Title { get; private set; } = DefaultTitle; @@ -75,7 +75,7 @@ sealed class MainWindowModel : BaseModel, IDisposable { if (e.PropertyName == nameof(welcomeScreenModel.Db)) { if (mainContentScreenModel != null) { mainContentScreenModel.DatabaseClosed -= MainContentScreenModelOnDatabaseClosed; - mainContentScreenModel.Dispose(); + await mainContentScreenModel.DisposeAsync(); } db?.Dispose(); @@ -107,9 +107,13 @@ sealed class MainWindowModel : BaseModel, IDisposable { welcomeScreenModel.CloseDatabase(); } - public void Dispose() { + public async ValueTask DisposeAsync() { welcomeScreenModel.Dispose(); - mainContentScreenModel?.Dispose(); + + if (mainContentScreenModel != null) { + await mainContentScreenModel.DisposeAsync(); + } + db?.Dispose(); db = null; } diff --git a/app/Desktop/Main/Pages/AttachmentsPage.axaml b/app/Desktop/Main/Pages/AttachmentsPage.axaml index 6d82546..b4aaf07 100644 --- a/app/Desktop/Main/Pages/AttachmentsPage.axaml +++ b/app/Desktop/Main/Pages/AttachmentsPage.axaml @@ -33,7 +33,7 @@