diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-25 19:52:41 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-25 19:52:41 -0400 |
| commit | 9026af7550a3b01956f12f03794b92cb3af03430 (patch) | |
| tree | bde81507959cc76eb126247bca6c44f71d86afb0 /MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs | |
| parent | 084557ca46d252b53b9535dde464b88369760c82 (diff) | |
unwrapped similar items api into separate endpoints for each type
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs index 93b246380..2df377cbc 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs @@ -5,6 +5,7 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; using System.Data; +using System.Data.SQLite; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -43,6 +44,8 @@ namespace MediaBrowser.Server.Implementations.Sqlite /// </summary> private readonly IApplicationPaths _appPaths; + private readonly SemaphoreSlim _writeLock = new SemaphoreSlim(1, 1); + /// <summary> /// Initializes a new instance of the <see cref="SQLiteUserDataRepository" /> class. /// </summary> @@ -118,34 +121,51 @@ namespace MediaBrowser.Server.Implementations.Sqlite var serialized = _jsonSerializer.SerializeToBytes(displayPreferences); - cancellationToken.ThrowIfCancellationRequested(); + await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); + + SQLiteTransaction transaction = null; - using (var cmd = Connection.CreateCommand()) + try { - cmd.CommandText = "replace into displaypreferences (id, data) values (@1, @2)"; - cmd.AddParam("@1", displayPreferences.Id); - cmd.AddParam("@2", serialized); + transaction = Connection.BeginTransaction(); - using (var tran = Connection.BeginTransaction()) + using (var cmd = Connection.CreateCommand()) { - try - { - cmd.Transaction = tran; + cmd.CommandText = "replace into displaypreferences (id, data) values (@1, @2)"; + cmd.AddParam("@1", displayPreferences.Id); + cmd.AddParam("@2", serialized); - await cmd.ExecuteNonQueryAsync(cancellationToken); + cmd.Transaction = transaction; - tran.Commit(); - } - catch (OperationCanceledException) - { - tran.Rollback(); - } - catch (Exception e) - { - Logger.ErrorException("Failed to commit transaction.", e); - tran.Rollback(); - } + await cmd.ExecuteNonQueryAsync(cancellationToken); } + + transaction.Commit(); + } + catch (OperationCanceledException) + { + if (transaction != null) + { + transaction.Rollback(); + } + } + catch (Exception e) + { + Logger.ErrorException("Failed to save display preferences:", e); + + if (transaction != null) + { + transaction.Rollback(); + } + } + finally + { + if (transaction != null) + { + transaction.Dispose(); + } + + _writeLock.Release(); } } |
