Compare commits

...

16 Commits
develop ... v1

Author SHA1 Message Date
Mark McDowall 3e9f445ade Update notification bar added, changed update URL 2013-07-26 17:21:17 -07:00
Mark McDowall 98c533b039 Reference in csproj 2013-05-27 10:24:37 -07:00
Mark McDowall d4a96e7599 Removed DT MVC from core. 2013-05-27 10:17:50 -07:00
Mark McDowall 5788c10b9c Removed DT MVC Nuget dependency 2013-05-27 10:09:31 -07:00
Mark McDowall eb2dfc1917 WEBRips will be treated as WEBDL releases
New: WEBRips treated as WEBDL releases
2013-05-27 08:19:16 -07:00
Mark McDowall e090843755 Removed ET error reporting 2013-04-26 14:56:44 -07:00
Mark McDowall 1824fd6682 Converted rageid to long instead of int to handle nzbx.co default.
Fixed: Issue with some series when searching nzbx.co
2013-04-17 16:47:54 -07:00
Mark McDowall 649c5013b5 More detailed logging for file importing/upgrades. 2013-03-27 08:31:11 -07:00
Mark McDowall a48cef49f5 Do not import same quality episode
Fixed: Do not delete episode files to import the same quality file
2013-03-26 23:56:34 -07:00
Mark McDowall d6ad5ebb36 Fixed issue with create series directory on import 2013-03-21 08:40:44 -07:00
Mark McDowall 0d4bda1e1e Create series folder when processing downloads
New: Create series folder if it doesn't exist when processing downloads
2013-03-21 08:22:38 -07:00
Mark McDowall 54dc8ee35e Removed strict mocker from available update tests, for real this time.... 2013-02-23 10:02:58 -08:00
Mark McDowall 1202c9e6d0 Removed strict mocker from available update tests 2013-02-23 10:02:04 -08:00
Mark McDowall fd89435df8 Added UserAgent to DownloadString and DownloadFile
Fixed: Downloading nzbs from sites that require specific information in the request header
2013-02-23 09:54:58 -08:00
Mark McDowall d7c5f21cc6 Added warning to Download Client settings 2013-02-20 10:12:29 -08:00
Mark McDowall 4d9f75fe4d Changing default branch to master 2013-02-15 19:20:47 -06:00
36 changed files with 137 additions and 198 deletions

Binary file not shown.

View File

