diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-05 21:03:38 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-05 21:03:38 -0400 |
| commit | 9c7f492e2cd3b940d8041e6949cea9898a057826 (patch) | |
| tree | b801589b7e167125b7fae7add6b9a914daeeaa10 /MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs | |
| parent | 9794c8fb1adc01823a9bdd469b470390fee0ebcd (diff) | |
fixed an issue with the video image provider requiring two-pass refreshing
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs index 2c8d7f437..b2e11d06f 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs @@ -35,6 +35,18 @@ namespace MediaBrowser.Server.Implementations.Sqlite } /// <summary> + /// Gets a value indicating whether [enable delayed commands]. + /// </summary> + /// <value><c>true</c> if [enable delayed commands]; otherwise, <c>false</c>.</value> + protected override bool EnableDelayedCommands + { + get + { + return false; + } + } + + /// <summary> /// The _protobuf serializer /// </summary> private readonly IProtobufSerializer _protobufSerializer; @@ -106,7 +118,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite /// or /// userDataId /// </exception> - public Task SaveUserData(Guid userId, Guid userDataId, UserItemData userData, CancellationToken cancellationToken) + public async Task SaveUserData(Guid userId, Guid userDataId, UserItemData userData, CancellationToken cancellationToken) { if (userData == null) { @@ -127,19 +139,36 @@ namespace MediaBrowser.Server.Implementations.Sqlite cancellationToken.ThrowIfCancellationRequested(); - return Task.Run(() => + var serialized = _protobufSerializer.SerializeToBytes(userData); + + cancellationToken.ThrowIfCancellationRequested(); + + var cmd = connection.CreateCommand(); + cmd.CommandText = "replace into userdata (id, userId, data) values (@1, @2, @3)"; + cmd.AddParam("@1", userDataId); + cmd.AddParam("@2", userId); + cmd.AddParam("@3", serialized); + + using (var tran = connection.BeginTransaction()) { - var serialized = _protobufSerializer.SerializeToBytes(userData); + try + { + cmd.Transaction = tran; - cancellationToken.ThrowIfCancellationRequested(); + await cmd.ExecuteNonQueryAsync(cancellationToken); - var cmd = connection.CreateCommand(); - cmd.CommandText = "replace into userdata (id, userId, data) values (@1, @2, @3)"; - cmd.AddParam("@1", userDataId); - cmd.AddParam("@2", userId); - cmd.AddParam("@3", serialized); - QueueCommand(cmd); - }); + tran.Commit(); + } + catch (OperationCanceledException) + { + tran.Rollback(); + } + catch (Exception e) + { + Logger.ErrorException("Failed to commit transaction.", e); + tran.Rollback(); + } + } } /// <summary> |
