@ -18,33 +18,21 @@ namespace MediaBrowser.Server.Implementations.Sync
{
{
public class SyncRepository : BaseSqliteRepository , ISyncRepository
public class SyncRepository : BaseSqliteRepository , ISyncRepository
{
{
private IDbConnection _connection ;
private readonly CultureInfo _usCulture = new CultureInfo ( "en-US" ) ;
private readonly CultureInfo _usCulture = new CultureInfo ( "en-US" ) ;
private IDbCommand _insertJobCommand ;
private IDbCommand _updateJobCommand ;
private IDbCommand _deleteJobCommand ;
private IDbCommand _deleteJobItemsCommand ;
private IDbCommand _insertJobItemCommand ;
private IDbCommand _updateJobItemCommand ;
private readonly IJsonSerializer _json ;
private readonly IJsonSerializer _json ;
private readonly IServerApplicationPaths _appPaths ;
public SyncRepository ( ILogManager logManager , IJsonSerializer json , IServerApplicationPaths appPaths )
public SyncRepository ( ILogManager logManager , IJsonSerializer json , IServerApplicationPaths appPaths , IDbConnector connector )
: base ( logManager )
: base ( logManager , connector )
{
{
_json = json ;
_json = json ;
_appPaths = appPaths ;
DbFilePath = Path . Combine ( appPaths . DataPath , "sync14.db" ) ;
}
}
public async Task Initialize ( IDbConnector dbConnector )
public async Task Initialize ( )
{
using ( var connection = await CreateConnection ( ) . ConfigureAwait ( false ) )
{
{
var dbFile = Path . Combine ( _appPaths . DataPath , "sync14.db" ) ;
_connection = await dbConnector . Connect ( dbFile ) . ConfigureAwait ( false ) ;
string [ ] queries = {
string [ ] queries = {
"create table if not exists SyncJobs (Id GUID PRIMARY KEY, TargetId TEXT NOT NULL, Name TEXT NOT NULL, Profile TEXT, Quality TEXT, Bitrate INT, Status TEXT NOT NULL, Progress FLOAT, UserId TEXT NOT NULL, ItemIds TEXT NOT NULL, Category TEXT, ParentId TEXT, UnwatchedOnly BIT, ItemLimit INT, SyncNewContent BIT, DateCreated DateTime, DateLastModified DateTime, ItemCount int)" ,
"create table if not exists SyncJobs (Id GUID PRIMARY KEY, TargetId TEXT NOT NULL, Name TEXT NOT NULL, Profile TEXT, Quality TEXT, Bitrate INT, Status TEXT NOT NULL, Progress FLOAT, UserId TEXT NOT NULL, ItemIds TEXT NOT NULL, Category TEXT, ParentId TEXT, UnwatchedOnly BIT, ItemLimit INT, SyncNewContent BIT, DateCreated DateTime, DateLastModified DateTime, ItemCount int)" ,
@ -61,114 +49,12 @@ namespace MediaBrowser.Server.Implementations.Sync
"pragma shrink_memory"
"pragma shrink_memory"
} ;
} ;
_connection . RunQueries ( queries , Logger ) ;
connection . RunQueries ( queries , Logger ) ;
_connection . AddColumn ( Logger , "SyncJobs" , "Profile" , "TEXT" ) ;
_connection . AddColumn ( Logger , "SyncJobs" , "Bitrate" , "INT" ) ;
_connection . AddColumn ( Logger , "SyncJobItems" , "ItemDateModifiedTicks" , "BIGINT" ) ;
PrepareStatements ( ) ;
connection . AddColumn ( Logger , "SyncJobs" , "Profile" , "TEXT" ) ;
connection . AddColumn ( Logger , "SyncJobs" , "Bitrate" , "INT" ) ;
connection . AddColumn ( Logger , "SyncJobItems" , "ItemDateModifiedTicks" , "BIGINT" ) ;
}
}
private void PrepareStatements ( )
{
// _deleteJobCommand
_deleteJobCommand = _connection . CreateCommand ( ) ;
_deleteJobCommand . CommandText = "delete from SyncJobs where Id=@Id" ;
_deleteJobCommand . Parameters . Add ( _deleteJobCommand , "@Id" ) ;
// _deleteJobItemsCommand
_deleteJobItemsCommand = _connection . CreateCommand ( ) ;
_deleteJobItemsCommand . CommandText = "delete from SyncJobItems where JobId=@JobId" ;
_deleteJobItemsCommand . Parameters . Add ( _deleteJobItemsCommand , "@JobId" ) ;
// _insertJobCommand
_insertJobCommand = _connection . CreateCommand ( ) ;
_insertJobCommand . CommandText = "insert into SyncJobs (Id, TargetId, Name, Profile, Quality, Bitrate, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount) values (@Id, @TargetId, @Name, @Profile, @Quality, @Bitrate, @Status, @Progress, @UserId, @ItemIds, @Category, @ParentId, @UnwatchedOnly, @ItemLimit, @SyncNewContent, @DateCreated, @DateLastModified, @ItemCount)" ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Id" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@TargetId" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Name" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Profile" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Quality" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Bitrate" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Status" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Progress" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@UserId" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@ItemIds" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@Category" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@ParentId" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@UnwatchedOnly" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@ItemLimit" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@SyncNewContent" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@DateCreated" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@DateLastModified" ) ;
_insertJobCommand . Parameters . Add ( _insertJobCommand , "@ItemCount" ) ;
// _updateJobCommand
_updateJobCommand = _connection . CreateCommand ( ) ;
_updateJobCommand . CommandText = "update SyncJobs set TargetId=@TargetId,Name=@Name,Profile=@Profile,Quality=@Quality,Bitrate=@Bitrate,Status=@Status,Progress=@Progress,UserId=@UserId,ItemIds=@ItemIds,Category=@Category,ParentId=@ParentId,UnwatchedOnly=@UnwatchedOnly,ItemLimit=@ItemLimit,SyncNewContent=@SyncNewContent,DateCreated=@DateCreated,DateLastModified=@DateLastModified,ItemCount=@ItemCount where Id=@Id" ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Id" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@TargetId" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Name" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Profile" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Quality" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Bitrate" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Status" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Progress" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@UserId" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@ItemIds" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@Category" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@ParentId" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@UnwatchedOnly" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@ItemLimit" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@SyncNewContent" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@DateCreated" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@DateLastModified" ) ;
_updateJobCommand . Parameters . Add ( _updateJobCommand , "@ItemCount" ) ;
// _insertJobItemCommand
_insertJobItemCommand = _connection . CreateCommand ( ) ;
_insertJobItemCommand . CommandText = "insert into SyncJobItems (Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource, IsMarkedForRemoval, JobItemIndex, ItemDateModifiedTicks) values (@Id, @ItemId, @ItemName, @MediaSourceId, @JobId, @TemporaryPath, @OutputPath, @Status, @TargetId, @DateCreated, @Progress, @AdditionalFiles, @MediaSource, @IsMarkedForRemoval, @JobItemIndex, @ItemDateModifiedTicks)" ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@Id" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@ItemId" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@ItemName" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@MediaSourceId" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@JobId" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@TemporaryPath" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@OutputPath" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@Status" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@TargetId" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@DateCreated" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@Progress" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@AdditionalFiles" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@MediaSource" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@IsMarkedForRemoval" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@JobItemIndex" ) ;
_insertJobItemCommand . Parameters . Add ( _insertJobItemCommand , "@ItemDateModifiedTicks" ) ;
// _updateJobItemCommand
_updateJobItemCommand = _connection . CreateCommand ( ) ;
_updateJobItemCommand . CommandText = "update SyncJobItems set ItemId=@ItemId,ItemName=@ItemName,MediaSourceId=@MediaSourceId,JobId=@JobId,TemporaryPath=@TemporaryPath,OutputPath=@OutputPath,Status=@Status,TargetId=@TargetId,DateCreated=@DateCreated,Progress=@Progress,AdditionalFiles=@AdditionalFiles,MediaSource=@MediaSource,IsMarkedForRemoval=@IsMarkedForRemoval,JobItemIndex=@JobItemIndex,ItemDateModifiedTicks=@ItemDateModifiedTicks where Id=@Id" ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@Id" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@ItemId" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@ItemName" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@MediaSourceId" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@JobId" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@TemporaryPath" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@OutputPath" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@Status" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@TargetId" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@DateCreated" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@Progress" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@AdditionalFiles" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@MediaSource" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@IsMarkedForRemoval" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@JobItemIndex" ) ;
_updateJobItemCommand . Parameters . Add ( _updateJobItemCommand , "@ItemDateModifiedTicks" ) ;
}
}
private const string BaseJobSelectText = "select Id, TargetId, Name, Profile, Quality, Bitrate, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount from SyncJobs" ;
private const string BaseJobSelectText = "select Id, TargetId, Name, Profile, Quality, Bitrate, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount from SyncJobs" ;
@ -190,7 +76,9 @@ namespace MediaBrowser.Server.Implementations.Sync
throw new ArgumentNullException ( "id" ) ;
throw new ArgumentNullException ( "id" ) ;
}
}
using ( var cmd = _connection . CreateCommand ( ) )
using ( var connection = CreateConnection ( true ) . Result )
{
using ( var cmd = connection . CreateCommand ( ) )
{
{
cmd . CommandText = BaseJobSelectText + " where Id=@Id" ;
cmd . CommandText = BaseJobSelectText + " where Id=@Id" ;
@ -207,6 +95,7 @@ namespace MediaBrowser.Server.Implementations.Sync
return null ;
return null ;
}
}
}
private SyncJob GetJob ( IDataReader reader )
private SyncJob GetJob ( IDataReader reader )
{
{
@ -283,15 +172,15 @@ namespace MediaBrowser.Server.Implementations.Sync
public Task Create ( SyncJob job )
public Task Create ( SyncJob job )
{
{
return InsertOrUpdate ( job , _insertJobCommand ) ;
return InsertOrUpdate ( job , true ) ;
}
}
public Task Update ( SyncJob job )
public Task Update ( SyncJob job )
{
{
return InsertOrUpdate ( job , _updateJobCommand ) ;
return InsertOrUpdate ( job , false ) ;
}
}
private async Task InsertOrUpdate ( SyncJob job , IDbCommand cmd )
private async Task InsertOrUpdate ( SyncJob job , bool insert )
{
{
if ( job = = null )
if ( job = = null )
{
{
@ -300,13 +189,62 @@ namespace MediaBrowser.Server.Implementations.Sync
CheckDisposed ( ) ;
CheckDisposed ( ) ;
await WriteLock . WaitAsync ( ) . ConfigureAwait ( false ) ;
using ( var connection = await CreateConnection ( ) . ConfigureAwait ( false ) )
{
using ( var cmd = connection . CreateCommand ( ) )
{
if ( insert )
{
cmd . CommandText = "insert into SyncJobs (Id, TargetId, Name, Profile, Quality, Bitrate, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount) values (@Id, @TargetId, @Name, @Profile, @Quality, @Bitrate, @Status, @Progress, @UserId, @ItemIds, @Category, @ParentId, @UnwatchedOnly, @ItemLimit, @SyncNewContent, @DateCreated, @DateLastModified, @ItemCount)" ;
cmd . Parameters . Add ( cmd , "@Id" ) ;
cmd . Parameters . Add ( cmd , "@TargetId" ) ;
cmd . Parameters . Add ( cmd , "@Name" ) ;
cmd . Parameters . Add ( cmd , "@Profile" ) ;
cmd . Parameters . Add ( cmd , "@Quality" ) ;
cmd . Parameters . Add ( cmd , "@Bitrate" ) ;
cmd . Parameters . Add ( cmd , "@Status" ) ;
cmd . Parameters . Add ( cmd , "@Progress" ) ;
cmd . Parameters . Add ( cmd , "@UserId" ) ;
cmd . Parameters . Add ( cmd , "@ItemIds" ) ;
cmd . Parameters . Add ( cmd , "@Category" ) ;
cmd . Parameters . Add ( cmd , "@ParentId" ) ;
cmd . Parameters . Add ( cmd , "@UnwatchedOnly" ) ;
cmd . Parameters . Add ( cmd , "@ItemLimit" ) ;
cmd . Parameters . Add ( cmd , "@SyncNewContent" ) ;
cmd . Parameters . Add ( cmd , "@DateCreated" ) ;
cmd . Parameters . Add ( cmd , "@DateLastModified" ) ;
cmd . Parameters . Add ( cmd , "@ItemCount" ) ;
}
else
{
cmd . CommandText = "update SyncJobs set TargetId=@TargetId,Name=@Name,Profile=@Profile,Quality=@Quality,Bitrate=@Bitrate,Status=@Status,Progress=@Progress,UserId=@UserId,ItemIds=@ItemIds,Category=@Category,ParentId=@ParentId,UnwatchedOnly=@UnwatchedOnly,ItemLimit=@ItemLimit,SyncNewContent=@SyncNewContent,DateCreated=@DateCreated,DateLastModified=@DateLastModified,ItemCount=@ItemCount where Id=@Id" ;
cmd . Parameters . Add ( cmd , "@Id" ) ;
cmd . Parameters . Add ( cmd , "@TargetId" ) ;
cmd . Parameters . Add ( cmd , "@Name" ) ;
cmd . Parameters . Add ( cmd , "@Profile" ) ;
cmd . Parameters . Add ( cmd , "@Quality" ) ;
cmd . Parameters . Add ( cmd , "@Bitrate" ) ;
cmd . Parameters . Add ( cmd , "@Status" ) ;
cmd . Parameters . Add ( cmd , "@Progress" ) ;
cmd . Parameters . Add ( cmd , "@UserId" ) ;
cmd . Parameters . Add ( cmd , "@ItemIds" ) ;
cmd . Parameters . Add ( cmd , "@Category" ) ;
cmd . Parameters . Add ( cmd , "@ParentId" ) ;
cmd . Parameters . Add ( cmd , "@UnwatchedOnly" ) ;
cmd . Parameters . Add ( cmd , "@ItemLimit" ) ;
cmd . Parameters . Add ( cmd , "@SyncNewContent" ) ;
cmd . Parameters . Add ( cmd , "@DateCreated" ) ;
cmd . Parameters . Add ( cmd , "@DateLastModified" ) ;
cmd . Parameters . Add ( cmd , "@ItemCount" ) ;
}
IDbTransaction transaction = null ;
IDbTransaction transaction = null ;
try
try
{
{
transaction = _connection . BeginTransaction ( ) ;
transaction = connection. BeginTransaction ( ) ;
var index = 0 ;
var index = 0 ;
@ -361,8 +299,8 @@ namespace MediaBrowser.Server.Implementations.Sync
{
{
transaction . Dispose ( ) ;
transaction . Dispose ( ) ;
}
}
}
WriteLock . Release ( ) ;
}
}
}
}
}
@ -375,24 +313,33 @@ namespace MediaBrowser.Server.Implementations.Sync
CheckDisposed ( ) ;
CheckDisposed ( ) ;
await WriteLock . WaitAsync ( ) . ConfigureAwait ( false ) ;
using ( var connection = await CreateConnection ( ) . ConfigureAwait ( false ) )
{
using ( var deleteJobCommand = connection . CreateCommand ( ) )
{
using ( var deleteJobItemsCommand = connection . CreateCommand ( ) )
{
IDbTransaction transaction = null ;
IDbTransaction transaction = null ;
try
try
{
{
transaction = _connection . BeginTransaction ( ) ;
// _deleteJobCommand
deleteJobCommand . CommandText = "delete from SyncJobs where Id=@Id" ;
deleteJobCommand . Parameters . Add ( deleteJobCommand , "@Id" ) ;
var index = 0 ;
transaction = connection . BeginTransaction ( ) ;
_ deleteJobCommand. GetParameter ( index + + ) . Value = new Guid ( id ) ;
deleteJobCommand. GetParameter ( 0 ) . Value = new Guid ( id ) ;
_ deleteJobCommand. Transaction = transaction ;
deleteJobCommand. Transaction = transaction ;
_ deleteJobCommand. ExecuteNonQuery ( ) ;
deleteJobCommand. ExecuteNonQuery ( ) ;
index = 0 ;
// _deleteJobItemsCommand
_deleteJobItemsCommand . GetParameter ( index + + ) . Value = id ;
deleteJobItemsCommand . CommandText = "delete from SyncJobItems where JobId=@JobId" ;
_deleteJobItemsCommand . Transaction = transaction ;
deleteJobItemsCommand . Parameters . Add ( deleteJobItemsCommand , "@JobId" ) ;
_deleteJobItemsCommand . ExecuteNonQuery ( ) ;
deleteJobItemsCommand . GetParameter ( 0 ) . Value = id ;
deleteJobItemsCommand . Transaction = transaction ;
deleteJobItemsCommand . ExecuteNonQuery ( ) ;
transaction . Commit ( ) ;
transaction . Commit ( ) ;
}
}
@ -422,8 +369,9 @@ namespace MediaBrowser.Server.Implementations.Sync
{
{
transaction . Dispose ( ) ;
transaction . Dispose ( ) ;
}
}
}
WriteLock . Release ( ) ;
}
}
}
}
}
}
@ -436,7 +384,9 @@ namespace MediaBrowser.Server.Implementations.Sync
CheckDisposed ( ) ;
CheckDisposed ( ) ;
using ( var cmd = _connection . CreateCommand ( ) )
using ( var connection = CreateConnection ( true ) . Result )
{
using ( var cmd = connection . CreateCommand ( ) )
{
{
cmd . CommandText = BaseJobSelectText ;
cmd . CommandText = BaseJobSelectText ;
@ -514,6 +464,7 @@ namespace MediaBrowser.Server.Implementations.Sync
} ;
} ;
}
}
}
}
}
public SyncJobItem GetJobItem ( string id )
public SyncJobItem GetJobItem ( string id )
{
{
@ -526,7 +477,9 @@ namespace MediaBrowser.Server.Implementations.Sync
var guid = new Guid ( id ) ;
var guid = new Guid ( id ) ;
using ( var cmd = _connection . CreateCommand ( ) )
using ( var connection = CreateConnection ( true ) . Result )
{
using ( var cmd = connection . CreateCommand ( ) )
{
{
cmd . CommandText = BaseJobItemSelectText + " where Id=@Id" ;
cmd . CommandText = BaseJobItemSelectText + " where Id=@Id" ;
@ -543,6 +496,7 @@ namespace MediaBrowser.Server.Implementations.Sync
return null ;
return null ;
}
}
}
private QueryResult < T > GetJobItemReader < T > ( SyncJobItemQuery query , string baseSelectText , Func < IDataReader , T > itemFactory )
private QueryResult < T > GetJobItemReader < T > ( SyncJobItemQuery query , string baseSelectText , Func < IDataReader , T > itemFactory )
{
{
@ -551,7 +505,9 @@ namespace MediaBrowser.Server.Implementations.Sync
throw new ArgumentNullException ( "query" ) ;
throw new ArgumentNullException ( "query" ) ;
}
}
using ( var cmd = _connection . CreateCommand ( ) )
using ( var connection = CreateConnection ( true ) . Result )
{
using ( var cmd = connection . CreateCommand ( ) )
{
{
cmd . CommandText = baseSelectText ;
cmd . CommandText = baseSelectText ;
@ -628,6 +584,7 @@ namespace MediaBrowser.Server.Implementations.Sync
} ;
} ;
}
}
}
}
}
public QueryResult < SyncedItemProgress > GetSyncedItemProgresses ( SyncJobItemQuery query )
public QueryResult < SyncedItemProgress > GetSyncedItemProgresses ( SyncJobItemQuery query )
{
{
@ -641,15 +598,15 @@ namespace MediaBrowser.Server.Implementations.Sync
public Task Create ( SyncJobItem jobItem )
public Task Create ( SyncJobItem jobItem )
{
{
return InsertOrUpdate ( jobItem , _insertJobItemCommand ) ;
return InsertOrUpdate ( jobItem , true ) ;
}
}
public Task Update ( SyncJobItem jobItem )
public Task Update ( SyncJobItem jobItem )
{
{
return InsertOrUpdate ( jobItem , _updateJobItemCommand ) ;
return InsertOrUpdate ( jobItem , false ) ;
}
}
private async Task InsertOrUpdate ( SyncJobItem jobItem , IDbCommand cmd )
private async Task InsertOrUpdate ( SyncJobItem jobItem , bool insert )
{
{
if ( jobItem = = null )
if ( jobItem = = null )
{
{
@ -658,13 +615,59 @@ namespace MediaBrowser.Server.Implementations.Sync
CheckDisposed ( ) ;
CheckDisposed ( ) ;
await WriteLock . WaitAsync ( ) . ConfigureAwait ( false ) ;
using ( var connection = await CreateConnection ( ) . ConfigureAwait ( false ) )
{
using ( var cmd = connection . CreateCommand ( ) )
{
if ( insert )
{
cmd . CommandText = "insert into SyncJobItems (Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource, IsMarkedForRemoval, JobItemIndex, ItemDateModifiedTicks) values (@Id, @ItemId, @ItemName, @MediaSourceId, @JobId, @TemporaryPath, @OutputPath, @Status, @TargetId, @DateCreated, @Progress, @AdditionalFiles, @MediaSource, @IsMarkedForRemoval, @JobItemIndex, @ItemDateModifiedTicks)" ;
cmd . Parameters . Add ( cmd , "@Id" ) ;
cmd . Parameters . Add ( cmd , "@ItemId" ) ;
cmd . Parameters . Add ( cmd , "@ItemName" ) ;
cmd . Parameters . Add ( cmd , "@MediaSourceId" ) ;
cmd . Parameters . Add ( cmd , "@JobId" ) ;
cmd . Parameters . Add ( cmd , "@TemporaryPath" ) ;
cmd . Parameters . Add ( cmd , "@OutputPath" ) ;
cmd . Parameters . Add ( cmd , "@Status" ) ;
cmd . Parameters . Add ( cmd , "@TargetId" ) ;
cmd . Parameters . Add ( cmd , "@DateCreated" ) ;
cmd . Parameters . Add ( cmd , "@Progress" ) ;
cmd . Parameters . Add ( cmd , "@AdditionalFiles" ) ;
cmd . Parameters . Add ( cmd , "@MediaSource" ) ;
cmd . Parameters . Add ( cmd , "@IsMarkedForRemoval" ) ;
cmd . Parameters . Add ( cmd , "@JobItemIndex" ) ;
cmd . Parameters . Add ( cmd , "@ItemDateModifiedTicks" ) ;
}
else
{
// cmd
cmd . CommandText = "update SyncJobItems set ItemId=@ItemId,ItemName=@ItemName,MediaSourceId=@MediaSourceId,JobId=@JobId,TemporaryPath=@TemporaryPath,OutputPath=@OutputPath,Status=@Status,TargetId=@TargetId,DateCreated=@DateCreated,Progress=@Progress,AdditionalFiles=@AdditionalFiles,MediaSource=@MediaSource,IsMarkedForRemoval=@IsMarkedForRemoval,JobItemIndex=@JobItemIndex,ItemDateModifiedTicks=@ItemDateModifiedTicks where Id=@Id" ;
cmd . Parameters . Add ( cmd , "@Id" ) ;
cmd . Parameters . Add ( cmd , "@ItemId" ) ;
cmd . Parameters . Add ( cmd , "@ItemName" ) ;
cmd . Parameters . Add ( cmd , "@MediaSourceId" ) ;
cmd . Parameters . Add ( cmd , "@JobId" ) ;
cmd . Parameters . Add ( cmd , "@TemporaryPath" ) ;
cmd . Parameters . Add ( cmd , "@OutputPath" ) ;
cmd . Parameters . Add ( cmd , "@Status" ) ;
cmd . Parameters . Add ( cmd , "@TargetId" ) ;
cmd . Parameters . Add ( cmd , "@DateCreated" ) ;
cmd . Parameters . Add ( cmd , "@Progress" ) ;
cmd . Parameters . Add ( cmd , "@AdditionalFiles" ) ;
cmd . Parameters . Add ( cmd , "@MediaSource" ) ;
cmd . Parameters . Add ( cmd , "@IsMarkedForRemoval" ) ;
cmd . Parameters . Add ( cmd , "@JobItemIndex" ) ;
cmd . Parameters . Add ( cmd , "@ItemDateModifiedTicks" ) ;
}
IDbTransaction transaction = null ;
IDbTransaction transaction = null ;
try
try
{
{
transaction = _connection . BeginTransaction ( ) ;
transaction = connection. BeginTransaction ( ) ;
var index = 0 ;
var index = 0 ;
@ -717,8 +720,8 @@ namespace MediaBrowser.Server.Implementations.Sync
{
{
transaction . Dispose ( ) ;
transaction . Dispose ( ) ;
}
}
}
WriteLock . Release ( ) ;
}
}
}
}
}
@ -809,19 +812,5 @@ namespace MediaBrowser.Server.Implementations.Sync
return item ;
return item ;
}
}
protected override void CloseConnection ( )
{
if ( _connection ! = null )
{
if ( _connection . IsOpen ( ) )
{
_connection . Close ( ) ;
}
_connection . Dispose ( ) ;
_connection = null ;
}
}
}
}
}
}