@ -12,10 +12,12 @@ namespace NzbDrone.Common
{ {
private readonly EnvironmentProvider _environmentProvider; private readonly EnvironmentProvider _environmentProvider;
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private static readonly Logger logger = LogManager.GetCurrentClassLogger();
private readonly string _userAgent;
public HttpProvider(EnvironmentProvider environmentProvider) public HttpProvider(EnvironmentProvider environmentProvider)
{ {
_environmentProvider = environmentProvider; _environmentProvider = environmentProvider;
_userAgent = String.Format("NzbDrone {0}", _environmentProvider.Version);
} }
public HttpProvider() public HttpProvider()
@ -37,6 +39,7 @@ namespace NzbDrone.Common
try try
{ {
var client = new WebClient { Credentials = identity }; var client = new WebClient { Credentials = identity };
client.Headers.Add(HttpRequestHeader.UserAgent, _userAgent);
return client.DownloadString(address); return client.DownloadString(address);
} }
catch (Exception ex) catch (Exception ex)
@ -49,7 +52,7 @@ namespace NzbDrone.Common
public virtual Stream DownloadStream(string url, NetworkCredential credential) public virtual Stream DownloadStream(string url, NetworkCredential credential)
{ {
var request = (HttpWebRequest)WebRequest.Create(url); var request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = String.Format("NzbDrone {0}", _environmentProvider.Version); request.UserAgent = _userAgent;
request.Credentials = credential; request.Credentials = credential;
var response = request.GetResponse(); var response = request.GetResponse();
@ -71,6 +74,7 @@ namespace NzbDrone.Common
var stopWatch = Stopwatch.StartNew(); var stopWatch = Stopwatch.StartNew();
var webClient = new WebClient(); var webClient = new WebClient();
webClient.Headers.Add(HttpRequestHeader.UserAgent, _userAgent);
webClient.DownloadFile(url, fileName); webClient.DownloadFile(url, fileName);
stopWatch.Stop(); stopWatch.Stop();
logger.Trace("Downloading Completed. took {0:0}s", stopWatch.Elapsed.Seconds); logger.Trace("Downloading Completed. took {0:0}s", stopWatch.Elapsed.Seconds);

View File

@ -2,7 +2,6 @@
using NLog; using NLog;
using NLog.Config; using NLog.Config;
using NLog.Targets; using NLog.Targets;
using NzbDrone.Common.NlogTargets;
namespace NzbDrone.Common namespace NzbDrone.Common
{ {
@ -112,36 +111,6 @@ namespace NzbDrone.Common
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", level, fileTarget)); LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", level, fileTarget));
} }
public static void RegisterRemote()
{
//if (EnviromentProvider.IsProduction)
//{
// try
// {
// var exceptioneerTarget = new ExceptioneerTarget();
// LogManager.Configuration.AddTarget("Exceptioneer", exceptioneerTarget);
// LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, exceptioneerTarget));
// }
// catch (Exception e)
// {
// Console.WriteLine(e);
// }
//}
try
{
var remoteTarget = new RemoteTarget();
LogManager.Configuration.AddTarget("RemoteTarget", remoteTarget);
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, remoteTarget));
}
catch (Exception e)
{
Console.WriteLine(e);
}
LogManager.ConfigurationReloaded += (sender, args) => RegisterRemote();
}
public static void Reload() public static void Reload()
{ {
LogManager.Configuration.Reload(); LogManager.Configuration.Reload();

View File

@ -1,21 +0,0 @@
using System.Linq;
using System.Diagnostics;
using NLog;
using NLog.Targets;
namespace NzbDrone.Common.NlogTargets
{
public class RemoteTarget : Target
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
protected override void Write(LogEventInfo logEvent)
{
if (logEvent == null || logEvent.Exception == null) return;
logger.Trace("Sending Exception to Service.NzbDrone.com . Process Name: {0}", Process.GetCurrentProcess().ProcessName);
ReportingService.ReportException(logEvent);
}
}
}

View File

@ -59,10 +59,6 @@
<Reference Include="Autofac.Configuration"> <Reference Include="Autofac.Configuration">
<HintPath>..\packages\Autofac.2.6.3.862\lib\NET40\Autofac.Configuration.dll</HintPath> <HintPath>..\packages\Autofac.2.6.3.862\lib\NET40\Autofac.Configuration.dll</HintPath>
</Reference> </Reference>
<Reference Include="Exceptron.Client, Version=1.0.7.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Exceptron.Client.1.0.7\lib\net20\Exceptron.Client.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
@ -87,7 +83,6 @@
<Compile Include="ConsoleProvider.cs" /> <Compile Include="ConsoleProvider.cs" />
<Compile Include="Contract\ReportBase.cs" /> <Compile Include="Contract\ReportBase.cs" />
<Compile Include="Contract\ParseErrorReport.cs" /> <Compile Include="Contract\ParseErrorReport.cs" />
<Compile Include="NlogTargets\RemoteTarget.cs" />
<Compile Include="IISProvider.cs" /> <Compile Include="IISProvider.cs" />
<Compile Include="Model\AuthenticationType.cs" /> <Compile Include="Model\AuthenticationType.cs" />
<Compile Include="PathExtentions.cs" /> <Compile Include="PathExtentions.cs" />
@ -121,6 +116,7 @@
<EmbedInteropTypes>True</EmbedInteropTypes> <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference> </COMReference>
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\nuget.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@ -1,8 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Exceptron.Client;
using Exceptron.Client.Configuration;
using NLog; using NLog;
using NzbDrone.Common.Contract; using NzbDrone.Common.Contract;
@ -16,7 +14,6 @@ namespace NzbDrone.Common
private const string PARSE_URL = SERVICE_URL + "/ParseError"; private const string PARSE_URL = SERVICE_URL + "/ParseError";
public static RestProvider RestProvider { get; set; } public static RestProvider RestProvider { get; set; }
public static ExceptronClient ExceptronClient { get; set; }
private static readonly HashSet<string> parserErrorCache = new HashSet<string>(); private static readonly HashSet<string> parserErrorCache = new HashSet<string>();
@ -57,68 +54,6 @@ namespace NzbDrone.Common
} }
} }
public static string ReportException(LogEventInfo logEvent)
{
try
{
VerifyDependencies();
var exceptionData = new ExceptionData();
exceptionData.Exception = logEvent.Exception;
exceptionData.Component = logEvent.LoggerName;
exceptionData.Message = logEvent.FormattedMessage;
exceptionData.UserId = EnvironmentProvider.UGuid.ToString().Replace("-", string.Empty);
if (logEvent.Level <= LogLevel.Info)
{
exceptionData.Severity = ExceptionSeverity.None;
}
else if (logEvent.Level <= LogLevel.Warn)
{
exceptionData.Severity = ExceptionSeverity.Warning;
}
else if (logEvent.Level <= LogLevel.Error)
{
exceptionData.Severity = ExceptionSeverity.Error;
}
else if (logEvent.Level <= LogLevel.Fatal)
{
exceptionData.Severity = ExceptionSeverity.Fatal;
}
return ExceptronClient.SubmitException(exceptionData).RefId;
}
catch (Exception e)
{
if (!EnvironmentProvider.IsProduction)
{
throw;
}
if (logEvent.LoggerName != logger.Name)//prevents a recursive loop.
{
logger.WarnException("Unable to report exception. ", e);
}
}
return null;
}
public static void SetupExceptronDriver()
{
var config = new ExceptronConfiguration
{
ApiKey = "CB230C312E5C4FF38B4FB9644B05E60G",
ThrowExceptions = !EnvironmentProvider.IsProduction,
};
ExceptronClient = new ExceptronClient(config)
{
ApplicationVersion = new EnvironmentProvider().Version.ToString()
};
}
private static void VerifyDependencies() private static void VerifyDependencies()
{ {
if (RestProvider == null) if (RestProvider == null)
@ -133,19 +68,6 @@ namespace NzbDrone.Common
throw new InvalidOperationException("REST Provider wasn't configured correctly."); throw new InvalidOperationException("REST Provider wasn't configured correctly.");
} }
} }
if (ExceptronClient == null)
{
if (EnvironmentProvider.IsProduction)
{
logger.Warn("Exceptron Driver wasn't provided. creating new one!");
SetupExceptronDriver();
}
else
{
throw new InvalidOperationException("Exceptron Driver wasn't configured correctly.");
}
}
} }
} }
} }

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Autofac" version="2.6.3.862" targetFramework="net40" /> <package id="Autofac" version="2.6.3.862" targetFramework="net40" />
<package id="Exceptron.Client" version="1.0.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" /> <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
<package id="NLog" version="2.0.0.2000" /> <package id="NLog" version="2.0.0.2000" />
</packages> </packages>

