|
@@ -95,7 +95,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
|
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
|
/// <returns>Task.</returns>
|
|
|
/// <exception cref="System.ArgumentNullException">item</exception>
|
|
|
- public Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken)
|
|
|
+ public async Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (displayPreferences == null)
|
|
|
{
|
|
@@ -111,19 +111,36 @@ namespace MediaBrowser.Server.Implementations.Sqlite
|
|
|
}
|
|
|
|
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
|
-
|
|
|
- return Task.Run(() =>
|
|
|
+
|
|
|
+ var serialized = _protobufSerializer.SerializeToBytes(displayPreferences);
|
|
|
+
|
|
|
+ cancellationToken.ThrowIfCancellationRequested();
|
|
|
+
|
|
|
+ var cmd = connection.CreateCommand();
|
|
|
+ cmd.CommandText = "replace into displaypreferences (id, data) values (@1, @2)";
|
|
|
+ cmd.AddParam("@1", displayPreferences.Id);
|
|
|
+ cmd.AddParam("@2", serialized);
|
|
|
+
|
|
|
+ using (var tran = connection.BeginTransaction())
|
|
|
{
|
|
|
- var serialized = _protobufSerializer.SerializeToBytes(displayPreferences);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ cmd.Transaction = tran;
|
|
|
|
|
|
- cancellationToken.ThrowIfCancellationRequested();
|
|
|
+ await cmd.ExecuteNonQueryAsync(cancellationToken);
|
|
|
|
|
|
- var cmd = connection.CreateCommand();
|
|
|
- cmd.CommandText = "replace into displaypreferences (id, data) values (@1, @3)";
|
|
|
- cmd.AddParam("@1", displayPreferences.Id);
|
|
|
- cmd.AddParam("@2", serialized);
|
|
|
- QueueCommand(cmd);
|
|
|
- });
|
|
|
+ tran.Commit();
|
|
|
+ }
|
|
|
+ catch (OperationCanceledException)
|
|
|
+ {
|
|
|
+ tran.Rollback();
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ Logger.ErrorException("Failed to commit transaction.", e);
|
|
|
+ tran.Rollback();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|