1
0
mirror of https://github.com/chylex/Discord-History-Tracker.git synced 2025-04-19 13:15:44 +02:00

Compare commits

..

2 Commits

3 changed files with 12 additions and 7 deletions

View File

@ -11,7 +11,9 @@ public sealed partial class NewDatabaseSettingsDialog : Window {
} }
private void OnClosing(object? sender, WindowClosingEventArgs e) { private void OnClosing(object? sender, WindowClosingEventArgs e) {
e.Cancel = true; if (!e.IsProgrammatic) {
e.Cancel = true;
}
} }
private void ClickOk(object? sender, RoutedEventArgs e) { private void ClickOk(object? sender, RoutedEventArgs e) {

View File

@ -27,7 +27,7 @@
<Button Command="{Binding MergeWithDatabase}">Merge with Database(s)...</Button> <Button Command="{Binding MergeWithDatabase}">Merge with Database(s)...</Button>
<Button Command="{Binding ImportLegacyArchive}">Import Legacy Archive(s)...</Button> <Button Command="{Binding ImportLegacyArchive}">Import Legacy Archive(s)...</Button>
</WrapPanel> </WrapPanel>
<Expander Header="Advanced Tools" IsExpanded="True" Margin="0 15 0 0"> <Expander Header="Advanced Tools" Margin="0 15 0 0">
<StackPanel Orientation="Vertical" Spacing="10"> <StackPanel Orientation="Vertical" Spacing="10">
<TextBlock TextWrapping="Wrap">Recreate the database to free up space after deleting data.</TextBlock> <TextBlock TextWrapping="Wrap">Recreate the database to free up space after deleting data.</TextBlock>
<Button Command="{Binding VacuumDatabase}">Vacuum Database</Button> <Button Command="{Binding VacuumDatabase}">Vacuum Database</Button>

View File

@ -73,10 +73,13 @@ sealed class SqliteDownloadRepository(SqliteConnectionPool pool) : BaseSqliteRep
} }
} }
private static SqliteBlob BlobReference(ISqliteConnection conn, long rowid, bool readOnly) {
string schema = conn.HasAttachedDatabase(Schema) ? Schema : "main";
return new SqliteBlob(conn.InnerConnection, databaseName: schema, tableName: "download_blobs", columnName: "blob", rowid, readOnly);
}
public async Task AddDownload(Data.Download item, Stream? stream) { public async Task AddDownload(Data.Download item, Stream? stream) {
await using (var conn = await pool.Take()) { await using (var conn = await pool.Take()) {
string schema = conn.HasAttachedDatabase(Schema) ? Schema : "main";
await conn.BeginTransactionAsync(); await conn.BeginTransactionAsync();
await using var metadataCmd = conn.Upsert("download_metadata", [ await using var metadataCmd = conn.Upsert("download_metadata", [
@ -114,7 +117,7 @@ sealed class SqliteDownloadRepository(SqliteConnectionPool pool) : BaseSqliteRep
upsertBlobCmd.AddAndSet(":blob_length", SqliteType.Integer, item.Size); upsertBlobCmd.AddAndSet(":blob_length", SqliteType.Integer, item.Size);
long rowid = await upsertBlobCmd.ExecuteLongScalarAsync(); long rowid = await upsertBlobCmd.ExecuteLongScalarAsync();
await using var blob = new SqliteBlob(conn.InnerConnection, databaseName: schema, tableName: "download_blobs", columnName: "blob", rowid); await using var blob = BlobReference(conn, rowid, readOnly: false);
await stream.CopyToAsync(blob); await stream.CopyToAsync(blob);
} }
@ -218,7 +221,7 @@ sealed class SqliteDownloadRepository(SqliteConnectionPool pool) : BaseSqliteRep
rowid = reader.GetInt64(0); rowid = reader.GetInt64(0);
} }
await using (var blob = new SqliteBlob(conn.InnerConnection, "download_blobs", "blob", rowid, readOnly: true)) { await using (var blob = BlobReference(conn, rowid, readOnly: true)) {
await dataProcessor(blob); await dataProcessor(blob);
} }
@ -253,7 +256,7 @@ sealed class SqliteDownloadRepository(SqliteConnectionPool pool) : BaseSqliteRep
rowid = reader.GetInt64(2); rowid = reader.GetInt64(2);
} }
await using (var blob = new SqliteBlob(conn.InnerConnection, "download_blobs", "blob", rowid, readOnly: true)) { await using (var blob = BlobReference(conn, rowid, readOnly: true)) {
await dataProcessor(new Data.Download(normalizedUrl, downloadUrl, DownloadStatus.Success, type, (ulong) blob.Length), blob, cancellationToken); await dataProcessor(new Data.Download(normalizedUrl, downloadUrl, DownloadStatus.Success, type, (ulong) blob.Length), blob, cancellationToken);
} }