View File

@ -56,30 +56,5 @@ namespace NzbDrone.Core.Test.Integeration
dailySeries.Should().NotBeEmpty(); dailySeries.Should().NotBeEmpty();
dailySeries.Should().OnlyContain(c => c > 0); dailySeries.Should().OnlyContain(c => c > 0);
} }
[Test]
public void should_be_able_to_submit_exceptions()
{
ReportingService.SetupExceptronDriver();
try
{
ThrowException();
}
catch (Exception e)
{
var log = new LogEventInfo
{
LoggerName = "LoggerName.LoggerName.LoggerName.LoggerName",
Exception = e,
Message = "New message string. New message string.",
};
var hash = ReportingService.ReportException(log);
hash.Should().HaveLength(8);
}
}
} }
} }

View File

@ -78,7 +78,9 @@ namespace NzbDrone.Core.Test.ParserTests
new object[] { "Dexter - S01E01 - Title [HDTV-720p]", QualityTypes.HDTV720p, false }, new object[] { "Dexter - S01E01 - Title [HDTV-720p]", QualityTypes.HDTV720p, false },
new object[] { "Dexter - S01E01 - Title [HDTV-1080p]", QualityTypes.HDTV1080p, false }, new object[] { "Dexter - S01E01 - Title [HDTV-1080p]", QualityTypes.HDTV1080p, false },
new object[] { "POI S02E11 1080i HDTV DD5.1 MPEG2-TrollHD", QualityTypes.RAWHD, false }, new object[] { "POI S02E11 1080i HDTV DD5.1 MPEG2-TrollHD", QualityTypes.RAWHD, false },
new object[] { "How I Met Your Mother S01E18 Nothing Good Happens After 2 A.M. 720p HDTV DD5.1 MPEG2-TrollHD", QualityTypes.RAWHD, false } new object[] { "How I Met Your Mother S01E18 Nothing Good Happens After 2 A.M. 720p HDTV DD5.1 MPEG2-TrollHD", QualityTypes.RAWHD, false },
new object[] { "Arrested.Development.S04E01.iNTERNAL.1080p.WEBRip.x264-QRUS", QualityTypes.WEBDL1080p, false },
new object[] { "Arrested.Development.S04E01.720p.WEBRip.AAC2.0.x264-NFRiP", QualityTypes.WEBDL720p, false }
}; };
public static object[] SelfQualityParserCases = public static object[] SelfQualityParserCases =

View File

