diff --git a/IISExpress/AppServer/applicationhost.config b/IISExpress/AppServer/applicationhost.config index c04eb1d2c..f1e3a3538 100644 --- a/IISExpress/AppServer/applicationhost.config +++ b/IISExpress/AppServer/applicationhost.config @@ -125,7 +125,7 @@ - + diff --git a/NzbDrone.Core.Test/ParserTest.cs b/NzbDrone.Core.Test/ParserTest.cs index 479aa3628..c2121760f 100644 --- a/NzbDrone.Core.Test/ParserTest.cs +++ b/NzbDrone.Core.Test/ParserTest.cs @@ -59,6 +59,7 @@ public void ParseTitle_single(string postTitle, string title, int seasonNumber, [TestCase(@"D:\shares\TV Shows\Parks And Recreation\Season 2\S02E21 - 94 Meetings - 720p TV.mkv", 2, 21)] [TestCase(@"D:\shares\TV Shows\Battlestar Galactica (2003)\Season 2\S02E21.avi", 2, 21)] [TestCase("C:/Test/TV/Chuck.4x05.HDTV.XviD-LOL", 4, 5)] + [TestCase(@"P:\TV Shows\House\Season 6\S06E13 - 5 to 9 - 720p BluRay.mkv", 6, 13)] public void PathParse_tests(string path, int season, int episode) { var result = Parser.ParsePath(path); diff --git a/NzbDrone.Core/Datastore/Connection.cs b/NzbDrone.Core/Datastore/Connection.cs index 12682555d..7c76e2b3b 100644 --- a/NzbDrone.Core/Datastore/Connection.cs +++ b/NzbDrone.Core/Datastore/Connection.cs @@ -45,19 +45,17 @@ public static String LogConnectionString public static IDatabase GetPetaPocoDb(string connectionString, Boolean profiled = true) { MigrationsHelper.Run(connectionString, true); - var sqliteConnection = new SqlCeConnection(connectionString); - DbConnection connection = sqliteConnection; - if (profiled) - { - connection = ProfiledDbConnection.Get(sqliteConnection); - } + var factory = new PetaDbProviderFactory + { + IsProfiled = profiled + }; - var db = new Database(connection, Database.DBType.SqlServerCE); - db.ForceDateTimesToUtc = false; - - if (connection.State != ConnectionState.Open) - connection.Open(); + var db = new Database(connectionString, factory, Database.DBType.SqlServerCE) + { + KeepConnectionAlive = true, + ForceDateTimesToUtc = false, + }; return db; } diff --git a/NzbDrone.Core/Datastore/PetaDbProviderFactory.cs b/NzbDrone.Core/Datastore/PetaDbProviderFactory.cs new file mode 100644 index 000000000..593f0c6fa --- /dev/null +++ b/NzbDrone.Core/Datastore/PetaDbProviderFactory.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Data.SqlServerCe; +using System.Linq; +using System.Text; +using MvcMiniProfiler.Data; + +namespace NzbDrone.Core.Datastore +{ + class PetaDbProviderFactory : DbProviderFactory + { + public Boolean IsProfiled { get; set; } + + public override DbConnection CreateConnection() + { + var sqliteConnection = new SqlCeConnection(); + DbConnection connection = sqliteConnection; + + if (IsProfiled) + { + connection = ProfiledDbConnection.Get(sqliteConnection); + } + + return connection; + } + } +} diff --git a/NzbDrone.Core/Datastore/PetaPoco/PetaPoco.cs b/NzbDrone.Core/Datastore/PetaPoco/PetaPoco.cs index 9dee00131..3497f2794 100644 --- a/NzbDrone.Core/Datastore/PetaPoco/PetaPoco.cs +++ b/NzbDrone.Core/Datastore/PetaPoco/PetaPoco.cs @@ -282,7 +282,7 @@ public Database(IDbConnection connection, DBType dbType) { _sharedConnection = connection; _connectionString = connection.ConnectionString; - _sharedConnectionDepth = 2; // Prevent closing external connection + _dbType = dbType; CommonConstruct(); } @@ -294,10 +294,11 @@ public Database(string connectionString, string providerName) CommonConstruct(); } - public Database(string connectionString, DbProviderFactory provider) + public Database(string connectionString, DbProviderFactory provider, DBType dbType) { _connectionString = connectionString; _factory = provider; + _dbType = dbType; CommonConstruct(); } @@ -375,6 +376,7 @@ public void Dispose() { // Automatically close one open connection reference // (Works with KeepConnectionAlive and manually opening a shared connection) + KeepConnectionAlive = false; CloseSharedConnection(); } @@ -384,18 +386,14 @@ public void Dispose() // Open a connection (can be nested) public void OpenSharedConnection() { - if (_sharedConnectionDepth == 0) + if (_sharedConnection == null || _sharedConnection.State == ConnectionState.Closed || _sharedConnection.State == ConnectionState.Broken) { _sharedConnection = _factory.CreateConnection(); _sharedConnection.ConnectionString = _connectionString; _sharedConnection.Open(); _sharedConnection = OnConnectionOpened(_sharedConnection); - - if (KeepConnectionAlive) - _sharedConnectionDepth++; // Make sure you call Dispose } - _sharedConnectionDepth++; } /// @@ -404,15 +402,11 @@ public void OpenSharedConnection() // Close a previously opened connection public void CloseSharedConnection() { - if (_sharedConnectionDepth > 0) + if (!KeepConnectionAlive && _sharedConnection != null) { - _sharedConnectionDepth--; - if (_sharedConnectionDepth == 0) - { - OnConnectionClosing(_sharedConnection); - _sharedConnection.Dispose(); - _sharedConnection = null; - } + OnConnectionClosing(_sharedConnection); + _sharedConnection.Dispose(); + _sharedConnection = null; } } @@ -2530,7 +2524,6 @@ static T RecurseInheritedTypes(Type t, Func cb) DbProviderFactory _factory; IDbConnection _sharedConnection; IDbTransaction _transaction; - int _sharedConnectionDepth; int _transactionDepth; bool _transactionCancelled; string _lastSql; diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index afa70eabc..be252641d 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -178,6 +178,7 @@ +