@ -135,7 +135,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
/// <summary>
/// The _write lock
/// </summary>
private readonly SemaphoreSlim _writeLock = new SemaphoreSlim ( 1 , 1 ) ;
private readonly SemaphoreSlim _writeLock = new SemaphoreSlim ( 1 , 1 ) ;
/// <summary>
/// Prepares the statements.
@ -172,13 +172,34 @@ namespace MediaBrowser.Server.Implementations.Sqlite
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
/// <exception cref="System.ArgumentNullException">item</exception>
public async Task SaveItem ( BaseItem item , CancellationToken cancellationToken )
public Task SaveItem ( BaseItem item , CancellationToken cancellationToken )
{
if ( item = = null )
{
throw new ArgumentNullException ( "item" ) ;
}
return SaveItems ( new [ ] { item } , cancellationToken ) ;
}
/// <summary>
/// Saves the items.
/// </summary>
/// <param name="items">The items.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
/// <exception cref="System.ArgumentNullException">
/// items
/// or
/// cancellationToken
/// </exception>
public async Task SaveItems ( IEnumerable < BaseItem > items , CancellationToken cancellationToken )
{
if ( items = = null )
{
throw new ArgumentNullException ( "items" ) ;
}
if ( cancellationToken = = null )
{
throw new ArgumentNullException ( "cancellationToken" ) ;
@ -186,8 +207,6 @@ namespace MediaBrowser.Server.Implementations.Sqlite
cancellationToken . ThrowIfCancellationRequested ( ) ;
var serialized = _jsonSerializer . SerializeToBytes ( item ) ;
await _writeLock . WaitAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
SQLiteTransaction transaction = null ;
@ -196,13 +215,18 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
transaction = Connection . BeginTransaction ( ) ;
_saveItemCommand . Parameters [ 0 ] . Value = item . Id ;
_saveItemCommand . Parameters [ 1 ] . Value = item . GetType ( ) . FullName ;
_saveItemCommand . Parameters [ 2 ] . Value = serialized ;
foreach ( var item in items )
{
cancellationToken . ThrowIfCancellationRequested ( ) ;
_saveItemCommand . Parameters [ 0 ] . Value = item . Id ;
_saveItemCommand . Parameters [ 1 ] . Value = item . GetType ( ) . FullName ;
_saveItemCommand . Parameters [ 2 ] . Value = _jsonSerializer . SerializeToBytes ( item ) ;
_saveItemCommand . Transaction = transaction ;
_saveItemCommand . Transaction = transaction ;
await _saveItemCommand . ExecuteNonQueryAsync ( cancellationToken ) ;
await _saveItemCommand . ExecuteNonQueryAsync ( cancellationToken ) ;
}
transaction . Commit ( ) ;
}
@ -400,7 +424,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
foreach ( var child in children )
{
_saveChildrenCommand . Transaction = transaction ;
_saveChildrenCommand . Parameters [ 0 ] . Value = id ;
_saveChildrenCommand . Parameters [ 1 ] . Value = child . Id ;