@ -24,6 +24,10 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
{ {
new object[] { QualityTypes.SDTV, false }, new object[] { QualityTypes.SDTV, false },
new object[] { QualityTypes.DVD, true }, new object[] { QualityTypes.DVD, true },
};
public static object[] SkipImportTestCases =
{
new object[] { QualityTypes.HDTV720p, false } new object[] { QualityTypes.HDTV720p, false }
}; };
@ -78,7 +82,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
} }
[Test, TestCaseSource("ImportTestCases")] [Test, TestCaseSource("ImportTestCases")]
public void import_new_file_with_better_same_quality_should_succeed(QualityTypes currentFileQuality, bool currentFileProper) public void import_new_file_with_better_quality_should_succeed(QualityTypes currentFileQuality, bool currentFileProper)
{ {
const string newFile = @"WEEDS.S03E01.DUAL.1080p.HELLYWOOD.mkv"; const string newFile = @"WEEDS.S03E01.DUAL.1080p.HELLYWOOD.mkv";
@ -103,6 +107,33 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
VerifyFileImport(result, Mocker, fakeEpisode, SIZE); VerifyFileImport(result, Mocker, fakeEpisode, SIZE);
} }
[Test, TestCaseSource("SkipImportTestCases")]
public void import_new_file_with_same_quality_should_not_import(QualityTypes currentFileQuality, bool currentFileProper)
{
const string newFile = @"WEEDS.S03E01.DUAL.1080p.HELLYWOOD.mkv";
//Fakes
var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeEpisode = Builder<Episode>.CreateNew()
.With(e => e.EpisodeFile = Builder<EpisodeFile>.CreateNew()
.With(g => g.Quality = (QualityTypes)currentFileQuality)
.And(g => g.Proper = currentFileProper).Build()
).Build();
With80MBFile();
Mocker.GetMock<EpisodeProvider>()
.Setup(e => e.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> { fakeEpisode });
//Act
var result = Mocker.Resolve<DiskScanProvider>().ImportFile(fakeSeries, newFile);
//Assert
VerifySkipImport(result, Mocker);
}
[TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")] [TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")]
[TestCase("WEEDS.S03E01.DUAL.SDTV.XviD.AC3.-HELLYWOOD.avi")] [TestCase("WEEDS.S03E01.DUAL.SDTV.XviD.AC3.-HELLYWOOD.avi")]
public void import_new_file_episode_has_same_or_better_quality_should_skip(string fileName) public void import_new_file_episode_has_same_or_better_quality_should_skip(string fileName)
@ -235,10 +266,9 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<RecycleBinProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Once()); Mocker.GetMock<RecycleBinProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Once());
} }
[TestCase("WEEDS.S03E01.DUAL.hdtv.XviD.AC3.-HELLYWOOD.avi")]
[TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")] [TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")]
[TestCase("WEEDS.S03E01.DUAL.bluray.x264.AC3.-HELLYWOOD.mkv")] [TestCase("WEEDS.S03E01.DUAL.bluray.x264.AC3.-HELLYWOOD.mkv")]
public void import_new_multi_part_file_episode_has_equal_or_better_quality_than_existing(string fileName) public void import_new_multi_part_file_episode_has_better_quality_than_existing(string fileName)
{ {
//Fakes //Fakes
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
@ -267,6 +297,35 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<RecycleBinProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Once()); Mocker.GetMock<RecycleBinProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Once());
} }
[TestCase("WEEDS.S03E01.DUAL.hdtv.XviD.AC3.-HELLYWOOD.avi")]
public void skip_import_new_multi_part_file_episode_has_same_quality_as_existing(string fileName)
{
//Fakes
var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(2)
.All()
.With(e => e.EpisodeFile = Builder<EpisodeFile>.CreateNew()
.With(f => f.Quality = QualityTypes.SDTV)
.Build())
.Build();
With80MBFile();
Mocker.GetMock<MediaFileProvider>()
.Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false);
Mocker.GetMock<EpisodeProvider>()
.Setup(e => e.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(fakeEpisodes);
//Act
var result = Mocker.Resolve<DiskScanProvider>().ImportFile(fakeSeries, fileName);
//Assert
VerifySkipImport(result, Mocker);
}
[TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")] [TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")]
[TestCase("WEEDS.S03E01.DUAL.HDTV.XviD.AC3.-HELLYWOOD.avi")] [TestCase("WEEDS.S03E01.DUAL.HDTV.XviD.AC3.-HELLYWOOD.avi")]
public void skip_import_new_multi_part_file_episode_existing_has_better_quality(string fileName) public void skip_import_new_multi_part_file_episode_existing_has_better_quality(string fileName)

View File

