diff --git a/IISExpress/AppServer/applicationhost.config b/IISExpress/AppServer/applicationhost.config
index 6c56a7b72..ac36581f6 100644
--- a/IISExpress/AppServer/applicationhost.config
+++ b/IISExpress/AppServer/applicationhost.config
@@ -148,7 +148,7 @@
-
+
diff --git a/NzbDrone.Core.Test/IndexerProviderTest.cs b/NzbDrone.Core.Test/IndexerProviderTest.cs
index 4f2723944..302fc7d97 100644
--- a/NzbDrone.Core.Test/IndexerProviderTest.cs
+++ b/NzbDrone.Core.Test/IndexerProviderTest.cs
@@ -57,8 +57,7 @@ public void Init_indexer_test()
public class MockIndexerProvider : IndexerProviderBase
{
- public MockIndexerProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IRepository repository, IndexerProvider indexerProvider)
- : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, repository, indexerProvider)
+ public MockIndexerProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider)
{
}
diff --git a/NzbDrone.Core.Test/RepoTest.cs b/NzbDrone.Core.Test/RepoTest.cs
index e4050614b..b1a071288 100644
--- a/NzbDrone.Core.Test/RepoTest.cs
+++ b/NzbDrone.Core.Test/RepoTest.cs
@@ -91,7 +91,8 @@ public void write_log()
Assert.AreEqual(message, logItem.Message);
Assert.AreEqual(Logger.Name, logItem.Logger);
Assert.AreEqual(Logger.Name, logItem.Logger);
- Assert.AreEqual(Instrumentation.LogLevel.Info, logItem.Level);
+ Assert.AreEqual(LogLevel.Info.Name, logItem.Level);
+ Assert.AreEqual("write_log", logItem.Method);
}
[Test]
@@ -122,10 +123,9 @@ public void write_log_exception()
Assert.AreNotEqual(new DateTime(), logItem.Time);
Assert.AreEqual(message, logItem.Message);
Assert.AreEqual(Logger.Name, logItem.Logger);
- Assert.AreEqual(Instrumentation.LogLevel.Error, logItem.Level);
+ Assert.AreEqual(LogLevel.Error.Name, logItem.Level);
Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType);
- Assert.AreEqual(ex.ToString(), logItem.ExceptionString);
- Assert.AreEqual(ex.Message, logItem.ExceptionMessage);
+ Assert.AreEqual(ex.ToString(), logItem.Exception);
}
[Test]
@@ -156,10 +156,9 @@ public void write_log_exception_no_message_should_use_exception_message()
Assert.AreNotEqual(new DateTime(), logItem.Time);
Assert.AreEqual(ex.Message, logItem.Message);
Assert.AreEqual(Logger.Name, logItem.Logger);
- Assert.AreEqual(Instrumentation.LogLevel.Error, logItem.Level);
+ Assert.AreEqual(LogLevel.Error.Name, logItem.Level);
Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType);
- Assert.AreEqual(ex.ToString(), logItem.ExceptionString);
- Assert.AreEqual(ex.Message, logItem.ExceptionMessage);
+ Assert.AreEqual(ex.ToString(), logItem.Exception);
}
}
}
\ No newline at end of file
diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs
index cc96b94f5..e227a57b9 100644
--- a/NzbDrone.Core/CentralDispatch.cs
+++ b/NzbDrone.Core/CentralDispatch.cs
@@ -131,8 +131,11 @@ private static void BindJobs()
_kernel.Bind().To().InTransientScope();
_kernel.Bind().To().InTransientScope();
_kernel.Get().Initialize();
+
+ new WebTimer().StartTimer(1);
}
+
private static void ForceMigration(IRepository repository)
{
repository.GetPaged(0, 1);
@@ -225,5 +228,7 @@ private static void SetupDefaultQualityProfiles(IRepository repository)
repository.Update(hd);
}
}
+
+
}
}
\ No newline at end of file
diff --git a/NzbDrone.Core/Instrumentation/Log.cs b/NzbDrone.Core/Instrumentation/Log.cs
index 1ee9905d6..70cad22ee 100644
--- a/NzbDrone.Core/Instrumentation/Log.cs
+++ b/NzbDrone.Core/Instrumentation/Log.cs
@@ -15,27 +15,16 @@ public class Log
public string Logger { get; set; }
- [SubSonicNullString]
- public string Stack { get; set; }
+ public string Method { get; set; }
[SubSonicNullString]
[SubSonicLongString]
- public string ExceptionMessage { get; set; }
-
- [SubSonicNullString]
- [SubSonicLongString]
- public string ExceptionString { get; set; }
+ public string Exception { get; set; }
[SubSonicNullString]
public string ExceptionType { get; set; }
- public LogLevel Level { get; set; }
+ public String Level { get; set; }
- //This is needed for Telerik grid binding
- [SubSonicIgnore]
- public string DisplayLevel
- {
- get { return Level.ToString(); }
- }
}
}
\ No newline at end of file
diff --git a/NzbDrone.Core/Instrumentation/LogLevel.cs b/NzbDrone.Core/Instrumentation/LogLevel.cs
deleted file mode 100644
index 704a1e06a..000000000
--- a/NzbDrone.Core/Instrumentation/LogLevel.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace NzbDrone.Core.Instrumentation
-{
- public enum LogLevel
- {
- Trace,
- Debug,
- Info,
- Warn,
- Error,
- Fatal
- }
-}
\ No newline at end of file
diff --git a/NzbDrone.Core/Instrumentation/SubsonicTarget.cs b/NzbDrone.Core/Instrumentation/SubsonicTarget.cs
index 6e10f0f3a..2e7510afd 100644
--- a/NzbDrone.Core/Instrumentation/SubsonicTarget.cs
+++ b/NzbDrone.Core/Instrumentation/SubsonicTarget.cs
@@ -20,11 +20,13 @@ protected override void Write(LogEventInfo logEvent)
log.Time = logEvent.TimeStamp;
log.Message = logEvent.FormattedMessage;
- if (log.Stack != null)
+ if (logEvent.UserStackFrame != null)
{
- log.Stack = logEvent.StackTrace.ToString();
+ log.Method = logEvent.UserStackFrame.GetMethod().Name;
}
+
+
log.Logger = logEvent.LoggerName;
if (logEvent.Exception != null)
@@ -32,44 +34,13 @@ protected override void Write(LogEventInfo logEvent)
if (String.IsNullOrWhiteSpace(log.Message))
log.Message = logEvent.Exception.Message;
- log.ExceptionMessage = logEvent.Exception.Message;
- log.ExceptionString = logEvent.Exception.ToString();
+ log.Exception = logEvent.Exception.ToString();
log.ExceptionType = logEvent.Exception.GetType().ToString();
}
- switch (logEvent.Level.Name.ToLower())
- {
- case "trace":
- {
- log.Level = LogLevel.Trace;
- break;
- }
- case "debug":
- {
- log.Level = LogLevel.Debug;
- break;
- }
- case "info":
- {
- log.Level = LogLevel.Info;
- break;
- }
- case "warn":
- {
- log.Level = LogLevel.Warn;
- break;
- }
- case "error":
- {
- log.Level = LogLevel.Error;
- break;
- }
- case "fatal":
- {
- log.Level = LogLevel.Fatal;
- break;
- }
- }
+
+ log.Level = logEvent.Level.Name;
+
_repo.Add(log);
}
diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj
index ea1498bf1..ac032a955 100644
--- a/NzbDrone.Core/NzbDrone.Core.csproj
+++ b/NzbDrone.Core/NzbDrone.Core.csproj
@@ -162,7 +162,6 @@
-
@@ -228,6 +227,7 @@
+
diff --git a/NzbDrone.Core/Providers/EpisodeProvider.cs b/NzbDrone.Core/Providers/EpisodeProvider.cs
index 88c32bb96..5396499b4 100644
--- a/NzbDrone.Core/Providers/EpisodeProvider.cs
+++ b/NzbDrone.Core/Providers/EpisodeProvider.cs
@@ -11,10 +11,7 @@ namespace NzbDrone.Core.Providers
{
public class EpisodeProvider
{
- //TODO: Remove parsing of the series name, it should be done in series provider
-
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
- private readonly HistoryProvider _history;
private readonly QualityProvider _quality;
private readonly SeasonProvider _seasons;
private readonly SeriesProvider _series;
@@ -23,13 +20,12 @@ public class EpisodeProvider
public EpisodeProvider(IRepository sonicRepo, SeriesProvider seriesProvider,
SeasonProvider seasonProvider, TvDbProvider tvDbProvider,
- HistoryProvider history, QualityProvider quality)
+ QualityProvider quality)
{
_sonicRepo = sonicRepo;
_series = seriesProvider;
_tvDb = tvDbProvider;
_seasons = seasonProvider;
- _history = history;
_quality = quality;
}
@@ -59,6 +55,15 @@ public virtual IList GetEpisodeBySeason(long seasonId)
return _sonicRepo.Find(e => e.SeasonId == seasonId);
}
+ public virtual IList GetEpisodeByParseResult(EpisodeParseResult parseResult)
+ {
+ return _sonicRepo.Find(e =>
+ e.SeriesId == parseResult.SeriesId &&
+ e.SeasonNumber == parseResult.SeasonNumber &&
+ parseResult.Episodes.Contains(e.EpisodeNumber));
+
+ }
+
public virtual String GetSabTitle(EpisodeParseResult parseResult)
{
//Show Name - 1x01-1x02 - Episode Name
@@ -101,7 +106,7 @@ public virtual bool IsNeeded(EpisodeParseResult parsedReport)
//Todo: How do we want to handle this really? Episode could be released before information is on TheTvDB
//(Parks and Rec did this a lot in the first season, from experience)
//Keivan: Should automatically add the episode to db with minimal information. then update the description/title when available.
- episodeInfo = new Episode()
+ episodeInfo = new Episode
{
SeriesId = parsedReport.SeriesId,
AirDate = DateTime.Now.Date,
@@ -135,13 +140,6 @@ public virtual bool IsNeeded(EpisodeParseResult parsedReport)
}
}
- //IsInHistory? (NZBDrone)
- if (_history.Exists(episodeInfo.EpisodeId, parsedReport.Quality, parsedReport.Proper))
- {
- Logger.Debug("Episode in history: {0}", episode.ToString());
- continue;
- }
-
return true; //If we get to this point and the file has not yet been rejected then accept it
}
diff --git a/NzbDrone.Core/Providers/HistoryProvider.cs b/NzbDrone.Core/Providers/HistoryProvider.cs
index f3f32771f..8dba22e29 100644
--- a/NzbDrone.Core/Providers/HistoryProvider.cs
+++ b/NzbDrone.Core/Providers/HistoryProvider.cs
@@ -22,21 +22,20 @@ public HistoryProvider()
{
}
- public virtual List AllItems()
+ public virtual IQueryable AllItems()
{
- return _sonicRepo.All().ToList();
+ return _sonicRepo.All();
}
public virtual void Purge()
{
- var all = _sonicRepo.All();
- _sonicRepo.DeleteMany(all);
+ _sonicRepo.DeleteMany(AllItems());
Logger.Info("History has been Purged");
}
public virtual void Trim()
{
- var old = _sonicRepo.All().Where(h => h.Date < DateTime.Now.AddDays(-30));
+ var old = AllItems().Where(h => h.Date < DateTime.Now.AddDays(-30));
_sonicRepo.DeleteMany(old);
Logger.Info("History has been trimmed, items older than 30 days have been removed");
}
@@ -44,16 +43,16 @@ public virtual void Trim()
public virtual void Insert(History item)
{
_sonicRepo.Add(item);
- //Logger.Info("Item added to history: {0} - {1}x{2:00}", item.Episode.Series.Title, item.Episode.SeasonNumber, item.Episode.EpisodeNumber);
+ Logger.Debug("Item added to history: {0} - {1}x{2:00}", item.Episode.Series.Title, item.Episode.SeasonNumber, item.Episode.EpisodeNumber);
}
public virtual bool Exists(int episodeId, QualityTypes quality, bool proper)
{
- //Looks for the existance of this episode in History
+ //Looks for the existence of this episode in History
if (_sonicRepo.Exists(h => h.EpisodeId == episodeId && h.Quality == quality && h.IsProper == proper))
return true;
- Logger.Debug("Episode not in History: {0}", episodeId);
+ Logger.Debug("Episode not in History. ID:{0} Q:{1} Proper:{2}", episodeId , quality, proper);
return false;
}
}
diff --git a/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs b/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs
index 327965e69..886cff85d 100644
--- a/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs
+++ b/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs
@@ -1,9 +1,9 @@
+using System;
using System.ServiceModel.Syndication;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
-using SubSonic.Repository;
namespace NzbDrone.Core.Providers.Indexer
{
@@ -13,23 +13,23 @@ public abstract class IndexerProviderBase
protected readonly ConfigProvider _configProvider;
protected readonly EpisodeProvider _episodeProvider;
private readonly HttpProvider _httpProvider;
- protected readonly IRepository _repository;
private readonly IndexerProvider _indexerProvider;
+ private readonly HistoryProvider _historyProvider;
protected readonly SeasonProvider _seasonProvider;
protected readonly SeriesProvider _seriesProvider;
- public IndexerProviderBase(SeriesProvider seriesProvider, SeasonProvider seasonProvider,
+ protected IndexerProviderBase(SeriesProvider seriesProvider, SeasonProvider seasonProvider,
EpisodeProvider episodeProvider, ConfigProvider configProvider,
- HttpProvider httpProvider, IRepository repository, IndexerProvider indexerProvider)
+ HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider)
{
_seriesProvider = seriesProvider;
_seasonProvider = seasonProvider;
_episodeProvider = episodeProvider;
_configProvider = configProvider;
_httpProvider = httpProvider;
- _repository = repository;
_indexerProvider = indexerProvider;
+ _historyProvider = historyProvider;
}
///
@@ -104,7 +104,28 @@ private void ProcessItem(SyndicationItem feedItem)
return;
}
- //Should probably queue item to download
+ var episodes = _episodeProvider.GetEpisodeByParseResult(parseResult);
+
+ foreach (var episode in episodes)
+ {
+ if (_historyProvider.Exists(episode.EpisodeId, parseResult.Quality, parseResult.Proper))
+ {
+ Logger.Debug("Episode in history: {0}", episode.ToString());
+ continue;
+ }
+
+ //TODO: Add episode to sab
+
+ _historyProvider.Insert(new History
+ {
+ Date = DateTime.Now,
+ EpisodeId = episode.EpisodeId,
+ IsProper = parseResult.Proper,
+ NzbTitle = feedItem.Title.Text,
+ Quality = parseResult.Quality
+ });
+ }
+
}
}
diff --git a/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs b/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs
index 1f5ab7807..70f5bf5dd 100644
--- a/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs
+++ b/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs
@@ -7,8 +7,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class NewzbinProvider : IndexerProviderBase
{
- public NewzbinProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IRepository repository, IndexerProvider indexerProvider)
- : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, repository, indexerProvider)
+ public NewzbinProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider)
{
}
diff --git a/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs b/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs
index c158a982d..d6c5f9300 100644
--- a/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs
+++ b/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs
@@ -6,8 +6,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class NzbMatrixProvider : IndexerProviderBase
{
- public NzbMatrixProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IRepository repository, IndexerProvider indexerProvider)
- : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, repository, indexerProvider)
+ public NzbMatrixProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider)
{
}
diff --git a/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs b/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs
index e8aa37bc8..dd847cf47 100644
--- a/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs
+++ b/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs
@@ -6,8 +6,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class NzbsOrgProvider : IndexerProviderBase
{
- public NzbsOrgProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IRepository repository, IndexerProvider indexerProvider)
- : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, repository, indexerProvider)
+ public NzbsOrgProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider)
{
}
diff --git a/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs b/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs
index 29eef883e..f02875361 100644
--- a/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs
+++ b/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs
@@ -6,8 +6,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class NzbsRUsProvider : IndexerProviderBase
{
- public NzbsRUsProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IRepository repository, IndexerProvider indexerProvider)
- : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, repository, indexerProvider)
+ public NzbsRUsProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider)
{
}
diff --git a/NzbDrone.Core/Repository/History.cs b/NzbDrone.Core/Repository/History.cs
index a9b94e882..d4346c3a7 100644
--- a/NzbDrone.Core/Repository/History.cs
+++ b/NzbDrone.Core/Repository/History.cs
@@ -14,9 +14,9 @@ public class History
public QualityTypes Quality { get; set; }
public DateTime Date { get; set; }
public bool IsProper { get; set; }
-
+
[SubSonicToOneRelation(ThisClassContainsJoinKey = true)]
- public virtual Episode Episode { get; private set; }
+ public virtual Episode Episode { get; protected set; }
}
}
\ No newline at end of file
diff --git a/NzbDrone.Core/WebTimer.cs b/NzbDrone.Core/WebTimer.cs
new file mode 100644
index 000000000..1c9ab69d4
--- /dev/null
+++ b/NzbDrone.Core/WebTimer.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Web;
+using System.Web.Caching;
+using NLog;
+
+namespace NzbDrone.Core
+{
+ class WebTimer
+ {
+
+ private static CacheItemRemovedCallback _onCacheRemove;
+ private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
+ public void StartTimer(int secondInterval)
+ {
+ _onCacheRemove = new CacheItemRemovedCallback(DoWork);
+
+ HttpRuntime.Cache.Insert(GetType().ToString(), secondInterval, null,
+ DateTime.Now.AddSeconds(secondInterval), Cache.NoSlidingExpiration,
+ CacheItemPriority.NotRemovable, _onCacheRemove);
+ }
+
+
+ public void DoWork(string k, object v, CacheItemRemovedReason r)
+ {
+ Logger.Info("Tick!");
+ StartTimer(Convert.ToInt32(v));
+ }
+ }
+}
diff --git a/NzbDrone.Web/Controllers/SeriesController.cs b/NzbDrone.Web/Controllers/SeriesController.cs
index 100320133..017f7db44 100644
--- a/NzbDrone.Web/Controllers/SeriesController.cs
+++ b/NzbDrone.Web/Controllers/SeriesController.cs
@@ -8,7 +8,6 @@
using NzbDrone.Core.Repository;
using NzbDrone.Web.Models;
using Telerik.Web.Mvc;
-using TvdbLib.Data;
namespace NzbDrone.Web.Controllers
{
diff --git a/NzbDrone.Web/Global.asax.cs b/NzbDrone.Web/Global.asax.cs
index 6de858dce..57401501b 100644
--- a/NzbDrone.Web/Global.asax.cs
+++ b/NzbDrone.Web/Global.asax.cs
@@ -3,6 +3,7 @@
using System.Reflection;
using System.Threading;
using System.Web;
+using System.Web.Caching;
using System.Web.Mvc;
using System.Web.Routing;
using Ninject;
@@ -65,13 +66,10 @@ public static void RegisterGlobalFilters(GlobalFilterCollection filters)
protected void Application_Error(object sender, EventArgs e)
{
var lastError = Server.GetLastError();
- if (lastError is HttpException)
+
+ if (lastError is HttpException && lastError.InnerException == null)
{
Logger.WarnException(String.Format("{0}. URL[{1}]", lastError.Message, Request.Path), lastError);
- if (Request.Path.EndsWith(".aspx", StringComparison.InvariantCultureIgnoreCase))
- {
- Response.Redirect(Request.ApplicationPath);
- }
return;
}
diff --git a/NzbDrone.Web/NzbDrone.Web.Publish.xml b/NzbDrone.Web/NzbDrone.Web.Publish.xml
index 58860a7c2..d7db229df 100644
--- a/NzbDrone.Web/NzbDrone.Web.Publish.xml
+++ b/NzbDrone.Web/NzbDrone.Web.Publish.xml
@@ -64,7 +64,7 @@
-
+
@@ -85,7 +85,7 @@
-
+
@@ -107,9 +107,11 @@
+
+
@@ -120,10 +122,8 @@
-
-
@@ -136,7 +136,7 @@
-
+
@@ -162,240 +162,486 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj
index af29bd968..ed8d6dda5 100644
--- a/NzbDrone.Web/NzbDrone.Web.csproj
+++ b/NzbDrone.Web/NzbDrone.Web.csproj
@@ -30,6 +30,7 @@
false
true
false
+ true
pdbonly
@@ -45,6 +46,9 @@
..\NzbDrone.Core\Libraries\Castle.Core.dll
+
+ True
+
False
..\packages\Ninject.2.2.1.0\lib\.NetFramework 4.0\Ninject.dll
@@ -70,14 +74,24 @@
-
+
+ True
+
+ True
+
+
+ True
-
- False
+ True
+
+
+ True
+
+
+ True
-
@@ -86,12 +100,15 @@
..\packages\TelerikMvcExtensions.2011.1.315\lib\net40\Telerik.Web.Mvc.dll
-
- False
+
+ True
+
+
+ True
+
+
..\NzbDrone.Core\Libraries\TvdbLib.dll
-
-
@@ -624,7 +641,6 @@
-
Designer
diff --git a/NzbDrone.Web/Views/Log/Index.aspx b/NzbDrone.Web/Views/Log/Index.aspx
index a52be74a6..f68469054 100644
--- a/NzbDrone.Web/Views/Log/Index.aspx
+++ b/NzbDrone.Web/Views/Log/Index.aspx
@@ -1,4 +1,5 @@
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage>" %>
+