diff --git a/Duplicati/Library/Main/Database/LocalBugReportDatabase.cs b/Duplicati/Library/Main/Database/LocalBugReportDatabase.cs
index d1610487e..7cf791c08 100644
--- a/Duplicati/Library/Main/Database/LocalBugReportDatabase.cs
+++ b/Duplicati/Library/Main/Database/LocalBugReportDatabase.cs
@@ -22,6 +22,7 @@
#nullable enable
using System;
+using System.Threading;
using System.Threading.Tasks;
using Duplicati.Library.Common.IO;
@@ -44,13 +45,14 @@ namespace Duplicati.Library.Main.Database
/// The path to the database file.
/// The size of the page cache.
/// An optional existing database instance to use. Used to mimic constructor chaining.
+ /// A cancellation token to cancel the operation.
/// A task that when awaited contains a new instance of .
- public static async Task CreateAsync(string path, long pagecachesize, LocalBugReportDatabase? dbnew = null)
+ public static async Task CreateAsync(string path, long pagecachesize, LocalBugReportDatabase? dbnew, CancellationToken token)
{
dbnew ??= new LocalBugReportDatabase();
dbnew = (LocalBugReportDatabase)
- await CreateLocalDatabaseAsync(path, "BugReportCreate", false, pagecachesize, dbnew)
+ await CreateLocalDatabaseAsync(path, "BugReportCreate", false, pagecachesize, dbnew, token)
.ConfigureAwait(false);
dbnew.ShouldCloseConnection = true;
@@ -60,8 +62,9 @@ namespace Duplicati.Library.Main.Database
///
/// Obfuscates sensitive data in the database, readying it for a bug report.
///
+ /// A cancellation token to cancel the operation.
/// A task that completes when the obfuscation is finished.
- public async Task Fix()
+ public async Task Fix(CancellationToken token)
{
await using var cmd = m_connection.CreateCommand(m_rtr);
var tablename = "PathMap-" + Library.Utility.Utility.ByteArrayAsHexString(Guid.NewGuid().ToByteArray());
@@ -76,7 +79,7 @@ namespace Duplicati.Library.Main.Database
""RealPath"" TEXT NOT NULL,
""Obfuscated"" TEXT NULL
)
- ")
+ ", token)
.ConfigureAwait(false);
await upcmd.ExecuteNonQueryAsync($@"
@@ -84,7 +87,7 @@ namespace Duplicati.Library.Main.Database
SELECT DISTINCT ""Path""
FROM ""File""
ORDER BY ""Path""
- ")
+ ", token)
.ConfigureAwait(false);
await upcmd.SetCommandAndParameters($@"
@@ -105,7 +108,7 @@ namespace Duplicati.Library.Main.Database
.SetParameterValue("@StartPath", !OperatingSystem.IsWindows() ? "/" : "X:\\")
.SetParameterValue("@DirSep", Util.DirectorySeparatorString)
.SetParameterValue("@FileExt", ".bin")
- .ExecuteNonQueryAsync()
+ .ExecuteNonQueryAsync(token)
.ConfigureAwait(false);
/*long id = 1;
@@ -127,7 +130,7 @@ namespace Duplicati.Library.Main.Database
WHERE
""Message"" LIKE '%/%'
OR ""Message"" LIKE '%:\%'
- ")
+ ", token)
.ConfigureAwait(false);
await cmd.ExecuteNonQueryAsync(@"
@@ -136,14 +139,14 @@ namespace Duplicati.Library.Main.Database
WHERE
""Exception"" LIKE '%/%'
OR ""Exception"" LIKE '%:\%'
- ")
+ ", token)
.ConfigureAwait(false);
await cmd.ExecuteNonQueryAsync(@"
UPDATE ""Configuration""
SET ""Value"" = 'ERASED!'
WHERE ""Key"" = 'passphrase'
- ")
+ ", token)
.ConfigureAwait(false);
await cmd.ExecuteNonQueryAsync($@"
@@ -157,24 +160,24 @@ namespace Duplicati.Library.Main.Database
""{tablename}"" ""A"",
""File"" ""B""
WHERE ""A"".""RealPath"" = ""B"".""Path""
- ")
+ ", token)
.ConfigureAwait(false);
- await cmd.ExecuteNonQueryAsync(@"DROP VIEW ""File"" ")
+ await cmd.ExecuteNonQueryAsync(@"DROP VIEW ""File"" ", token)
.ConfigureAwait(false);
- await cmd.ExecuteNonQueryAsync(@"DROP TABLE ""FileLookup"" ")
+ await cmd.ExecuteNonQueryAsync(@"DROP TABLE ""FileLookup"" ", token)
.ConfigureAwait(false);
- await cmd.ExecuteNonQueryAsync(@"DROP TABLE ""PathPrefix"" ")
+ await cmd.ExecuteNonQueryAsync(@"DROP TABLE ""PathPrefix"" ", token)
.ConfigureAwait(false);
- await cmd.ExecuteNonQueryAsync($@"DROP TABLE IF EXISTS ""{tablename}"" ")
+ await cmd.ExecuteNonQueryAsync($@"DROP TABLE IF EXISTS ""{tablename}"" ", token)
.ConfigureAwait(false);
using (new Logging.Timer(LOGTAG, "CommitUpdateBugReport", "CommitUpdateBugReport"))
- await m_rtr.CommitAsync().ConfigureAwait(false);
+ await m_rtr.CommitAsync(token: token).ConfigureAwait(false);
cmd.SetTransaction(m_rtr);
- await cmd.ExecuteNonQueryAsync("VACUUM").ConfigureAwait(false);
- await m_rtr.CommitAsync().ConfigureAwait(false);
+ await cmd.ExecuteNonQueryAsync("VACUUM", token).ConfigureAwait(false);
+ await m_rtr.CommitAsync(token: token).ConfigureAwait(false);
}
}
}