@ -420,19 +420,28 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests
} }
[Test] [Test]
public void should_return_if_series_path_does_not_exist() public void should_create_series_directory_if_series_path_does_not_exist()
{ {
var downloadName = new DirectoryInfo(@"C:\Test\Drop\30.Rock.S01E01.Pilot"); var downloadName = new DirectoryInfo(@"C:\Test\Drop\30.Rock.S01E01.Pilot");
WithValidSeries(); WithValidSeries();
WithLotsOfFreeDiskSpace();
WithImportedFiles(downloadName.FullName);
Mocker.GetMock<DiskProvider>() Mocker.GetMock<DiskProvider>()
.Setup(s => s.FolderExists(fakeSeries.Path)) .Setup(s => s.FolderExists(fakeSeries.Path))
.Returns(false); .Returns(false);
Mocker.GetMock<SeriesProvider>().Setup(s => s.FindSeries("office")).Returns(fakeSeries);
Mocker.GetMock<DiskScanProvider>().Setup(s => s.CleanUpDropFolder(downloadName.FullName));
Mocker.GetMock<DiskScanProvider>().Setup(s => s.MoveEpisodeFile(It.IsAny<EpisodeFile>(), true)).Returns(new EpisodeFile());
Mocker.GetMock<DiskProvider>().Setup(s => s.GetDirectorySize(downloadName.FullName)).Returns(Constants.IgnoreFileSize - 1.Megabytes());
Mocker.GetMock<DiskProvider>().Setup(s => s.DeleteFolder(downloadName.FullName, true));
Mocker.GetMock<DiskProvider>().Setup(s => s.IsFolderLocked(downloadName.FullName)).Returns(false);
Mocker.Resolve<PostDownloadProvider>().ProcessDownload(downloadName); Mocker.Resolve<PostDownloadProvider>().ProcessDownload(downloadName);
Mocker.GetMock<DiskProvider>().Verify(c => c.GetDirectorySize(It.IsAny<String>()), Times.Never()); Mocker.GetMock<DiskProvider>().Verify(c => c.CreateDirectory(fakeSeries.Path), Times.Once());
ExceptionVerification.ExpectedWarns(1); ExceptionVerification.ExpectedWarns(1);
} }

View File

@ -20,8 +20,6 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests
[SetUp] [SetUp]
public void Setup() public void Setup()
{ {
WithStrictMocker();
Mocker.GetMock<ConfigProvider>().SetupGet(c => c.UpdateUrl).Returns("http://update.nzbdrone.com/_test/"); Mocker.GetMock<ConfigProvider>().SetupGet(c => c.UpdateUrl).Returns("http://update.nzbdrone.com/_test/");
Mocker.Resolve<HttpProvider>(); Mocker.Resolve<HttpProvider>();
} }

View File

@ -110,7 +110,6 @@ namespace NzbDrone.Core
{ {
EnvironmentProvider.UGuid = container.Resolve<ConfigProvider>().UGuid; EnvironmentProvider.UGuid = container.Resolve<ConfigProvider>().UGuid;
ReportingService.RestProvider = container.Resolve<RestProvider>(); ReportingService.RestProvider = container.Resolve<RestProvider>();
ReportingService.SetupExceptronDriver();
} }
private void RegisterQuality(IContainer container) private void RegisterQuality(IContainer container)

View File

@ -0,0 +1,16 @@
using System;
using System.Data;
using Migrator.Framework;
using NzbDrone.Common;
namespace NzbDrone.Core.Datastore.Migrations
{
[Migration(20121227)]
public class Migration20121227 : NzbDroneMigration
{
protected override void MainDbUpgrade()
{
Database.ExecuteNonQuery("UPDATE Config SET [Value] = 'http://update.nzbdrone.com/v1/' WHERE [Key] = 'UpdateUrl'");
}
}
}

View File

@ -39,7 +39,7 @@ namespace NzbDrone.Core.Model.Nzbx
public int CategoryId { get; set; } public int CategoryId { get; set; }
public string ImdbId { get; set; } public string ImdbId { get; set; }
public string AnidbId { get; set; } public string AnidbId { get; set; }
public int RageId { get; set; } public long RageId { get; set; }
public int Comments { get; set; } public int Comments { get; set; }
public int Downloads { get; set; } public int Downloads { get; set; }
public NzbxVotesModel Votes { get; set; } public NzbxVotesModel Votes { get; set; }

View File

@ -47,7 +47,7 @@ namespace NzbDrone.Core.Model.Nzbx
public int Completion { get; set; } public int Completion { get; set; }
public int CategoryId { get; set; } public int CategoryId { get; set; }
public string ImdbId { get; set; } public string ImdbId { get; set; }
public int RageId { get; set; } public long RageId { get; set; }
public int Comments { get; set; } public int Comments { get; set; }
public int Downloads { get; set; } public int Downloads { get; set; }
public NzbxVotesModel Votes { get; set; } public NzbxVotesModel Votes { get; set; }

View File

