|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Eloquera.Client;
|
|
|
|
|
using NzbDrone.Common;
|
|
|
|
|
using NzbDrone.Core.Repository;
|
|
|
|
|
using NzbDrone.Core.RootFolders;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Datastore
|
|
|
|
|
{
|
|
|
|
|
public class EloqueraDbFactory
|
|
|
|
|
{
|
|
|
|
|
private readonly EnvironmentProvider _environmentProvider;
|
|
|
|
|
|
|
|
|
|
private readonly string dllPath;
|
|
|
|
|
|
|
|
|
|
public EloqueraDbFactory(EnvironmentProvider environmentProvider)
|
|
|
|
|
{
|
|
|
|
|
_environmentProvider = environmentProvider;
|
|
|
|
|
dllPath = _environmentProvider.GetWebBinPath();// this is the path where Eloquera dlls live.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public EloqueraDb CreateMemoryDb()
|
|
|
|
|
{
|
|
|
|
|
return InternalCreate("server=(local);password=;options=inmemory;uselocalpath=" + dllPath, Guid.NewGuid().ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public EloqueraDb Create(string dbPath = null)
|
|
|
|
|
{
|
|
|
|
|
if (dbPath == null)
|
|
|
|
|
{
|
|
|
|
|
dbPath = _environmentProvider.GetElqMainDbPath();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var file = new FileInfo(dbPath);
|
|
|
|
|
|
|
|
|
|
return InternalCreate(string.Format("server=(local);password=;usedatapath={0};uselocalpath={1}", file.Directory.FullName, dllPath), file.Name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private EloqueraDb InternalCreate(string connectionString, string databaseName)
|
|
|
|
|
{
|
|
|
|
|
var db = new DB(connectionString);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
db.OpenDatabase(databaseName);
|
|
|
|
|
}
|
|
|
|
|
catch (FileNotFoundException)
|
|
|
|
|
{
|
|
|
|
|
db.CreateDatabase(databaseName);
|
|
|
|
|
db.OpenDatabase(databaseName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//This seemse to cause Invalid Cast Exceptions... WTF
|
|
|
|
|
//db.RefreshMode = ObjectRefreshMode.AlwaysReturnUpdatedValues;
|
|
|
|
|
|
|
|
|
|
RegisterTypeRules();
|
|
|
|
|
RegisterTypes(db);
|
|
|
|
|
|
|
|
|
|
return new EloqueraDb(db, new IdService(new IndexProvider(db)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RegisterTypeRules()
|
|
|
|
|
{
|
|
|
|
|
RootFolder rootFolder = null;
|
|
|
|
|
DB.TypeRules
|
|
|
|
|
//.SetIDField(() => rootFolder.Id)
|
|
|
|
|
.IgnoreProperty(() => rootFolder.FreeSpace)
|
|
|
|
|
.IgnoreProperty(() => rootFolder.UnmappedFolders);
|
|
|
|
|
|
|
|
|
|
//Series series = null;
|
|
|
|
|
//DB.TypeRules
|
|
|
|
|
// .SetIDField(() => series.Id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RegisterTypes(DB db)
|
|
|
|
|
{
|
|
|
|
|
db.RegisterType(typeof(RootFolder));
|
|
|
|
|
db.RegisterType(typeof(Series));
|
|
|
|
|
db.RegisterType(typeof(Episode));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|