From f2b091dcd236ebb1d4a26f12b2b5ffcb622802b2 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 3 Jul 2011 15:32:36 -0700 Subject: [PATCH 01/11] Fixed issue with nzbs.org search where title contained brackets --- NzbDrone.Core.Test/IndexerTests.cs | 31 ++++++++--- .../Providers/Indexer/IndexerBase.cs | 14 +++-- NzbDrone.Web/Views/Settings/Quality.cshtml | 52 ++++++++----------- 3 files changed, 57 insertions(+), 40 deletions(-) diff --git a/NzbDrone.Core.Test/IndexerTests.cs b/NzbDrone.Core.Test/IndexerTests.cs index 69670f5b2..27320ed5e 100644 --- a/NzbDrone.Core.Test/IndexerTests.cs +++ b/NzbDrone.Core.Test/IndexerTests.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Net; using System.ServiceModel.Syndication; @@ -159,8 +160,9 @@ namespace NzbDrone.Core.Test ExceptionVerification.IgnoreWarns(); } - [Test] - public void nzbsorg_search_returns_valid_results() + [TestCase("simpsons", 21, 23)] + [TestCase("Hawaii Five-0 (2010)", 1, 5)] + public void nzbsorg_search_returns_valid_results(string title, int season, int episode) { var mocker = new AutoMoqer(); @@ -174,16 +176,16 @@ namespace NzbDrone.Core.Test mocker.Resolve(); - var result = mocker.Resolve().FetchEpisode("Simpsons", 21, 23); + var result = mocker.Resolve().FetchEpisode(title, season, episode); result.Should().NotBeEmpty(); - result.Should().OnlyContain(r => r.CleanTitle == "simpsons"); - result.Should().OnlyContain(r => r.SeasonNumber == 21); - result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(23)); + result.Should().OnlyContain(r => r.CleanTitle == Parser.NormalizeTitle(title)); + result.Should().OnlyContain(r => r.SeasonNumber == season); + result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(episode)); } [TestCase("simpsons", 21, 23)] - [TestCase("Hawaii Five-0 2010", 1, 5)] + [TestCase("Hawaii Five-0 (2010)", 1, 5)] public void newzbin_search_returns_valid_results(string title, int season, int episode) { var mocker = new AutoMoqer(); @@ -275,5 +277,20 @@ namespace NzbDrone.Core.Test result.Should().OnlyContain(r => r.SeasonNumber == 1); result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(19)); } + + + [TestCase("hawaii five-0 (2010)", "hawaii+five+0+2010")] + [TestCase("this& that", "this+that")] + [TestCase("this& that", "this+that")] + public void get_query_title(string raw, string clean) + { + var result = IndexerBase.GetQueryTitle(raw); + + result.Should().Be(clean); + } + } + + + } diff --git a/NzbDrone.Core/Providers/Indexer/IndexerBase.cs b/NzbDrone.Core/Providers/Indexer/IndexerBase.cs index 79b07ef11..2f298f49b 100644 --- a/NzbDrone.Core/Providers/Indexer/IndexerBase.cs +++ b/NzbDrone.Core/Providers/Indexer/IndexerBase.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Net; using System.ServiceModel.Syndication; +using System.Text.RegularExpressions; using System.Web; using Ninject; using NLog; @@ -16,6 +17,8 @@ namespace NzbDrone.Core.Providers.Indexer private readonly HttpProvider _httpProvider; protected readonly ConfigProvider _configProvider; + private static readonly Regex TitleSearchRegex = new Regex(@"[\W]", RegexOptions.IgnoreCase | RegexOptions.Compiled); + [Inject] protected IndexerBase(HttpProvider httpProvider, ConfigProvider configProvider) { @@ -58,6 +61,7 @@ namespace NzbDrone.Core.Providers.Indexer /// The episode number. /// protected abstract IList GetSearchUrls(string seriesTitle, int seasonNumber, int episodeNumber); + public abstract IList GetSearchUrls(string seriesTitle, int seasonNumber, int episodeNumber); /// /// This method can be overwritten to provide indexer specific info parsing @@ -102,7 +106,7 @@ namespace NzbDrone.Core.Providers.Indexer var result = new List(); - var searchUrls = GetSearchUrls(HttpUtility.UrlDecode(seriesTitle), seasonNumber, episodeNumber); + var searchUrls = GetSearchUrls(GetQueryTitle(seriesTitle), seasonNumber, episodeNumber); foreach (var url in searchUrls) { @@ -165,9 +169,13 @@ namespace NzbDrone.Core.Providers.Indexer return CustomParser(item, episodeParseResult); } - protected static string GetQueryTitle(string title) + public static string GetQueryTitle(string title) { - return title.Trim().Replace(' ', '+'); + var cleanTitle = TitleSearchRegex.Replace(title, "+").Trim('+', ' '); + + //remove any repeating +s + cleanTitle = Regex.Replace(cleanTitle, @"\+{1,100}", "+"); + return cleanTitle; } } } \ No newline at end of file diff --git a/NzbDrone.Web/Views/Settings/Quality.cshtml b/NzbDrone.Web/Views/Settings/Quality.cshtml index 56422b3bf..c55ee18c3 100644 --- a/NzbDrone.Web/Views/Settings/Quality.cshtml +++ b/NzbDrone.Web/Views/Settings/Quality.cshtml @@ -1,33 +1,26 @@ @using NzbDrone.Web.Helpers; @model NzbDrone.Web.Models.QualityModel - @section HeaderContent{ - - - - - + + } - @section TitleContent{ - Settings +Settings } - @section ActionMenu{ @{Html.RenderPartial("SubMenu");} } - @section MainContent{ -
- @using (Html.BeginForm("SaveQuality", "Settings", FormMethod.Post, new { id = "form", name = "form" })) - { +
+ @using (Html.BeginForm("SaveQuality", "Settings", FormMethod.Post, new { id = "form", name = "form" })) + {
-

Quality

-

+

+ Quality

+

+

@Html.DropDownListFor(m => m.DefaultQualityProfileId, Model.QualityProfileSelectList, new { @class = "inputClass" })
@@ -36,9 +29,9 @@
- Add New Profile Add New Profile + Add New Profile + Add New Profile
-
@foreach (var item in Model.Profiles) { @@ -46,21 +39,20 @@ }
- - Loader + Loader
- } -
- -
+ } + +
+
} - @section Scripts{ - + - - - + + @RenderSection("Scripts", required: false) diff --git a/NzbDrone/IISController.cs b/NzbDrone/IISController.cs index 1d93b86ee..06d4bc99e 100644 --- a/NzbDrone/IISController.cs +++ b/NzbDrone/IISController.cs @@ -71,8 +71,6 @@ namespace NzbDrone IISProcess.BeginErrorReadLine(); IISProcess.BeginOutputReadLine(); - IISProcess.PriorityClass = ProcessPriorityClass.AboveNormal; - //Start Ping _pingTimer = new Timer(300000) { AutoReset = true }; _pingTimer.Elapsed += (PingServer); diff --git a/NzbDrone/Program.cs b/NzbDrone/Program.cs index 72a9ea644..6138e05f5 100644 --- a/NzbDrone/Program.cs +++ b/NzbDrone/Program.cs @@ -12,21 +12,25 @@ namespace NzbDrone private static void Main() { - Logger.Info(Process.GetCurrentProcess().Id); - try { + Config.ConfigureNlog(); + Logger.Info("Starting NZBDrone. Start-up Path:'{0}'", Config.ProjectRoot); Thread.CurrentThread.Name = "Host"; + Process currentProcess = Process.GetCurrentProcess(); + if (currentProcess.PriorityClass < ProcessPriorityClass.Normal) + { + Logger.Info("Promoting process priority from {0} to {1}", currentProcess.PriorityClass, ProcessPriorityClass.Normal); + currentProcess.PriorityClass = ProcessPriorityClass.Normal; + } + + currentProcess.EnableRaisingEvents = true; + currentProcess.Exited += ProgramExited; + AppDomain.CurrentDomain.UnhandledException += ((s, e) => AppDomainException(e)); AppDomain.CurrentDomain.ProcessExit += ProgramExited; AppDomain.CurrentDomain.DomainUnload += ProgramExited; - Process.GetCurrentProcess().EnableRaisingEvents = true; - Process.GetCurrentProcess().Exited += ProgramExited; - - Config.ConfigureNlog(); - - Logger.Info("Starting NZBDrone. Start-up Path:'{0}'", Config.ProjectRoot); IISController.StopServer(); IISController.StartServer(); From 678c33d5fa0bb52562b6cf7517c2784d7d5ca9dc Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 3 Jul 2011 22:23:38 -0700 Subject: [PATCH 09/11] Logs view improvements --- NzbDrone.Core/Instrumentation/DatabaseTarget.cs | 5 +++++ NzbDrone.Web/Views/Log/Index.cshtml | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/NzbDrone.Core/Instrumentation/DatabaseTarget.cs b/NzbDrone.Core/Instrumentation/DatabaseTarget.cs index eee8bbdf3..593c60929 100644 --- a/NzbDrone.Core/Instrumentation/DatabaseTarget.cs +++ b/NzbDrone.Core/Instrumentation/DatabaseTarget.cs @@ -33,6 +33,11 @@ namespace NzbDrone.Core.Instrumentation log.Logger = logEvent.LoggerName; + if (log.Logger.StartsWith("NzbDrone.")) + { + log.Logger = log.Logger.Remove(0, 9); + } + if (logEvent.Exception != null) { if (String.IsNullOrWhiteSpace(log.Message)) diff --git a/NzbDrone.Web/Views/Log/Index.cshtml b/NzbDrone.Web/Views/Log/Index.cshtml index 1ba7503b9..656d6cd87 100644 --- a/NzbDrone.Web/Views/Log/Index.cshtml +++ b/NzbDrone.Web/Views/Log/Index.cshtml @@ -31,12 +31,13 @@ Logs .TableHtmlAttributes(new { @class = "Grid" }) .Columns(columns => { - columns.Bound(c => c.Time).Title("Time").Width(190); + columns.Bound(c => c.Time).Title("Time").Width(0); columns.Bound(c => c.Level).Title("Level").Width(0); + columns.Bound(c => c.Logger).Title("Source").Width(0); columns.Bound(c => c.Message); }) .DetailView(detailView => detailView.ClientTemplate( - "
Logger: <#= Logger #>
" + + "
Method: <#= Method #>
" + "
<#= ExceptionType #>
" + "
<#= Exception #>
" )).DataBinding(data => data.Ajax().Select("_AjaxBinding", "Log")) From 84449672ec3dacbfcc483d1c416ec0c0ee913729 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 3 Jul 2011 22:34:20 -0700 Subject: [PATCH 10/11] fixed broken tests --- NzbDrone.Core.Test/LogProviderTest.cs | 9 ++++++--- NzbDrone.Core.Test/TvDbProviderTest.cs | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/NzbDrone.Core.Test/LogProviderTest.cs b/NzbDrone.Core.Test/LogProviderTest.cs index ef62ddd3d..4ee5a2091 100644 --- a/NzbDrone.Core.Test/LogProviderTest.cs +++ b/NzbDrone.Core.Test/LogProviderTest.cs @@ -42,7 +42,10 @@ namespace NzbDrone.Core.Test var logItem = db.Fetch().First(); Assert.AreNotEqual(new DateTime(), logItem.Time); Assert.AreEqual(message, logItem.Message); - Assert.AreEqual(Logger.Name, logItem.Logger); + Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger); + + Logger.Name.Should().EndWith(logItem.Logger); + Assert.AreEqual(LogLevel.Info.Name, logItem.Level); Assert.AreEqual("write_log", logItem.Method); } @@ -106,7 +109,7 @@ namespace NzbDrone.Core.Test var logItem = db.Fetch().First(); Assert.AreNotEqual(new DateTime(), logItem.Time); Assert.AreEqual(message + ": " + ex.Message, logItem.Message); - Assert.AreEqual(Logger.Name, logItem.Logger); + Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger); Assert.AreEqual(LogLevel.Error.Name, logItem.Level); Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType); Assert.AreEqual(ex.ToString(), logItem.Exception); @@ -140,7 +143,7 @@ namespace NzbDrone.Core.Test var logItem = db.Fetch().First(); Assert.AreNotEqual(new DateTime(), logItem.Time); Assert.AreEqual(ex.Message, logItem.Message); - Assert.AreEqual(Logger.Name, logItem.Logger); + Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger); Assert.AreEqual(LogLevel.Error.Name, logItem.Level); Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType); Assert.AreEqual(ex.ToString(), logItem.Exception); diff --git a/NzbDrone.Core.Test/TvDbProviderTest.cs b/NzbDrone.Core.Test/TvDbProviderTest.cs index 8d5374482..67e4972fa 100644 --- a/NzbDrone.Core.Test/TvDbProviderTest.cs +++ b/NzbDrone.Core.Test/TvDbProviderTest.cs @@ -85,7 +85,7 @@ namespace NzbDrone.Core.Test } //assert - seasonsNumbers.Should().HaveCount(7); + seasonsNumbers.Should().HaveCount(8); seasons[1].Should().HaveCount(23); seasons[2].Should().HaveCount(19); seasons[3].Should().HaveCount(16); From 49a372eb6b2b38c6f5ab3641045dda97d4a99145 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 3 Jul 2011 22:54:14 -0700 Subject: [PATCH 11/11] Fixed doctype --- NzbDrone.Web/Views/Shared/_Layout.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NzbDrone.Web/Views/Shared/_Layout.cshtml b/NzbDrone.Web/Views/Shared/_Layout.cshtml index efbd8570e..f2302b399 100644 --- a/NzbDrone.Web/Views/Shared/_Layout.cshtml +++ b/NzbDrone.Web/Views/Shared/_Layout.cshtml @@ -1,4 +1,4 @@ - + @using Helpers;