@ -131,7 +131,7 @@
</Reference> </Reference>
<Reference Include="DataTables.Mvc.Core, Version=0.1.0.85, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="DataTables.Mvc.Core, Version=0.1.0.85, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\DataTables.Mvc.Core.0.1.0.85\lib\DataTables.Mvc.Core.dll</HintPath> <HintPath>..\Libraries\DataTables.Mvc.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="DeskMetrics.NET"> <Reference Include="DeskMetrics.NET">
<HintPath>..\Libraries\DeskMetrics\DeskMetrics.NET.dll</HintPath> <HintPath>..\Libraries\DeskMetrics\DeskMetrics.NET.dll</HintPath>
@ -226,6 +226,7 @@
<Compile Include="Datastore\MigrationLogger.cs" /> <Compile Include="Datastore\MigrationLogger.cs" />
<Compile Include="Datastore\MigrationsHelper.cs" /> <Compile Include="Datastore\MigrationsHelper.cs" />
<Compile Include="Datastore\CustomeMapper.cs" /> <Compile Include="Datastore\CustomeMapper.cs" />
<Compile Include="Datastore\Migrations\Migration20121227.cs" />
<Compile Include="Datastore\Migrations\Migration20121226.cs" /> <Compile Include="Datastore\Migrations\Migration20121226.cs" />
<Compile Include="Datastore\Migrations\Migration20121218.cs" /> <Compile Include="Datastore\Migrations\Migration20121218.cs" />
<Compile Include="Datastore\Migrations\Migration20121209.cs" /> <Compile Include="Datastore\Migrations\Migration20121209.cs" />

View File

