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 @@
+