From 363ece3939966de6fef45ec3ba18eb260282f6d6 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 13 Nov 2012 20:03:00 -0800 Subject: [PATCH 01/15] Fixed issue with quality view --- NzbDrone.Web/Controllers/SettingsController.cs | 10 ++++++---- NzbDrone.Web/Views/Settings/Quality.cshtml | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/NzbDrone.Web/Controllers/SettingsController.cs b/NzbDrone.Web/Controllers/SettingsController.cs index 6c502ba8b..a2f3414be 100644 --- a/NzbDrone.Web/Controllers/SettingsController.cs +++ b/NzbDrone.Web/Controllers/SettingsController.cs @@ -173,7 +173,7 @@ namespace NzbDrone.Web.Controllers Bluray1080pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 7).MaxSize }; - ViewData["Profiles"] = profiles; + ViewData["Profiles"] = profiles.Select(s => s.QualityProfileId).ToList(); return View(model); } @@ -269,13 +269,15 @@ namespace NzbDrone.Web.Controllers Cutoff = QualityTypes.Unknown }; - qualityProfile.QualityProfileId = _qualityProvider.Add(qualityProfile); + var qualityProfileId = _qualityProvider.Add(qualityProfile); - return GetQualityProfileView(qualityProfile); + return GetQualityProfileView(qualityProfileId); } - public PartialViewResult GetQualityProfileView(QualityProfile profile) + public PartialViewResult GetQualityProfileView(int profileId) { + var profile = _qualityProvider.Get(profileId); + var model = new QualityProfileModel(); model.QualityProfileId = profile.QualityProfileId; model.Name = profile.Name; diff --git a/NzbDrone.Web/Views/Settings/Quality.cshtml b/NzbDrone.Web/Views/Settings/Quality.cshtml index e9eb9a75c..ff12ad6e3 100644 --- a/NzbDrone.Web/Views/Settings/Quality.cshtml +++ b/NzbDrone.Web/Views/Settings/Quality.cshtml @@ -27,9 +27,9 @@
- @foreach (var item in (List)ViewData["Profiles"]) + @foreach (var profileId in (List)ViewData["Profiles"]) { - Html.RenderAction("GetQualityProfileView", item); + Html.RenderAction("GetQualityProfileView", new { profileId = profileId }); }
From 1d860cbc1c22b4316108ccf2793855b65d004781 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 14 Nov 2012 12:31:44 -0800 Subject: [PATCH 02/15] Don't try to update XEM mapping if there isn't one Updated TVDBLib to prevent an issue with Banner Colours blowing everything up. --- Libraries/TvdbLib.dll | Bin 206848 -> 206848 bytes NzbDrone.Core/Providers/XemProvider.cs | 8 ++++++++ 2 files changed, 8 insertions(+) diff --git a/Libraries/TvdbLib.dll b/Libraries/TvdbLib.dll index 06cdeceee4009bc83aa29fc81de472edb8d4c938..4e2f48986ba8b310348ca111703dc2e8ebfb8f66 100644 GIT binary patch literal 206848 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 literal 206848 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 diff --git a/NzbDrone.Core/Providers/XemProvider.cs b/NzbDrone.Core/Providers/XemProvider.cs index 3c1fed45c..12dbcb182 100644 --- a/NzbDrone.Core/Providers/XemProvider.cs +++ b/NzbDrone.Core/Providers/XemProvider.cs @@ -55,6 +55,14 @@ namespace NzbDrone.Core.Providers public virtual void UpdateMappings(int seriesId) { + var xemIds = _xemCommunicationProvider.GetXemSeriesIds(); + + if (!xemIds.Contains(seriesId)) + { + _logger.Trace("Xem doesn't have a mapping for this series: {0}", seriesId); + return; + } + var series = _seriesProvider.GetSeries(seriesId); if (series == null) From 46aa774f195e65a2007c5c4b9e8f2f5e1d05854d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 15 Nov 2012 09:17:47 -0800 Subject: [PATCH 03/15] Fixed: Search URLs for Newznab --- NzbDrone.Core/Providers/Indexer/Newznab.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NzbDrone.Core/Providers/Indexer/Newznab.cs b/NzbDrone.Core/Providers/Indexer/Newznab.cs index e3c6ba49a..1cf5abb9a 100644 --- a/NzbDrone.Core/Providers/Indexer/Newznab.cs +++ b/NzbDrone.Core/Providers/Indexer/Newznab.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Providers.Indexer foreach (var url in Urls) { - searchUrls.Add(String.Format("{0}&limit=100&q={1}&season{2}&ep{3}", url, seriesTitle, seasonNumber, episodeNumber)); + searchUrls.Add(String.Format("{0}&limit=100&q={1}&season={2}&ep={3}", url, seriesTitle, seasonNumber, episodeNumber)); } return searchUrls; @@ -60,7 +60,7 @@ namespace NzbDrone.Core.Providers.Indexer foreach (var url in Urls) { - searchUrls.Add(String.Format("{0}&limit=100&q={1}&season{2}", url, seriesTitle, seasonNumber)); + searchUrls.Add(String.Format("{0}&limit=100&q={1}&season={2}", url, seriesTitle, seasonNumber)); } return searchUrls; From c9056998cfc5bab4be515eadb2c28f13b119742f Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 15 Nov 2012 15:38:06 -0800 Subject: [PATCH 04/15] NzbMatrix searching enhancements New: Searching on NzbMatrix uses multiple numbering schemes --- NzbDrone.Core/Providers/Indexer/NzbMatrix.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs b/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs index 0fdab04df..579bd0693 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs @@ -48,7 +48,7 @@ namespace NzbDrone.Core.Providers.Indexer foreach (var url in Urls) { - searchUrls.Add(String.Format("{0}&term={1}+s{2:00}e{3:00}", url, seriesTitle, seasonNumber, episodeNumber)); + searchUrls.Add(String.Format("{0}&term=(\"{1}+s{2:00}e{3:00}\",\"{1}+{2}x{3:00}\")", url, seriesTitle, seasonNumber, episodeNumber)); } return searchUrls; From 6f308b54f2e180a333cf012f245521449306228f Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 16 Nov 2012 08:08:48 -0800 Subject: [PATCH 05/15] Better search urls for NzbMatrix --- NzbDrone.Core/Providers/Indexer/NzbMatrix.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs b/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs index 579bd0693..4760d8671 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs @@ -72,8 +72,7 @@ namespace NzbDrone.Core.Providers.Indexer foreach (var url in Urls) { - searchUrls.Add(String.Format("{0}&term={1}+Season", url, seriesTitle)); - searchUrls.Add(String.Format("{0}&term={1}+S{2:00}", url, seriesTitle, seasonNumber)); + searchUrls.Add(String.Format("{0}&term=(\"{1}+Season\",\"{1}+S{2:00}\")", url, seriesTitle, seasonNumber)); } return searchUrls; @@ -85,7 +84,7 @@ namespace NzbDrone.Core.Providers.Indexer foreach (var url in Urls) { - searchUrls.Add(String.Format("{0}&term={1}+S{2:00}E{3}", url, seriesTitle, seasonNumber, episodeWildcard)); + searchUrls.Add(String.Format("{0}&term=(\"{1}+S{2:00}E{3}\", \"{1}+{2}x{3}\")", url, seriesTitle, seasonNumber, episodeWildcard)); } return searchUrls; From d065876991cb164b492558a805166a51366db43f Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 16 Nov 2012 08:39:54 -0800 Subject: [PATCH 06/15] Refactored Search, less work in the searching --- .../PerformSearchFixture.cs | 31 +- NzbDrone.Core/Providers/SearchProvider.cs | 287 ++++++++++++------ 2 files changed, 197 insertions(+), 121 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/PerformSearchFixture.cs b/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/PerformSearchFixture.cs index ccc13ed59..111081e4e 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/PerformSearchFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/PerformSearchFixture.cs @@ -18,6 +18,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests { private const string SCENE_NAME = "Scene Name"; private const int SEASON_NUMBER = 5; + private const int EPISODE_NUMBER = 1; private const int PARSE_RESULT_COUNT = 10; private Mock _episodeIndexer1; @@ -170,26 +171,13 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests public void PerformSearch_should_search_all_enabled_providers() { //Act - var result = Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + var result = Mocker.Resolve().PerformEpisodeSearch(_series, SEASON_NUMBER, _episodes.First().EpisodeNumber); //Assert VerifyFetchEpisode(Times.Once()); result.Should().HaveCount(PARSE_RESULT_COUNT * 2); } - [Test] - public void PerformSearch_should_look_for_scene_name_to_search() - { - WithSceneName(); - - //Act - Mocker.Resolve().PerformSearch(MockNotification, _series, 1, _episodes); - - //Assert - Mocker.GetMock().Verify(c => c.GetSceneName(_series.SeriesId), - Times.Once()); - } - [Test] public void broken_indexer_should_not_block_other_indexers() { @@ -197,7 +185,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests WithTwoGoodOneBrokenIndexer(); //Act - var result = Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + var result = Mocker.Resolve().PerformEpisodeSearch(_series, SEASON_NUMBER, EPISODE_NUMBER); //Assert result.Should().HaveCount(PARSE_RESULT_COUNT * 2); @@ -215,7 +203,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests public void PerformSearch_for_episode_should_call_FetchEpisode() { //Act - var result = Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + var result = Mocker.Resolve().PerformEpisodeSearch(_series, SEASON_NUMBER, EPISODE_NUMBER); //Assert result.Should().HaveCount(PARSE_RESULT_COUNT * 2); @@ -230,7 +218,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests _series.IsDaily = true; //Act - var result = Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + var result = Mocker.Resolve().PerformDailyEpisodeSearch(_series, _episodes.First()); //Assert result.Should().HaveCount(PARSE_RESULT_COUNT * 2); @@ -244,7 +232,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests With30Episodes(); //Act - var result = Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + var result = Mocker.Resolve().PerformPartialSeasonSearch(_series, SEASON_NUMBER, new List{0, 1, 2, 3}); //Assert result.Should().HaveCount(80); @@ -257,7 +245,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests WithNullEpisodes(); //Act - var result = Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + var result = Mocker.Resolve().PerformSeasonSearch(_series, SEASON_NUMBER); //Assert result.Should().HaveCount(20); @@ -271,7 +259,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests WithNullIndexers(); //Act - var result = Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + var result = Mocker.Resolve().PerformEpisodeSearch(_series, SEASON_NUMBER, EPISODE_NUMBER); //Assert result.Should().HaveCount(0); @@ -283,10 +271,9 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests { WithSceneName(); - Mocker.Resolve().PerformSearch(MockNotification, _series, SEASON_NUMBER, _episodes); + Mocker.Resolve().PerformEpisodeSearch(_series, SEASON_NUMBER, EPISODE_NUMBER); VerifyFetchEpisodeWithSceneName(Times.Once()); } - } } diff --git a/NzbDrone.Core/Providers/SearchProvider.cs b/NzbDrone.Core/Providers/SearchProvider.cs index ac6856dd3..478f0caa2 100644 --- a/NzbDrone.Core/Providers/SearchProvider.cs +++ b/NzbDrone.Core/Providers/SearchProvider.cs @@ -62,35 +62,60 @@ namespace NzbDrone.Core.Providers { _logger.Error("Unable to find an series {0} in database", seriesId); return new List(); - } + } - //Return false if the series is a daily series (we only support individual episode searching if (series.IsDaily) + { + _logger.Trace("Daily series detected, skipping season search: {0}", series.Title); + return new List(); + } + + _logger.Debug("Getting episodes from database for series: {0} and season: {1}", seriesId, seasonNumber); + var episodes = _episodeProvider.GetEpisodesBySeason(seriesId, seasonNumber); + + if (episodes == null || episodes.Count == 0) + { + _logger.Warn("No episodes in database found for series: {0} and season: {1}.", seriesId, seasonNumber); return new List(); + } notification.CurrentMessage = String.Format("Searching for {0} Season {1}", series.Title, seasonNumber); - var reports = PerformSearch(notification, series, seasonNumber); + List reports; - _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); + if (series.UseSceneNumbering) + { + var sceneSeasonNumbers = episodes.Select(e => e.SceneSeasonNumber).ToList(); + var sceneEpisodeNumbers = episodes.Select(e => e.SceneEpisodeNumber).ToList(); - if (reports.Count == 0) - return new List(); + if (sceneSeasonNumbers.Distinct().Count() > 1) + { + _logger.Trace("Uses scene numbering, but multiple seasons found, skipping."); + return new List(); + } - _logger.Debug("Getting episodes from database for series: {0} and season: {1}", seriesId, seasonNumber); - var episodeNumbers = _episodeProvider.GetEpisodeNumbersBySeason(seriesId, seasonNumber); + reports = PerformSeasonSearch(series, sceneSeasonNumbers.First()); - if (episodeNumbers == null || episodeNumbers.Count == 0) - { - _logger.Warn("No episodes in database found for series: {0} and season: {1}.", seriesId, seasonNumber); - return new List(); + reports.Where(p => p.FullSeason && p.SeasonNumber == sceneSeasonNumbers.First()).ToList().ForEach( + e => e.EpisodeNumbers = sceneEpisodeNumbers.ToList() + ); } - notification.CurrentMessage = "Processing search results"; + else + { + reports = PerformSeasonSearch(series, seasonNumber); - reports.Where(p => p.FullSeason && p.SeasonNumber == seasonNumber).ToList().ForEach( - e => e.EpisodeNumbers = episodeNumbers.ToList() + reports.Where(p => p.FullSeason && p.SeasonNumber == seasonNumber).ToList().ForEach( + e => e.EpisodeNumbers = episodes.Select(ep => ep.EpisodeNumber).ToList() ); + } + + _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); + + if (reports.Count == 0) + return new List(); + + notification.CurrentMessage = "Processing search results"; searchResult.SearchHistoryItems = ProcessSearchResults(notification, reports, searchResult, series, seasonNumber); _searchHistoryProvider.Add(searchResult); @@ -115,13 +140,36 @@ namespace NzbDrone.Core.Providers return new List(); } - //Return empty list if the series is a daily series (we only support individual episode searching if (series.IsDaily) + { + _logger.Trace("Daily series detected, skipping season search: {0}", series.Title); return new List(); + } notification.CurrentMessage = String.Format("Searching for {0} Season {1}", series.Title, seasonNumber); var episodes = _episodeProvider.GetEpisodesBySeason(seriesId, seasonNumber); - var reports = PerformSearch(notification, series, seasonNumber, episodes); + + List reports; + + if (series.UseSceneNumbering) + { + var sceneSeasonNumbers = episodes.Select(e => e.SceneSeasonNumber).ToList(); + var sceneEpisodeNumbers = episodes.Select(e => e.SceneEpisodeNumber).ToList(); + + if (sceneSeasonNumbers.Distinct().Count() > 1) + { + _logger.Trace("Uses scene numbering, but multiple seasons found, skipping."); + return new List(); + } + + reports = PerformPartialSeasonSearch(series, sceneSeasonNumbers.First(), GetEpisodeNumberPrefixes(sceneEpisodeNumbers)); + } + + else + { + reports = PerformPartialSeasonSearch(series, seasonNumber, GetEpisodeNumberPrefixes(episodes.Select(e => e.EpisodeNumber))); + } + _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); if (reports.Count == 0) @@ -153,27 +201,29 @@ namespace NzbDrone.Core.Providers } notification.CurrentMessage = "Looking for " + episode; - - if (episode.Series.IsDaily && !episode.AirDate.HasValue) - { - _logger.Warn("AirDate is not Valid for: {0}", episode); - notification.CurrentMessage = String.Format("Search for {0} Failed, AirDate is invalid", episode); - return false; - } + List reports; var searchResult = new SearchHistory { SearchTime = DateTime.Now, - SeriesId = episode.Series.SeriesId + SeriesId = episode.Series.SeriesId, + EpisodeId = episodeId }; - var reports = PerformSearch(notification, episode.Series, episode.SeasonNumber, new List { episode }); - - _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); - notification.CurrentMessage = "Processing search results"; - if (episode.Series.IsDaily) { + if (!episode.AirDate.HasValue) + { + _logger.Warn("AirDate is not Valid for: {0}", episode); + notification.CurrentMessage = String.Format("Search for {0} Failed, AirDate is invalid", episode); + return false; + } + + reports = PerformDailyEpisodeSearch(episode.Series, episode); + + _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); + notification.CurrentMessage = "Processing search results"; + searchResult.SearchHistoryItems = ProcessSearchResults(notification, reports, episode.Series, episode.AirDate.Value); _searchHistoryProvider.Add(searchResult); @@ -183,17 +233,17 @@ namespace NzbDrone.Core.Providers else if (episode.Series.UseSceneNumbering) { - searchResult.EpisodeId = episodeId; - var seasonNumber = episode.SceneSeasonNumber; var episodeNumber = episode.SceneEpisodeNumber; - if (seasonNumber == 0 || episodeNumber == 0) + if (seasonNumber == 0 && episodeNumber == 0) { seasonNumber = episode.SeasonNumber; episodeNumber = episode.EpisodeNumber; } + reports = PerformEpisodeSearch(episode.Series, seasonNumber, episodeNumber); + searchResult.SearchHistoryItems = ProcessSearchResults( notification, reports, @@ -211,7 +261,8 @@ namespace NzbDrone.Core.Providers else { - searchResult.EpisodeId = episodeId; + reports = PerformEpisodeSearch(episode.Series, episode.SeasonNumber, episode.EpisodeNumber); + searchResult.SearchHistoryItems = ProcessSearchResults(notification, reports, searchResult, episode.Series, episode.SeasonNumber, episode.EpisodeNumber); _searchHistoryProvider.Add(searchResult); @@ -221,75 +272,12 @@ namespace NzbDrone.Core.Providers _logger.Warn("Unable to find {0} in any of indexers.", episode); - if (reports.Any()) - { - notification.CurrentMessage = String.Format("Sorry, couldn't find {0}, that matches your preferences.", episode); - } - else - { - notification.CurrentMessage = String.Format("Sorry, couldn't find {0} in any of indexers.", episode); - } + notification.CurrentMessage = reports.Any() ? String.Format("Sorry, couldn't find {0}, that matches your preferences.", episode) + : String.Format("Sorry, couldn't find {0} in any of indexers.", episode); return false; } - public List PerformSearch(ProgressNotification notification, Series series, int seasonNumber, IList episodes = null) - { - //If single episode, do a single episode search, if full season then do a full season search, otherwise, do a partial search - - var reports = new List(); - - var title = _sceneMappingProvider.GetSceneName(series.SeriesId); - - if (string.IsNullOrWhiteSpace(title)) - { - title = series.Title; - } - - Parallel.ForEach(_indexerProvider.GetEnabledIndexers(), indexer => - { - try - { - if (episodes == null) - reports.AddRange(indexer.FetchSeason(title, seasonNumber)); - - //Treat as single episode - else if (episodes.Count == 1) - { - //Use SceneNumbering - Only if SceneSN and SceneEN are greater than zero - if (series.UseSceneNumbering && episodes.First().SceneSeasonNumber > 0 && episodes.First().SceneEpisodeNumber > 0) - reports.AddRange(indexer.FetchEpisode(title, episodes.First().SceneSeasonNumber, episodes.First().SceneEpisodeNumber)); - - //Standard - else if (!series.IsDaily) - reports.AddRange(indexer.FetchEpisode(title, seasonNumber, episodes.First().EpisodeNumber)); - - //Daily Episode - else - reports.AddRange(indexer.FetchDailyEpisode(title, episodes.First().AirDate.Value)); - } - - //Treat as Partial Season - else - { - var prefixes = GetEpisodeNumberPrefixes(episodes.Select(s => s.EpisodeNumber)); - - foreach (var episodePrefix in prefixes) - { - reports.AddRange(indexer.FetchPartialSeason(title, seasonNumber, episodePrefix)); - } - } - } - - catch (Exception e) - { - _logger.ErrorException("An error has occurred while fetching items from " + indexer.Name, e); - } - }); - - return reports; - } - public List ProcessSearchResults(ProgressNotification notification, IEnumerable reports, SearchHistory searchResult, Series series, int seasonNumber, int? episodeNumber = null) { var items = new List(); @@ -488,5 +476,106 @@ namespace NzbDrone.Core.Providers return results.Distinct().ToList(); } + + public List PerformEpisodeSearch(Series series, int seasonNumber, int episodeNumber) + { + var reports = new List(); + var title = GetSeriesTitle(series); + + Parallel.ForEach(_indexerProvider.GetEnabledIndexers(), indexer => + { + try + { + reports.AddRange(indexer.FetchEpisode(title, seasonNumber, episodeNumber)); + } + + catch (Exception e) + { + _logger.ErrorException(String.Format("An error has occurred while searching for {0}-S{1:00}E{2:00} from: {3}", + series.Title, seasonNumber, episodeNumber, indexer.Name), e); + } + }); + + return reports; + } + + public List PerformDailyEpisodeSearch(Series series, Episode episode) + { + var reports = new List(); + var title = GetSeriesTitle(series); + + Parallel.ForEach(_indexerProvider.GetEnabledIndexers(), indexer => + { + try + { + _logger.Trace("Episode {0} is a daily episode, searching as daily", episode); + reports.AddRange(indexer.FetchDailyEpisode(title, episode.AirDate.Value)); + } + + catch (Exception e) + { + _logger.ErrorException(String.Format("An error has occurred while searching for {0}-{1} from: {2}", + series.Title, episode.AirDate, indexer.Name), e); + } + }); + + return reports; + } + + public List PerformPartialSeasonSearch(Series series, int seasonNumber, List prefixes) + { + var reports = new List(); + var title = GetSeriesTitle(series); + + Parallel.ForEach(_indexerProvider.GetEnabledIndexers(), indexer => + { + try + { + foreach (var episodePrefix in prefixes) + { + reports.AddRange(indexer.FetchPartialSeason(title, seasonNumber, episodePrefix)); + } + } + + catch (Exception e) + { + _logger.ErrorException(String.Format("An error has occurred while searching for {0}-S{1:00} from: {2}", + series.Title, seasonNumber, indexer.Name), e); + } + }); + + return reports; + } + + public List PerformSeasonSearch(Series series, int seasonNumber) + { + var reports = new List(); + var title = GetSeriesTitle(series); + + Parallel.ForEach(_indexerProvider.GetEnabledIndexers(), indexer => + { + try + { + reports.AddRange(indexer.FetchSeason(title, seasonNumber)); + } + + catch (Exception e) + { + _logger.ErrorException("An error has occurred while searching for items from: " + indexer.Name, e); + } + }); + + return reports; + } + + public string GetSeriesTitle(Series series) + { + var title = _sceneMappingProvider.GetSceneName(series.SeriesId); + + if (String.IsNullOrWhiteSpace(title)) + title = series.Title; + + return title; + } } } From 71536dc5c972cb1aacb2c3bfba827f1e5a265288 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 16 Nov 2012 17:00:49 -0800 Subject: [PATCH 07/15] Fixed broken test for queue --- .../DownloadClientTests/SabProviderTests/QueueFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs index 7ae9fb0ba..5bbb0f80d 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs @@ -212,7 +212,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests new object[] { 1, new[] { 5 }, "30 RocK", QualityTypes.HDTV, false }, //Same Series, same quality new object[] { 1, new[] { 5, 6 }, "30 RocK", QualityTypes.HDTV, false }, //Same Series, same quality, one different episode new object[] { 1, new[] { 5, 6 }, "30 RocK", QualityTypes.HDTV, false }, //Same Series, same quality, one different episode - new object[] { 4, new[] { 8 }, "Parks and Recreation", QualityTypes.WEBDL720p }, false, //Same Series, same quality + new object[] { 4, new[] { 8 }, "Parks and Recreation", QualityTypes.WEBDL720p, false }, //Same Series, same quality }; [Test, TestCaseSource("LowerQualityCases")] From 97fa0ef0d309bf5d6f0d6b921567e0a189900a5d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 18 Nov 2012 18:17:00 -0800 Subject: [PATCH 08/15] Rmeove illegal characters Fixed: Remove illegal characters when saving blackhole and pneumatic downloads --- .../DownloadClientTests/BlackholeProviderFixture.cs | 10 ++++++++++ .../DownloadClientTests/PneumaticProviderFixture.cs | 12 ++++++++++++ .../Providers/DownloadClients/BlackholeProvider.cs | 4 ++-- .../Providers/DownloadClients/PneumaticProvider.cs | 2 ++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs index 0f8a5be95..ec867c3ac 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Net; using System.Text; @@ -67,6 +68,15 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests ExceptionVerification.ExpectedWarns(1); } + [Test] + public void should_replace_illegal_characters_in_title() + { + var illegalTitle = "Saturday Night Live - S38E08 - Jeremy Renner/Maroon 5 [SDTV]"; + var expectedFilename = Path.Combine(blackHoleFolder, "Saturday Night Live - S38E08 - Jeremy Renner+Maroon 5 [SDTV].nzb"); + Mocker.Resolve().DownloadNzb(nzbUrl, illegalTitle).Should().BeTrue(); + + Mocker.GetMock().Verify(c => c.DownloadFile(It.IsAny(), expectedFilename), Times.Once()); + } } } diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs index 293b7697e..540389362 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Net; using System.Text; @@ -75,5 +76,16 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests { Mocker.Resolve().DownloadNzb(nzbUrl, "30 Rock - Season 1").Should().BeFalse(); } + + [Test] + public void should_replace_illegal_characters_in_title() + { + var illegalTitle = "Saturday Night Live - S38E08 - Jeremy Renner/Maroon 5 [SDTV]"; + var expectedFilename = Path.Combine(pneumaticFolder, "Saturday Night Live - S38E08 - Jeremy Renner+Maroon 5 [SDTV].nzb"); + + Mocker.Resolve().DownloadNzb(nzbUrl, illegalTitle).Should().BeTrue(); + + Mocker.GetMock().Verify(c => c.DownloadFile(It.IsAny(), expectedFilename), Times.Once()); + } } } diff --git a/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs b/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs index 836501ffb..af836cb65 100644 --- a/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs +++ b/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs @@ -38,6 +38,8 @@ namespace NzbDrone.Core.Providers.DownloadClients { try { + title = MediaFileProvider.CleanFilename(title); + var filename = Path.Combine(_configProvider.BlackholeDirectory, title + ".nzb"); if (_diskProvider.FileExists(filename)) @@ -64,7 +66,5 @@ namespace NzbDrone.Core.Providers.DownloadClients { return !_upgradeHistorySpecification.IsSatisfiedBy(newParseResult); } - - } } diff --git a/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs b/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs index 0a6e557dd..45d9acd2e 100644 --- a/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs +++ b/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs @@ -44,6 +44,8 @@ namespace NzbDrone.Core.Providers.DownloadClients return false; } + title = MediaFileProvider.CleanFilename(title); + //Save to the Pneumatic directory (The user will need to ensure its accessible by XBMC) var filename = Path.Combine(_configProvider.PneumaticDirectory, title + ".nzb"); From 82f0751a150fafaeb3cd92be379417c13b8f1bc5 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 18 Nov 2012 18:39:16 -0800 Subject: [PATCH 09/15] Search History Force Download Fixed: Issue with Force Download in Search History --- NzbDrone.Web/Controllers/SearchHistoryController.cs | 2 +- NzbDrone.Web/Views/SearchHistory/Details.cshtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NzbDrone.Web/Controllers/SearchHistoryController.cs b/NzbDrone.Web/Controllers/SearchHistoryController.cs index 96c696e33..15916a9d8 100644 --- a/NzbDrone.Web/Controllers/SearchHistoryController.cs +++ b/NzbDrone.Web/Controllers/SearchHistoryController.cs @@ -68,7 +68,7 @@ namespace NzbDrone.Web.Controllers { _searchHistoryProvider.ForceDownload(id); - return new JsonResult { Data = "ok", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; + return JsonNotificationResult.Info("Success", "Requested episode has been sent to download client"); } public string GetDisplayName(SearchHistory searchResult) diff --git a/NzbDrone.Web/Views/SearchHistory/Details.cshtml b/NzbDrone.Web/Views/SearchHistory/Details.cshtml index 01bf9674d..2aa409d0f 100644 --- a/NzbDrone.Web/Views/SearchHistory/Details.cshtml +++ b/NzbDrone.Web/Views/SearchHistory/Details.cshtml @@ -38,7 +38,7 @@ function actionColumn(source, type, val) { if (type === 'display' || type === 'filter') { - return ''; + return ''; } // 'sort' and 'type' both just use the raw data return ''; From 6897d44b383f421db7ece226ee45ae9efbf41f6b Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 19 Nov 2012 15:16:25 -0800 Subject: [PATCH 10/15] Search History qualioty sort by weight, not ID --- NzbDrone.Web/Controllers/SearchHistoryController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NzbDrone.Web/Controllers/SearchHistoryController.cs b/NzbDrone.Web/Controllers/SearchHistoryController.cs index 15916a9d8..0e9f35d3a 100644 --- a/NzbDrone.Web/Controllers/SearchHistoryController.cs +++ b/NzbDrone.Web/Controllers/SearchHistoryController.cs @@ -53,7 +53,7 @@ namespace NzbDrone.Web.Controllers Success = s.Success, SearchError = s.SearchError.AddSpacesToEnum().Replace("None", "Grabbed"), Quality = s.Quality.ToString(), - QualityInt = (int)s.Quality, + QualityInt = s.Quality.Weight, Proper = s.Proper, Age = s.Age, Size = s.Size.ToBestFileSize(1), From dda7868215e6f4d5877d643211c7867ffd6f19d7 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 21 Nov 2012 08:14:57 -0800 Subject: [PATCH 11/15] Cleaned up a bunch of warnings --- NzbDrone.Core.Test/IndexerTests.cs | 2 -- NzbDrone.Core/Parser.cs | 3 +-- NzbDrone.Core/Providers/DiskScanProvider.cs | 1 + NzbDrone.Core/Providers/NewznabProvider.cs | 1 + NzbDrone.Core/Providers/SignalRProvider.cs | 3 +-- NzbDrone.Core/Providers/SmtpProvider.cs | 1 + .../Providers/SceneMappingProvider.cs | 5 +++++ NzbDrone.Update.Test/NzbDrone.Update.Test.csproj | 4 ++-- NzbDrone.Web/Controllers/CommandController.cs | 4 ++++ 9 files changed, 16 insertions(+), 8 deletions(-) diff --git a/NzbDrone.Core.Test/IndexerTests.cs b/NzbDrone.Core.Test/IndexerTests.cs index e2a14f3bb..47e549b62 100644 --- a/NzbDrone.Core.Test/IndexerTests.cs +++ b/NzbDrone.Core.Test/IndexerTests.cs @@ -596,7 +596,6 @@ namespace NzbDrone.Core.Test WithConfiguredIndexers(); const string fileName = "wombles.xml"; - const string expectedString = "nzbdetails"; Mocker.GetMock() .Setup(h => h.DownloadStream(It.IsAny(), It.IsAny())) @@ -635,7 +634,6 @@ namespace NzbDrone.Core.Test { WithConfiguredIndexers(); - const string fileName = "nzbindex.xml"; const string expectedString = "release"; Mocker.GetMock() diff --git a/NzbDrone.Core/Parser.cs b/NzbDrone.Core/Parser.cs index e6da55dc7..04bc153ce 100644 --- a/NzbDrone.Core/Parser.cs +++ b/NzbDrone.Core/Parser.cs @@ -220,8 +220,7 @@ namespace NzbDrone.Core } parsedEpisode = new EpisodeParseResult - { - + { AirDate = new DateTime(airyear, airmonth, airday).Date, }; } diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index f51e6e95b..a780756ab 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -206,6 +206,7 @@ namespace NzbDrone.Core.Providers catch (UnauthorizedAccessException ex) { Logger.Debug("Unable to apply folder permissions to: ", newFile.FullName); + Logger.TraceException(ex.Message, ex); } episodeFile.Path = newFile.FullName; diff --git a/NzbDrone.Core/Providers/NewznabProvider.cs b/NzbDrone.Core/Providers/NewznabProvider.cs index f789c973f..b3eab5b7b 100644 --- a/NzbDrone.Core/Providers/NewznabProvider.cs +++ b/NzbDrone.Core/Providers/NewznabProvider.cs @@ -140,6 +140,7 @@ namespace NzbDrone.Core.Providers catch (Exception ex) { Logger.Error("Invalid address {0}, please correct the site URL.", url); + Logger.TraceException(ex.Message, ex); throw; } diff --git a/NzbDrone.Core/Providers/SignalRProvider.cs b/NzbDrone.Core/Providers/SignalRProvider.cs index 671c8d058..99d37372b 100644 --- a/NzbDrone.Core/Providers/SignalRProvider.cs +++ b/NzbDrone.Core/Providers/SignalRProvider.cs @@ -28,11 +28,10 @@ namespace NzbDrone.Core.Providers EpisodeStatus = episodeStatus.ToString(), Quality = (quality == null ? String.Empty : quality.Quality.ToString()) }); - var test = 0; } catch (Exception ex) { - logger.Trace("Error"); + logger.TraceException("Error", ex); throw; } } diff --git a/NzbDrone.Core/Providers/SmtpProvider.cs b/NzbDrone.Core/Providers/SmtpProvider.cs index e0f831dcc..025c23657 100644 --- a/NzbDrone.Core/Providers/SmtpProvider.cs +++ b/NzbDrone.Core/Providers/SmtpProvider.cs @@ -61,6 +61,7 @@ namespace NzbDrone.Core.Providers catch(Exception ex) { Logger.Error("Error sending email. Subject: {0}", email.Subject); + Logger.TraceException(ex.Message, ex); } } diff --git a/NzbDrone.Services/NzbDrone.Services.Service/Providers/SceneMappingProvider.cs b/NzbDrone.Services/NzbDrone.Services.Service/Providers/SceneMappingProvider.cs index 1ff2519ef..36daef8b1 100644 --- a/NzbDrone.Services/NzbDrone.Services.Service/Providers/SceneMappingProvider.cs +++ b/NzbDrone.Services/NzbDrone.Services.Service/Providers/SceneMappingProvider.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Web; +using NLog; using NzbDrone.Services.Service.Repository; using Services.PetaPoco; @@ -11,6 +12,8 @@ namespace NzbDrone.Services.Service.Providers { private readonly IDatabase _database; + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + public SceneMappingProvider(IDatabase database) { _database = database; @@ -74,6 +77,7 @@ namespace NzbDrone.Services.Service.Providers } catch (Exception ex) { + logger.WarnException("Unable to promote scene mapping", ex); return false; } @@ -93,6 +97,7 @@ namespace NzbDrone.Services.Service.Providers } catch (Exception ex) { + logger.WarnException("Unable to promote all scene mappings", ex); return false; } diff --git a/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj b/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj index 16a00c2c9..acaa83dec 100644 --- a/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj +++ b/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj @@ -80,11 +80,11 @@ NzbDrone.Common - {CADDFCE0-7509-4430-8364-2074E1EEFCA2} + {caddfce0-7509-4430-8364-2074e1eefca2} NzbDrone.Test.Common - {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7} + {4ccc53cd-8d5e-4cc4-97d2-5c9312ac2bd7} NzbDrone.Update diff --git a/NzbDrone.Web/Controllers/CommandController.cs b/NzbDrone.Web/Controllers/CommandController.cs index bc1b0cf68..1bfe2ee50 100644 --- a/NzbDrone.Web/Controllers/CommandController.cs +++ b/NzbDrone.Web/Controllers/CommandController.cs @@ -1,4 +1,5 @@ using System.Web.Mvc; +using NLog; using NzbDrone.Core.Jobs; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.DownloadClients; @@ -21,6 +22,8 @@ namespace NzbDrone.Web.Controllers private readonly XbmcProvider _xbmcProvider; private readonly PlexProvider _plexProvider; + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + public CommandController(JobProvider jobProvider, SabProvider sabProvider, SmtpProvider smtpProvider, TwitterProvider twitterProvider, EpisodeProvider episodeProvider, GrowlProvider growlProvider, @@ -133,6 +136,7 @@ namespace NzbDrone.Web.Controllers } catch(Exception ex) { + logger.TraceException(ex.Message, ex); return JsonNotificationResult.Oops("Couldn't register and test Growl"); } } From 22dc51a52f84e9e2b1f00f75c58ce2b5b638d2b2 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 22 Nov 2012 16:38:38 -0800 Subject: [PATCH 12/15] Minor cleanup to searchProvider --- NzbDrone.Core/Providers/SearchProvider.cs | 68 +++++++++++------------ 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/NzbDrone.Core/Providers/SearchProvider.cs b/NzbDrone.Core/Providers/SearchProvider.cs index 478f0caa2..63d263d0c 100644 --- a/NzbDrone.Core/Providers/SearchProvider.cs +++ b/NzbDrone.Core/Providers/SearchProvider.cs @@ -15,7 +15,6 @@ namespace NzbDrone.Core.Providers { public class SearchProvider { - //Season and Episode Searching private readonly EpisodeProvider _episodeProvider; private readonly DownloadProvider _downloadProvider; private readonly SeriesProvider _seriesProvider; @@ -25,7 +24,7 @@ namespace NzbDrone.Core.Providers private readonly AllowedDownloadSpecification _allowedDownloadSpecification; private readonly SearchHistoryProvider _searchHistoryProvider; - private static readonly Logger _logger = LogManager.GetCurrentClassLogger(); + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); [Inject] public SearchProvider(EpisodeProvider episodeProvider, DownloadProvider downloadProvider, SeriesProvider seriesProvider, @@ -60,22 +59,22 @@ namespace NzbDrone.Core.Providers if (series == null) { - _logger.Error("Unable to find an series {0} in database", seriesId); + logger.Error("Unable to find an series {0} in database", seriesId); return new List(); } if (series.IsDaily) { - _logger.Trace("Daily series detected, skipping season search: {0}", series.Title); + logger.Trace("Daily series detected, skipping season search: {0}", series.Title); return new List(); } - _logger.Debug("Getting episodes from database for series: {0} and season: {1}", seriesId, seasonNumber); + logger.Debug("Getting episodes from database for series: {0} and season: {1}", seriesId, seasonNumber); var episodes = _episodeProvider.GetEpisodesBySeason(seriesId, seasonNumber); if (episodes == null || episodes.Count == 0) { - _logger.Warn("No episodes in database found for series: {0} and season: {1}.", seriesId, seasonNumber); + logger.Warn("No episodes in database found for series: {0} and season: {1}.", seriesId, seasonNumber); return new List(); } @@ -90,7 +89,7 @@ namespace NzbDrone.Core.Providers if (sceneSeasonNumbers.Distinct().Count() > 1) { - _logger.Trace("Uses scene numbering, but multiple seasons found, skipping."); + logger.Trace("Uses scene numbering, but multiple seasons found, skipping."); return new List(); } @@ -110,7 +109,7 @@ namespace NzbDrone.Core.Providers ); } - _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); + logger.Debug("Finished searching all indexers. Total {0}", reports.Count); if (reports.Count == 0) return new List(); @@ -136,13 +135,13 @@ namespace NzbDrone.Core.Providers if (series == null) { - _logger.Error("Unable to find an series {0} in database", seriesId); + logger.Error("Unable to find an series {0} in database", seriesId); return new List(); } if (series.IsDaily) { - _logger.Trace("Daily series detected, skipping season search: {0}", series.Title); + logger.Trace("Daily series detected, skipping season search: {0}", series.Title); return new List(); } @@ -158,7 +157,7 @@ namespace NzbDrone.Core.Providers if (sceneSeasonNumbers.Distinct().Count() > 1) { - _logger.Trace("Uses scene numbering, but multiple seasons found, skipping."); + logger.Trace("Uses scene numbering, but multiple seasons found, skipping."); return new List(); } @@ -170,7 +169,7 @@ namespace NzbDrone.Core.Providers reports = PerformPartialSeasonSearch(series, seasonNumber, GetEpisodeNumberPrefixes(episodes.Select(e => e.EpisodeNumber))); } - _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); + logger.Debug("Finished searching all indexers. Total {0}", reports.Count); if (reports.Count == 0) return new List(); @@ -188,14 +187,13 @@ namespace NzbDrone.Core.Providers if (episode == null) { - _logger.Error("Unable to find an episode {0} in database", episodeId); + logger.Error("Unable to find an episode {0} in database", episodeId); return false; } - //Check to see if an upgrade is possible before attempting if (!_upgradePossibleSpecification.IsSatisfiedBy(episode)) { - _logger.Info("Search for {0} was aborted, file in disk meets or exceeds Profile's Cutoff", episode); + logger.Info("Search for {0} was aborted, file in disk meets or exceeds Profile's Cutoff", episode); notification.CurrentMessage = String.Format("Skipping search for {0}, the file you have is already at cutoff", episode); return false; } @@ -214,14 +212,14 @@ namespace NzbDrone.Core.Providers { if (!episode.AirDate.HasValue) { - _logger.Warn("AirDate is not Valid for: {0}", episode); + logger.Warn("AirDate is not Valid for: {0}", episode); notification.CurrentMessage = String.Format("Search for {0} Failed, AirDate is invalid", episode); return false; } reports = PerformDailyEpisodeSearch(episode.Series, episode); - _logger.Debug("Finished searching all indexers. Total {0}", reports.Count); + logger.Debug("Finished searching all indexers. Total {0}", reports.Count); notification.CurrentMessage = "Processing search results"; searchResult.SearchHistoryItems = ProcessSearchResults(notification, reports, episode.Series, episode.AirDate.Value); @@ -270,7 +268,7 @@ namespace NzbDrone.Core.Providers return true; } - _logger.Warn("Unable to find {0} in any of indexers.", episode); + logger.Warn("Unable to find {0} in any of indexers.", episode); notification.CurrentMessage = reports.Any() ? String.Format("Sorry, couldn't find {0}, that matches your preferences.", episode) : String.Format("Sorry, couldn't find {0} in any of indexers.", episode); @@ -289,7 +287,7 @@ namespace NzbDrone.Core.Providers { try { - _logger.Trace("Analysing report " + episodeParseResult); + logger.Trace("Analysing report " + episodeParseResult); var item = new SearchHistoryItem { @@ -311,7 +309,7 @@ namespace NzbDrone.Core.Providers //If series is null or doesn't match the series we're looking for return if (episodeParseResult.Series == null || episodeParseResult.Series.SeriesId != series.SeriesId) { - _logger.Trace("Unexpected series for search: {0}. Skipping.", episodeParseResult.CleanTitle); + logger.Trace("Unexpected series for search: {0}. Skipping.", episodeParseResult.CleanTitle); item.SearchError = ReportRejectionType.WrongSeries; continue; } @@ -319,7 +317,7 @@ namespace NzbDrone.Core.Providers //If SeasonNumber doesn't match or episode is not in the in the list in the parse result, skip the report. if (episodeParseResult.SeasonNumber != seasonNumber) { - _logger.Trace("Season number does not match searched season number, skipping."); + logger.Trace("Season number does not match searched season number, skipping."); item.SearchError = ReportRejectionType.WrongSeason; continue; } @@ -327,7 +325,7 @@ namespace NzbDrone.Core.Providers //If the EpisodeNumber was passed in and it is not contained in the parseResult, skip the report. if (episodeNumber.HasValue && !episodeParseResult.EpisodeNumbers.Contains(episodeNumber.Value)) { - _logger.Trace("Searched episode number is not contained in post, skipping."); + logger.Trace("Searched episode number is not contained in post, skipping."); item.SearchError = ReportRejectionType.WrongEpisode; continue; } @@ -335,7 +333,7 @@ namespace NzbDrone.Core.Providers //Make sure we haven't already downloaded a report with this episodenumber, if we have, skip the report. if (searchResult.Successes.Intersect(episodeParseResult.EpisodeNumbers).Any()) { - _logger.Trace("Episode has already been downloaded in this search, skipping."); + logger.Trace("Episode has already been downloaded in this search, skipping."); item.SearchError = ReportRejectionType.Skipped; continue; } @@ -345,7 +343,7 @@ namespace NzbDrone.Core.Providers item.SearchError = _allowedDownloadSpecification.IsSatisfiedBy(episodeParseResult); if (item.SearchError == ReportRejectionType.None) { - _logger.Debug("Found '{0}'. Adding to download queue.", episodeParseResult); + logger.Debug("Found '{0}'. Adding to download queue.", episodeParseResult); try { if (_downloadProvider.DownloadReport(episodeParseResult)) @@ -363,7 +361,7 @@ namespace NzbDrone.Core.Providers } catch (Exception e) { - _logger.ErrorException("Unable to add report to download queue." + episodeParseResult, e); + logger.ErrorException("Unable to add report to download queue." + episodeParseResult, e); notification.CurrentMessage = String.Format("Unable to add report to download queue. {0}", episodeParseResult); item.SearchError = ReportRejectionType.DownloadClientFailure; } @@ -371,7 +369,7 @@ namespace NzbDrone.Core.Providers } catch (Exception e) { - _logger.ErrorException("An error has occurred while processing parse result items from " + episodeParseResult, e); + logger.ErrorException("An error has occurred while processing parse result items from " + episodeParseResult, e); } } @@ -407,7 +405,7 @@ namespace NzbDrone.Core.Providers continue; } - _logger.Trace("Analysing report " + episodeParseResult); + logger.Trace("Analysing report " + episodeParseResult); //Get the matching series episodeParseResult.Series = _seriesProvider.FindSeries(episodeParseResult.CleanTitle); @@ -431,7 +429,7 @@ namespace NzbDrone.Core.Providers item.SearchError = _allowedDownloadSpecification.IsSatisfiedBy(episodeParseResult); if (item.SearchError == ReportRejectionType.None) { - _logger.Debug("Found '{0}'. Adding to download queue.", episodeParseResult); + logger.Debug("Found '{0}'. Adding to download queue.", episodeParseResult); try { if (_downloadProvider.DownloadReport(episodeParseResult)) @@ -450,7 +448,7 @@ namespace NzbDrone.Core.Providers } catch (Exception e) { - _logger.ErrorException("Unable to add report to download queue." + episodeParseResult, e); + logger.ErrorException("Unable to add report to download queue." + episodeParseResult, e); notification.CurrentMessage = String.Format("Unable to add report to download queue. {0}", episodeParseResult); item.SearchError = ReportRejectionType.DownloadClientFailure; } @@ -458,7 +456,7 @@ namespace NzbDrone.Core.Providers } catch (Exception e) { - _logger.ErrorException("An error has occurred while processing parse result items from " + episodeParseResult, e); + logger.ErrorException("An error has occurred while processing parse result items from " + episodeParseResult, e); } } @@ -491,7 +489,7 @@ namespace NzbDrone.Core.Providers catch (Exception e) { - _logger.ErrorException(String.Format("An error has occurred while searching for {0}-S{1:00}E{2:00} from: {3}", + logger.ErrorException(String.Format("An error has occurred while searching for {0}-S{1:00}E{2:00} from: {3}", series.Title, seasonNumber, episodeNumber, indexer.Name), e); } }); @@ -508,13 +506,13 @@ namespace NzbDrone.Core.Providers { try { - _logger.Trace("Episode {0} is a daily episode, searching as daily", episode); + logger.Trace("Episode {0} is a daily episode, searching as daily", episode); reports.AddRange(indexer.FetchDailyEpisode(title, episode.AirDate.Value)); } catch (Exception e) { - _logger.ErrorException(String.Format("An error has occurred while searching for {0}-{1} from: {2}", + logger.ErrorException(String.Format("An error has occurred while searching for {0}-{1} from: {2}", series.Title, episode.AirDate, indexer.Name), e); } }); @@ -539,7 +537,7 @@ namespace NzbDrone.Core.Providers catch (Exception e) { - _logger.ErrorException(String.Format("An error has occurred while searching for {0}-S{1:00} from: {2}", + logger.ErrorException(String.Format("An error has occurred while searching for {0}-S{1:00} from: {2}", series.Title, seasonNumber, indexer.Name), e); } }); @@ -561,7 +559,7 @@ namespace NzbDrone.Core.Providers catch (Exception e) { - _logger.ErrorException("An error has occurred while searching for items from: " + indexer.Name, e); + logger.ErrorException("An error has occurred while searching for items from: " + indexer.Name, e); } }); From eddbd4a97babd6d2fe0f5f4857593f85f1a67bc3 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 22 Nov 2012 18:56:27 -0800 Subject: [PATCH 13/15] Renamed some settings, added 2nd priority for sab New: Separated priorities for new and old episodes when sent to SABnzbd --- .../JobTests/PostDownloadScanJobFixture.cs | 8 +-- .../BlackholeProviderFixture.cs | 8 +-- .../PneumaticProviderFixture.cs | 12 ++--- .../SabProviderTests/SabProviderFixture.cs | 53 +++++++++++++++++-- .../ProviderTests/DownloadProviderFixture.cs | 16 +++--- .../Datastore/Migrations/Migration20121122.cs | 22 ++++++++ NzbDrone.Core/Jobs/PostDownloadScanJob.cs | 2 +- NzbDrone.Core/NzbDrone.Core.csproj | 1 + .../Providers/Core/ConfigProvider.cs | 20 ++++--- .../DownloadClients/BlackholeProvider.cs | 2 +- .../DownloadClients/IDownloadClient.cs | 2 +- .../DownloadClients/PneumaticProvider.cs | 4 +- .../Providers/DownloadClients/SabProvider.cs | 5 +- NzbDrone.Core/Providers/DownloadProvider.cs | 13 ++++- .../Controllers/SettingsController.cs | 10 ++-- NzbDrone.Web/Controllers/SystemController.cs | 4 +- .../Models/DownloadClientSettingsModel.cs | 11 ++-- NzbDrone.Web/Views/Settings/Sabnzbd.cshtml | 11 ++-- 18 files changed, 150 insertions(+), 54 deletions(-) create mode 100644 NzbDrone.Core/Datastore/Migrations/Migration20121122.cs diff --git a/NzbDrone.Core.Test/JobTests/PostDownloadScanJobFixture.cs b/NzbDrone.Core.Test/JobTests/PostDownloadScanJobFixture.cs index e754d4d0d..b92ff1258 100644 --- a/NzbDrone.Core.Test/JobTests/PostDownloadScanJobFixture.cs +++ b/NzbDrone.Core.Test/JobTests/PostDownloadScanJobFixture.cs @@ -44,7 +44,7 @@ namespace NzbDrone.Core.Test.JobTests Mocker.GetMock().Setup(s => s.ProcessDropFolder(path)); Mocker.Resolve().Start(MockNotification, new { Path = path }); - Mocker.GetMock().Verify(s => s.SabDropDirectory, Times.Never()); + Mocker.GetMock().Verify(s => s.DownloadClientTvDirectory, Times.Never()); } [Test] @@ -52,10 +52,10 @@ namespace NzbDrone.Core.Test.JobTests { var path = @"C:\Test\Unsorted TV"; - Mocker.GetMock().SetupGet(s => s.SabDropDirectory).Returns(path); + Mocker.GetMock().SetupGet(s => s.DownloadClientTvDirectory).Returns(path); Mocker.Resolve().Start(MockNotification, null); - Mocker.GetMock().Verify(s => s.SabDropDirectory, Times.Once()); + Mocker.GetMock().Verify(s => s.DownloadClientTvDirectory, Times.Once()); } [Test] @@ -63,7 +63,7 @@ namespace NzbDrone.Core.Test.JobTests { var path = @"C:\Test\Unsorted TV"; - Mocker.GetMock().SetupGet(s => s.SabDropDirectory).Returns(path); + Mocker.GetMock().SetupGet(s => s.DownloadClientTvDirectory).Returns(path); Mocker.Resolve().Start(MockNotification, null); Mocker.GetMock().Verify(s => s.ProcessDropFolder(path), Times.Once()); diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs index ec867c3ac..af4c40858 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/BlackholeProviderFixture.cs @@ -43,7 +43,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests [Test] public void DownloadNzb_should_download_file_if_it_doesnt_exist() { - Mocker.Resolve().DownloadNzb(nzbUrl, title).Should().BeTrue(); + Mocker.Resolve().DownloadNzb(nzbUrl, title, false).Should().BeTrue(); Mocker.GetMock().Verify(c => c.DownloadFile(nzbUrl, nzbPath),Times.Once()); } @@ -53,7 +53,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests { WithExistingFile(); - Mocker.Resolve().DownloadNzb(nzbUrl, title).Should().BeTrue(); + Mocker.Resolve().DownloadNzb(nzbUrl, title, false).Should().BeTrue(); Mocker.GetMock().Verify(c => c.DownloadFile(It.IsAny(), It.IsAny()), Times.Never()); } @@ -63,7 +63,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests { WithFailedDownload(); - Mocker.Resolve().DownloadNzb(nzbUrl, title).Should().BeFalse(); + Mocker.Resolve().DownloadNzb(nzbUrl, title, false).Should().BeFalse(); ExceptionVerification.ExpectedWarns(1); } @@ -74,7 +74,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests var illegalTitle = "Saturday Night Live - S38E08 - Jeremy Renner/Maroon 5 [SDTV]"; var expectedFilename = Path.Combine(blackHoleFolder, "Saturday Night Live - S38E08 - Jeremy Renner+Maroon 5 [SDTV].nzb"); - Mocker.Resolve().DownloadNzb(nzbUrl, illegalTitle).Should().BeTrue(); + Mocker.Resolve().DownloadNzb(nzbUrl, illegalTitle, false).Should().BeTrue(); Mocker.GetMock().Verify(c => c.DownloadFile(It.IsAny(), expectedFilename), Times.Once()); } diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs index 540389362..19c74d22b 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/PneumaticProviderFixture.cs @@ -30,7 +30,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests nzbPath = pneumaticFolder + title + ".nzb"; Mocker.GetMock().SetupGet(c => c.PneumaticDirectory).Returns(pneumaticFolder); - Mocker.GetMock().SetupGet(c => c.SabDropDirectory).Returns(sabDrop); + Mocker.GetMock().SetupGet(c => c.DownloadClientTvDirectory).Returns(sabDrop); } private void WithExistingFile() @@ -46,7 +46,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests [Test] public void should_download_file_if_it_doesnt_exist() { - Mocker.Resolve().DownloadNzb(nzbUrl, title).Should().BeTrue(); + Mocker.Resolve().DownloadNzb(nzbUrl, title, false).Should().BeTrue(); Mocker.GetMock().Verify(c => c.DownloadFile(nzbUrl, nzbPath),Times.Once()); } @@ -56,7 +56,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests { WithExistingFile(); - Mocker.Resolve().DownloadNzb(nzbUrl, title).Should().BeTrue(); + Mocker.Resolve().DownloadNzb(nzbUrl, title, false).Should().BeTrue(); Mocker.GetMock().Verify(c => c.DownloadFile(It.IsAny(), It.IsAny()), Times.Never()); } @@ -66,7 +66,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests { WithFailedDownload(); - Mocker.Resolve().DownloadNzb(nzbUrl, title).Should().BeFalse(); + Mocker.Resolve().DownloadNzb(nzbUrl, title, false).Should().BeFalse(); ExceptionVerification.ExpectedWarns(1); } @@ -74,7 +74,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests [Test] public void should_skip_if_full_season_download() { - Mocker.Resolve().DownloadNzb(nzbUrl, "30 Rock - Season 1").Should().BeFalse(); + Mocker.Resolve().DownloadNzb(nzbUrl, "30 Rock - Season 1", false).Should().BeFalse(); } [Test] @@ -83,7 +83,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests var illegalTitle = "Saturday Night Live - S38E08 - Jeremy Renner/Maroon 5 [SDTV]"; var expectedFilename = Path.Combine(pneumaticFolder, "Saturday Night Live - S38E08 - Jeremy Renner+Maroon 5 [SDTV].nzb"); - Mocker.Resolve().DownloadNzb(nzbUrl, illegalTitle).Should().BeTrue(); + Mocker.Resolve().DownloadNzb(nzbUrl, illegalTitle, false).Should().BeTrue(); Mocker.GetMock().Verify(c => c.DownloadFile(It.IsAny(), expectedFilename), Times.Once()); } diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/SabProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/SabProviderFixture.cs index 50d6e939d..26d7e1dce 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/SabProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/SabProviderFixture.cs @@ -11,6 +11,7 @@ using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Core.Model; +using NzbDrone.Core.Model.Sabnzbd; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.DownloadClients; using NzbDrone.Core.Repository; @@ -54,7 +55,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests .Returns("{ \"status\": true }"); //Act - Mocker.Resolve().DownloadNzb(url, title).Should().BeTrue(); + Mocker.Resolve().DownloadNzb(url, title, false).Should().BeTrue(); } [Test] @@ -66,7 +67,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests //Act - bool result = Mocker.Resolve().DownloadNzb("http://www.newzbin.com/browse/post/6107863/nzb", title); + bool result = Mocker.Resolve().DownloadNzb("http://www.newzbin.com/browse/post/6107863/nzb", title, false); //Assert result.Should().BeTrue(); @@ -78,7 +79,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests WithFailResponse(); //Act - Assert.Throws(() => Mocker.Resolve().DownloadNzb(url, title).Should().BeFalse()); + Assert.Throws(() => Mocker.Resolve().DownloadNzb(url, title, false).Should().BeFalse()); //ExceptionVerification.ExpectedErrors(1); } @@ -216,8 +217,52 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests Mocker.GetMock() .Setup(s => s.DownloadString(It.IsAny())).Throws(new WebException()); - Mocker.Resolve().DownloadNzb(url, title).Should().BeFalse(); + Mocker.Resolve().DownloadNzb(url, title, false).Should().BeFalse(); ExceptionVerification.ExpectedErrors(1); } + + [Test] + public void downloadNzb_should_use_sabRecentTvPriority_when_recentEpisode_is_true() + { + Mocker.GetMock() + .SetupGet(s => s.SabRecentTvPriority) + .Returns(SabPriorityType.High); + + Mocker.GetMock() + .SetupGet(s => s.SabBacklogTvPriority) + .Returns(SabPriorityType.Low); + + Mocker.GetMock() + .Setup(s => s.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=1&pp=3&cat=tv&nzbname=My+Series+Name+-+5x2-5x3+-+My+title+%5bBluray720p%5d+%5bProper%5d&output=json&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass")) + .Returns("{ \"status\": true }"); + + //Act + Mocker.Resolve().DownloadNzb(url, title, true).Should().BeTrue(); + + Mocker.GetMock() + .Verify(v => v.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=1&pp=3&cat=tv&nzbname=My+Series+Name+-+5x2-5x3+-+My+title+%5bBluray720p%5d+%5bProper%5d&output=json&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass"), Times.Once()); + } + + [Test] + public void downloadNzb_should_use_sabBackogTvPriority_when_recentEpisode_is_false() + { + Mocker.GetMock() + .SetupGet(s => s.SabRecentTvPriority) + .Returns(SabPriorityType.High); + + Mocker.GetMock() + .SetupGet(s => s.SabBacklogTvPriority) + .Returns(SabPriorityType.Low); + + Mocker.GetMock() + .Setup(s => s.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=-1&pp=3&cat=tv&nzbname=My+Series+Name+-+5x2-5x3+-+My+title+%5bBluray720p%5d+%5bProper%5d&output=json&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass")) + .Returns("{ \"status\": true }"); + + //Act + Mocker.Resolve().DownloadNzb(url, title, false).Should().BeTrue(); + + Mocker.GetMock() + .Verify(v => v.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=-1&pp=3&cat=tv&nzbname=My+Series+Name+-+5x2-5x3+-+My+title+%5bBluray720p%5d+%5bProper%5d&output=json&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass"), Times.Once()); + } } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadProviderFixture.cs index 5c224f8fb..b85e80ae3 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadProviderFixture.cs @@ -59,22 +59,22 @@ namespace NzbDrone.Core.Test.ProviderTests private void WithSuccessfullAdd() { Mocker.GetMock() - .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny())) + .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false)) .Returns(true); Mocker.GetMock() - .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny())) + .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false)) .Returns(true); } private void WithFailedAdd() { Mocker.GetMock() - .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny())) + .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false)) .Returns(false); Mocker.GetMock() - .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny())) + .Setup(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false)) .Returns(false); } @@ -92,10 +92,10 @@ namespace NzbDrone.Core.Test.ProviderTests //Assert Mocker.GetMock() - .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny()), Times.Once()); + .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false), Times.Once()); Mocker.GetMock() - .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny()), Times.Never()); + .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false), Times.Never()); Mocker.GetMock() .Verify(s => s.Add(It.Is(h => h.EpisodeId == 12 && h.SeriesId == 5)), Times.Once()); @@ -127,10 +127,10 @@ namespace NzbDrone.Core.Test.ProviderTests //Assert Mocker.GetMock() - .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny()), Times.Never()); + .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false), Times.Never()); Mocker.GetMock() - .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny()), Times.Once()); + .Verify(s => s.DownloadNzb(It.IsAny(), It.IsAny(), false), Times.Once()); Mocker.GetMock() .Verify(s => s.Add(It.Is(h => h.EpisodeId == 12 && h.SeriesId == 5)), Times.Once()); diff --git a/NzbDrone.Core/Datastore/Migrations/Migration20121122.cs b/NzbDrone.Core/Datastore/Migrations/Migration20121122.cs new file mode 100644 index 000000000..4a7936b71 --- /dev/null +++ b/NzbDrone.Core/Datastore/Migrations/Migration20121122.cs @@ -0,0 +1,22 @@ +using System; +using System.Data; +using Migrator.Framework; +using NzbDrone.Common; + +namespace NzbDrone.Core.Datastore.Migrations +{ + [Migration(20121122)] + public class Migration20121122 : NzbDroneMigration + { + protected override void MainDbUpgrade() + { + Database.ExecuteNonQuery("UPDATE Config SET [KEY] = 'SabBacklogTvPriority' WHERE [KEY] = 'SabTvPriority'"); + Database.ExecuteNonQuery("UPDATE Config SET [KEY] = 'SabTvDropDirectory ' WHERE [KEY] = 'DownloadClientTvDirectory'"); + + var priority = Database.ExecuteScalar("SELECT [Value] FROM Config WHERE [Key] = 'SabBacklogTvPriority'"); + + if (priority != null) + Database.ExecuteNonQuery("INSERT INTO Config ([Key], [Value]) VALUES('SabRecentTvPriority', '" + priority + "')"); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Jobs/PostDownloadScanJob.cs b/NzbDrone.Core/Jobs/PostDownloadScanJob.cs index 4ab9b8732..57aa13f76 100644 --- a/NzbDrone.Core/Jobs/PostDownloadScanJob.cs +++ b/NzbDrone.Core/Jobs/PostDownloadScanJob.cs @@ -47,7 +47,7 @@ namespace NzbDrone.Core.Jobs dropFolder = options.Path; else - dropFolder = _configProvider.SabDropDirectory; + dropFolder = _configProvider.DownloadClientTvDirectory; if (String.IsNullOrWhiteSpace(dropFolder)) { diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 8d3bead02..8347497cc 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -227,6 +227,7 @@ + diff --git a/NzbDrone.Core/Providers/Core/ConfigProvider.cs b/NzbDrone.Core/Providers/Core/ConfigProvider.cs index 09f83adae..44800ea49 100644 --- a/NzbDrone.Core/Providers/Core/ConfigProvider.cs +++ b/NzbDrone.Core/Providers/Core/ConfigProvider.cs @@ -145,18 +145,25 @@ namespace NzbDrone.Core.Providers.Core set { SetValue("SabTvCategory", value); } } - public virtual SabPriorityType SabTvPriority + public virtual SabPriorityType SabBacklogTvPriority { - get { return (SabPriorityType)GetValueInt("SabTvPriority"); } + get { return (SabPriorityType)GetValueInt("SabBacklogTvPriority"); } - set { SetValue("SabTvPriority", (int)value); } + set { SetValue("SabBacklogTvPriority", (int)value); } } - public virtual String SabDropDirectory + public virtual SabPriorityType SabRecentTvPriority { - get { return GetValue("SabTvDropDirectory"); } + get { return (SabPriorityType)GetValueInt("SabRecentTvPriority"); } - set { SetValue("SabTvDropDirectory", value); } + set { SetValue("SabRecentTvPriority", (int)value); } + } + + public virtual String DownloadClientTvDirectory + { + get { return GetValue("DownloadClientTvDirectory"); } + + set { SetValue("DownloadClientTvDirectory", value); } } public virtual bool SortingIncludeSeriesName @@ -557,7 +564,6 @@ namespace NzbDrone.Core.Providers.Core { EnsureCache(); - string dbValue; if (cache.TryGetValue(key, out dbValue) && dbValue != null && !String.IsNullOrEmpty(dbValue)) diff --git a/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs b/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs index af836cb65..3698b2f75 100644 --- a/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs +++ b/NzbDrone.Core/Providers/DownloadClients/BlackholeProvider.cs @@ -34,7 +34,7 @@ namespace NzbDrone.Core.Providers.DownloadClients { } - public virtual bool DownloadNzb(string url, string title) + public virtual bool DownloadNzb(string url, string title, bool recentlyAired) { try { diff --git a/NzbDrone.Core/Providers/DownloadClients/IDownloadClient.cs b/NzbDrone.Core/Providers/DownloadClients/IDownloadClient.cs index 1ea0d603d..1cdc2988b 100644 --- a/NzbDrone.Core/Providers/DownloadClients/IDownloadClient.cs +++ b/NzbDrone.Core/Providers/DownloadClients/IDownloadClient.cs @@ -6,6 +6,6 @@ namespace NzbDrone.Core.Providers.DownloadClients public interface IDownloadClient { bool IsInQueue(EpisodeParseResult newParseResult); - bool DownloadNzb(string url, string title); + bool DownloadNzb(string url, string title, bool recentlyAired); } } diff --git a/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs b/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs index 45d9acd2e..1e94da2a6 100644 --- a/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs +++ b/NzbDrone.Core/Providers/DownloadClients/PneumaticProvider.cs @@ -33,7 +33,7 @@ namespace NzbDrone.Core.Providers.DownloadClients { } - public virtual bool DownloadNzb(string url, string title) + public virtual bool DownloadNzb(string url, string title, bool recentlyAired) { try { @@ -62,7 +62,7 @@ namespace NzbDrone.Core.Providers.DownloadClients logger.Trace("NZB Download succeeded, saved to: {0}", filename); var contents = String.Format("plugin://plugin.program.pneumatic/?mode=strm&type=add_file&nzb={0}&nzbname={1}", filename, title); - _diskProvider.WriteAllText(Path.Combine(_configProvider.SabDropDirectory, title + ".strm"), contents); + _diskProvider.WriteAllText(Path.Combine(_configProvider.DownloadClientTvDirectory, title + ".strm"), contents); return true; } diff --git a/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs b/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs index 252b7b2b3..9b18b5b44 100644 --- a/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs +++ b/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs @@ -78,12 +78,13 @@ namespace NzbDrone.Core.Providers.DownloadClients } } - public virtual bool DownloadNzb(string url, string title) + public virtual bool DownloadNzb(string url, string title, bool recentlyAired) { try { string cat = _configProvider.SabTvCategory; - int priority = (int)_configProvider.SabTvPriority; + int priority = recentlyAired ? (int)_configProvider.SabRecentTvPriority : (int)_configProvider.SabBacklogTvPriority; + string name = GetNzbName(url); string nzbName = HttpUtility.UrlEncode(title); diff --git a/NzbDrone.Core/Providers/DownloadProvider.cs b/NzbDrone.Core/Providers/DownloadProvider.cs index dde52a4e9..2df3f63d2 100644 --- a/NzbDrone.Core/Providers/DownloadProvider.cs +++ b/NzbDrone.Core/Providers/DownloadProvider.cs @@ -46,10 +46,10 @@ namespace NzbDrone.Core.Providers public virtual bool DownloadReport(EpisodeParseResult parseResult) { var downloadTitle = GetDownloadTitle(parseResult); - var provider = GetActiveDownloadClient(); + var recentEpisode = CheckIfRecentEpisode(parseResult); - bool success = provider.DownloadNzb(parseResult.NzbUrl, downloadTitle); + bool success = provider.DownloadNzb(parseResult.NzbUrl, downloadTitle, recentEpisode); if (success) { @@ -154,5 +154,14 @@ namespace NzbDrone.Core.Providers return result; } + + public virtual bool CheckIfRecentEpisode(EpisodeParseResult parseResult) + { + return parseResult.Episodes + .Where(e => e.AirDate.HasValue) + .Select(e => e.AirDate) + .OrderBy(e => e.Value) + .First().Value <= DateTime.Today.AddDays(7); + } } } \ No newline at end of file diff --git a/NzbDrone.Web/Controllers/SettingsController.cs b/NzbDrone.Web/Controllers/SettingsController.cs index a2f3414be..69d98ccf3 100644 --- a/NzbDrone.Web/Controllers/SettingsController.cs +++ b/NzbDrone.Web/Controllers/SettingsController.cs @@ -140,8 +140,9 @@ namespace NzbDrone.Web.Controllers SabUsername = _configProvider.SabUsername, SabPassword = _configProvider.SabPassword, SabTvCategory = tvCategory, - SabTvPriority = _configProvider.SabTvPriority, - DownloadClientDropDirectory = _configProvider.SabDropDirectory, + SabBacklogTvPriority = _configProvider.SabBacklogTvPriority, + SabRecentTvPriority = _configProvider.SabRecentTvPriority, + DownloadClientDropDirectory = _configProvider.DownloadClientTvDirectory, SabTvCategorySelectList = tvCategorySelectList, DownloadClient = (int)_configProvider.DownloadClient, BlackholeDirectory = _configProvider.BlackholeDirectory, @@ -456,8 +457,9 @@ namespace NzbDrone.Web.Controllers _configProvider.SabPassword = data.SabPassword; _configProvider.SabTvCategory = data.SabTvCategory; _configProvider.SabUsername = data.SabUsername; - _configProvider.SabTvPriority = data.SabTvPriority; - _configProvider.SabDropDirectory = data.DownloadClientDropDirectory; + _configProvider.SabBacklogTvPriority = data.SabBacklogTvPriority; + _configProvider.SabRecentTvPriority = data.SabRecentTvPriority; + _configProvider.DownloadClientTvDirectory = data.DownloadClientDropDirectory; _configProvider.BlackholeDirectory = data.BlackholeDirectory; _configProvider.DownloadClient = (DownloadClientType)data.DownloadClient; _configProvider.PneumaticDirectory = data.PneumaticDirectory; diff --git a/NzbDrone.Web/Controllers/SystemController.cs b/NzbDrone.Web/Controllers/SystemController.cs index 796fcda2c..3e08afc24 100644 --- a/NzbDrone.Web/Controllers/SystemController.cs +++ b/NzbDrone.Web/Controllers/SystemController.cs @@ -109,9 +109,9 @@ namespace NzbDrone.Web.Controllers //PostDownloadView public ActionResult PendingProcessing() { - ViewData["DropDir"] = _configProvider.SabDropDirectory; + ViewData["DropDir"] = _configProvider.DownloadClientTvDirectory; - var dropDir = _configProvider.SabDropDirectory; + var dropDir = _configProvider.DownloadClientTvDirectory; var subFolders = _diskProvider.GetDirectories(dropDir); var models = new List(); diff --git a/NzbDrone.Web/Models/DownloadClientSettingsModel.cs b/NzbDrone.Web/Models/DownloadClientSettingsModel.cs index d193949d6..e4f04bf71 100644 --- a/NzbDrone.Web/Models/DownloadClientSettingsModel.cs +++ b/NzbDrone.Web/Models/DownloadClientSettingsModel.cs @@ -50,9 +50,14 @@ namespace NzbDrone.Web.Models public String SabTvCategory { get; set; } [Required(ErrorMessage = "Please select a valid priority")] - [DisplayName("SABnzbd Priority")] - [Description("Priority to use when sending NZBs to SABnzbd")] - public SabPriorityType SabTvPriority { get; set; } + [DisplayName("SABnzbd Backlog Priority")] + [Description("Priority to use when sending episodes older than 7 days to SABnzbd")] + public SabPriorityType SabBacklogTvPriority { get; set; } + + [Required(ErrorMessage = "Please select a valid priority")] + [DisplayName("SABnzbd Recent Priority")] + [Description("Priority to use when sending episodes newer than 7 days to SABnzbd")] + public SabPriorityType SabRecentTvPriority { get; set; } [Required(ErrorMessage = "Required so NzbDrone can sort downloads")] [DisplayName("Download Client TV Directory")] diff --git a/NzbDrone.Web/Views/Settings/Sabnzbd.cshtml b/NzbDrone.Web/Views/Settings/Sabnzbd.cshtml index ce18214d1..918e373fe 100644 --- a/NzbDrone.Web/Views/Settings/Sabnzbd.cshtml +++ b/NzbDrone.Web/Views/Settings/Sabnzbd.cshtml @@ -45,10 +45,15 @@ @Html.DropDownListFor(m => m.SabTvCategory, Model.SabTvCategorySelectList, new { @class = "inputClass selectClass" }) -