@ -294,7 +294,7 @@ namespace NzbDrone.Core
result.Quality = QualityTypes.Bluray720p; result.Quality = QualityTypes.Bluray720p;
return result; return result;
} }
if (normalizedName.Contains("webdl")) if (normalizedName.Contains("webdl") || normalizedName.Contains("webrip"))
{ {
if (normalizedName.Contains("1080p")) if (normalizedName.Contains("1080p"))
{ {

View File

@ -143,9 +143,9 @@ namespace NzbDrone.Core.Providers
} }
//Make sure this file is an upgrade for ALL episodes already on disk //Make sure this file is an upgrade for ALL episodes already on disk
if (episodes.All(e => e.EpisodeFile == null || e.EpisodeFile.QualityWrapper <= parseResult.Quality)) if (episodes.All(e => e.EpisodeFile == null || e.EpisodeFile.QualityWrapper < parseResult.Quality))
{ {
Logger.Debug("Deleting the existing file(s) on disk to upgrade to: {0}", filePath); Logger.Info("Deleting the existing file(s) on disk to upgrade to: {0}", filePath);
//Do the delete for files where there is already an episode on disk //Do the delete for files where there is already an episode on disk
episodes.Where(e => e.EpisodeFile != null).Select(e => e.EpisodeFile.Path).Distinct().ToList().ForEach(p => _recycleBinProvider.DeleteFile(p)); episodes.Where(e => e.EpisodeFile != null).Select(e => e.EpisodeFile.Path).Distinct().ToList().ForEach(p => _recycleBinProvider.DeleteFile(p));
} }

View File

@ -87,8 +87,8 @@ namespace NzbDrone.Core.Providers
if (!_diskProvider.FolderExists(series.Path)) if (!_diskProvider.FolderExists(series.Path))
{ {
Logger.Warn("Series Folder doesn't exist: {0}", series.Path); Logger.Warn("Series Folder doesn't exist: {0}, creating it.", series.Path);
return; _diskProvider.CreateDirectory(series.Path);
} }
var size = _diskProvider.GetDirectorySize(subfolderInfo.FullName); var size = _diskProvider.GetDirectorySize(subfolderInfo.FullName);

View File

@ -33,7 +33,7 @@ namespace NzbDrone.Core.Providers
if (String.IsNullOrWhiteSpace(recyclingBin)) if (String.IsNullOrWhiteSpace(recyclingBin))
{ {
logger.Info("Recycling Bin has not been configured, deleting permanently."); logger.Info("Recycling Bin has not been configured, deleting permanently. {0}", path);
_diskProvider.DeleteFolder(path, true); _diskProvider.DeleteFolder(path, true);
logger.Trace("Folder has been permanently deleted: {0}", path); logger.Trace("Folder has been permanently deleted: {0}", path);
} }
@ -63,7 +63,7 @@ namespace NzbDrone.Core.Providers
if (String.IsNullOrWhiteSpace(recyclingBin)) if (String.IsNullOrWhiteSpace(recyclingBin))
{ {
logger.Info("Recycling Bin has not been configured, deleting permanently."); logger.Info("Recycling Bin has not been configured, deleting permanently. {0}", path);
_diskProvider.DeleteFile(path); _diskProvider.DeleteFile(path);
logger.Trace("File has been permanently deleted: {0}", path); logger.Trace("File has been permanently deleted: {0}", path);
} }

View File

@ -23,7 +23,7 @@ namespace NzbDrone.Core.Providers
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private static readonly Logger logger = LogManager.GetCurrentClassLogger();
private static readonly Regex parseRegex = new Regex(@"(?:\>)(?<filename>NzbDrone.+?(?<version>\d+\.\d+\.\d+\.\d+).+?)(?:\<\/A\>)", RegexOptions.IgnoreCase); private static readonly Regex parseRegex = new Regex(@"(?:\>)(?<filename>NzbDrone.+?(?<version>\d+\.\d+\.\d+\.\d+).+?)(?:\<\/A\>)", RegexOptions.IgnoreCase);
public const string DEFAULT_UPDATE_URL = @"http://update.nzbdrone.com/_release/"; public const string DEFAULT_UPDATE_URL = @"http://update.nzbdrone.com/v1/";
public UpdateProvider(HttpProvider httpProvider, ConfigProvider configProvider, public UpdateProvider(HttpProvider httpProvider, ConfigProvider configProvider,

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Autofac" version="2.6.3.862" targetFramework="net40" /> <package id="Autofac" version="2.6.3.862" targetFramework="net40" />
<package id="DataTables.Mvc.Core" version="0.1.0.85" />
<package id="DotNetZip" version="1.9.1.8" /> <package id="DotNetZip" version="1.9.1.8" />
<package id="Growl" version="0.6" /> <package id="Growl" version="0.6" />
<package id="MediaInfoNet" version="0.3" targetFramework="net40" /> <package id="MediaInfoNet" version="0.3" targetFramework="net40" />

View File

@ -16,7 +16,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.0.8.0" /> <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />

View File

@ -47,8 +47,6 @@ namespace NzbDrone.Test.Common
{ {
MockedRestProvider = new Mock<RestProvider>(); MockedRestProvider = new Mock<RestProvider>();
ReportingService.RestProvider = MockedRestProvider.Object; ReportingService.RestProvider = MockedRestProvider.Object;
ReportingService.SetupExceptronDriver();
if (Directory.Exists(TempFolder)) if (Directory.Exists(TempFolder))
{ {

View File

@ -62,9 +62,6 @@ namespace NzbDrone.Update
private static void InitLoggers() private static void InitLoggers()
{ {
ReportingService.RestProvider = _container.Resolve<RestProvider>(); ReportingService.RestProvider = _container.Resolve<RestProvider>();
ReportingService.SetupExceptronDriver();
LogConfiguration.RegisterRemote();
LogConfiguration.RegisterConsoleLogger(LogLevel.Trace); LogConfiguration.RegisterConsoleLogger(LogLevel.Trace);
LogConfiguration.RegisterUdpLogger(); LogConfiguration.RegisterUdpLogger();

View File

@ -10,7 +10,7 @@ namespace NzbDrone.Web.App_Start
{ {
public static void Start() public static void Start()
{ {
if (!ModelBinders.Binders.ContainsKey(typeof(DataTablesPageRequest))) if(!ModelBinders.Binders.ContainsKey(typeof(DataTablesPageRequest)))
ModelBinders.Binders.Add(typeof(DataTablesPageRequest), new DataTablesModelBinder()); ModelBinders.Binders.Add(typeof(DataTablesPageRequest), new DataTablesModelBinder());
} }
} }

View File

@ -18,7 +18,6 @@ namespace NzbDrone.Web.App_Start
LogManager.Configuration = new XmlLoggingConfiguration(environmentProvider.GetNlogConfigPath(), false); LogManager.Configuration = new XmlLoggingConfiguration(environmentProvider.GetNlogConfigPath(), false);
LogConfiguration.RegisterUdpLogger(); LogConfiguration.RegisterUdpLogger();
LogConfiguration.RegisterRemote();
LogConfiguration.RegisterConsoleLogger(LogLevel.Info, "NzbDrone.Web.MvcApplication"); LogConfiguration.RegisterConsoleLogger(LogLevel.Info, "NzbDrone.Web.MvcApplication");
LogConfiguration.RegisterConsoleLogger(LogLevel.Info, "NzbDrone.Core.CentralDispatch"); LogConfiguration.RegisterConsoleLogger(LogLevel.Info, "NzbDrone.Core.CentralDispatch");
LogConfiguration.RegisterRollingFileLogger(environmentProvider.GetLogFileName(), LogLevel.Trace); LogConfiguration.RegisterRollingFileLogger(environmentProvider.GetLogFileName(), LogLevel.Trace);

View File

@ -321,4 +321,16 @@ i[class*="icon-"]:not(.gridAction):hover {
#free-space-small { #free-space-small {
display: inline-block; display: inline-block;
} }
}
#upgrade-now {
background-color: #FCF8E3;
text-align: center;
padding: 5px;
}
#upgrade-now h3 {
color: #c09853;
font-weight: bold;
} }

View File

@ -64,7 +64,7 @@
</Reference> </Reference>
<Reference Include="DataTables.Mvc.Core, Version=0.1.0.85, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="DataTables.Mvc.Core, Version=0.1.0.85, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\DataTables.Mvc.Core.0.1.0.85\lib\DataTables.Mvc.Core.dll</HintPath> <HintPath>..\Libraries\DataTables.Mvc.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="Dynamic"> <Reference Include="Dynamic">
<HintPath>..\packages\DynamicQuery.1.0\lib\35\Dynamic.dll</HintPath> <HintPath>..\packages\DynamicQuery.1.0\lib\35\Dynamic.dll</HintPath>

View File

@ -30,6 +30,9 @@
} }
</style> </style>
<div id="stylized"> <div id="stylized">
<div class="warningBox">
Do not set Download Client TV Directory to the same location as your TV shows, it can have undesired effects.
</div>
@using (Html.BeginForm("SaveDownloadClient", "Settings", FormMethod.Post, new { id = "DownloadClientForm", name = "DownloadClientForm", @class = "settingsForm" })) @using (Html.BeginForm("SaveDownloadClient", "Settings", FormMethod.Post, new { id = "DownloadClientForm", name = "DownloadClientForm", @class = "settingsForm" }))
{ {
<div id="downloadClient-top" class="settingsForm"> <div id="downloadClient-top" class="settingsForm">

View File

@ -39,6 +39,13 @@
<li><input id="localSeriesLookup" type="text" /></li> <li><input id="localSeriesLookup" type="text" /></li>
</ul> </ul>
</div> </div>
<div id="upgrade-now">
<h3>
You are running an old version of NzbDrone. Please upgrade to latest version and enjoy a brand new UI and tons of new features and enhancements
<a href="http://www.nzbdrone.com" target="_blank">www.nzbdrone.com</a>
</h3>
</div>
<div id="logo"> <div id="logo">
<span>@ViewBag.Title</span> <span>@ViewBag.Title</span>

View File

@ -72,7 +72,7 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.0.8.0" /> <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@ -3,8 +3,6 @@
<package id="Autofac" version="2.6.3.862" targetFramework="net40" /> <package id="Autofac" version="2.6.3.862" targetFramework="net40" />
<package id="Autofac.Mvc3" version="2.6.3.862" targetFramework="net40" /> <package id="Autofac.Mvc3" version="2.6.3.862" targetFramework="net40" />
<package id="Backbone.js" version="0.9.2" targetFramework="net40" /> <package id="Backbone.js" version="0.9.2" targetFramework="net40" />
<package id="DataTables.Mvc" version="0.1.0.85" />
<package id="DataTables.Mvc.Core" version="0.1.0.85" />
<package id="DynamicQuery" version="1.0" /> <package id="DynamicQuery" version="1.0" />
<package id="FontAwesome" version="2.0.2" targetFramework="net40" /> <package id="FontAwesome" version="2.0.2" targetFramework="net40" />
<package id="jQuery" version="1.8.2" targetFramework="net40" /> <package id="jQuery" version="1.8.2" targetFramework="net40" />

View File

@ -48,12 +48,10 @@ namespace NzbDrone
var environmentProvider = _container.Resolve<EnvironmentProvider>(); var environmentProvider = _container.Resolve<EnvironmentProvider>();
ReportingService.RestProvider = _container.Resolve<RestProvider>(); ReportingService.RestProvider = _container.Resolve<RestProvider>();
ReportingService.SetupExceptronDriver();
LogConfiguration.RegisterRollingFileLogger(environmentProvider.GetLogFileName(), LogLevel.Info); LogConfiguration.RegisterRollingFileLogger(environmentProvider.GetLogFileName(), LogLevel.Info);
LogConfiguration.RegisterConsoleLogger(LogLevel.Debug); LogConfiguration.RegisterConsoleLogger(LogLevel.Debug);
LogConfiguration.RegisterUdpLogger(); LogConfiguration.RegisterUdpLogger();
LogConfiguration.RegisterRemote();
LogConfiguration.Reload(); LogConfiguration.Reload();
Logger.Info("Start-up Path:'{0}'", environmentProvider.ApplicationPath); Logger.Info("Start-up Path:'{0}'", environmentProvider.ApplicationPath);
} }

View File

@ -7,7 +7,7 @@ Param(
if ($branch -eq "<default>") if ($branch -eq "<default>")
{ {
$branch = "teamcity"; $branch = "master";
} }
Write-Host $branch; Write-Host $branch;