@ -19,6 +19,7 @@ namespace Emby.Server.Implementations.Sync
private readonly IServerSyncProvider _provider ;
private readonly SemaphoreSlim _dataLock = new SemaphoreSlim ( 1 , 1 ) ;
private readonly SemaphoreSlim _remoteDataLock = new SemaphoreSlim ( 1 , 1 ) ;
private List < LocalItem > _items ;
private readonly ILogger _logger ;
@ -63,15 +64,24 @@ namespace Emby.Server.Implementations.Sync
{
_logger . Debug ( "Getting {0} from {1}" , string . Join ( MediaSync . PathSeparatorString , GetRemotePath ( ) . ToArray ( ) ) , _provider . Name ) ;
var fileResult = await _provider . GetFiles ( GetRemotePath ( ) . ToArray ( ) , _target , cancellationToken ) . ConfigureAwait ( false ) ;
await _remoteDataLock . WaitAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
if ( fileResult . Items . Length > 0 )
try
{
using ( var stream = await _provider . GetFile ( fileResult . Items [ 0 ] . FullName , _target , new Progress < double > ( ) , cancellationToken ) )
var fileResult = await _provider . GetFiles ( GetRemotePath ( ) . ToArray ( ) , _target , cancellationToken ) . ConfigureAwait ( false ) ;
if ( fileResult . Items . Length > 0 )
{
return _json . DeserializeFromStream < List < LocalItem > > ( stream ) ;
using ( var stream = await _provider . GetFile ( fileResult . Items [ 0 ] . FullName , _target , new Progress < double > ( ) , cancellationToken ) )
{
return _json . DeserializeFromStream < List < LocalItem > > ( stream ) ;
}
}
}
finally
{
_remoteDataLock . Release ( ) ;
}
return new List < LocalItem > ( ) ;
}
@ -93,9 +103,19 @@ namespace Emby.Server.Implementations.Sync
// Save to sync provider
stream . Position = 0 ;
var remotePath = GetRemotePath ( ) ;
_logger . Debug ( "Saving data.json to {0}. Remote path: {1}" , _provider . Name , string . Join ( "/" , remotePath ) ) ;
await _provider . SendFile ( stream , remotePath , _target , new Progress < double > ( ) , cancellationToken ) . ConfigureAwait ( false ) ;
await _remoteDataLock . WaitAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
try
{
_logger . Debug ( "Saving data.json to {0}. Remote path: {1}" , _provider . Name , string . Join ( "/" , remotePath ) ) ;
await _provider . SendFile ( stream , remotePath , _target , new Progress < double > ( ) , cancellationToken ) . ConfigureAwait ( false ) ;
}
finally
{
_remoteDataLock . Release ( ) ;
}
}
}