From 32dcf1feecb059278ecfff0874742c60988b1594 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Apr 2011 15:32:08 -0700 Subject: [PATCH 1/6] NZB will be sent to SABnzbd when needed. --- .../Providers/Indexer/IndexerProviderBase.cs | 59 +++++++++++++------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs b/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs index f67c0a4cf..4e07f2741 100644 --- a/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs +++ b/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.ServiceModel.Syndication; using NLog; @@ -18,11 +19,12 @@ namespace NzbDrone.Core.Providers.Indexer private readonly HistoryProvider _historyProvider; protected readonly SeasonProvider _seasonProvider; protected readonly SeriesProvider _seriesProvider; - + protected readonly SabProvider _sabProvider; protected IndexerProviderBase(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, - HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) + HttpProvider httpProvider, IndexerProvider indexerProvider, + HistoryProvider historyProvider, SabProvider sabProvider) { _seriesProvider = seriesProvider; _seasonProvider = seasonProvider; @@ -31,6 +33,7 @@ namespace NzbDrone.Core.Providers.Indexer _httpProvider = httpProvider; _indexerProvider = indexerProvider; _historyProvider = historyProvider; + _sabProvider = sabProvider; _logger = LogManager.GetLogger(GetType().ToString()); } @@ -123,25 +126,33 @@ namespace NzbDrone.Core.Providers.Indexer var episodes = _episodeProvider.GetEpisodeByParseResult(parseResult); + if (InHistory(episodes, parseResult, feedItem)) + { + return; + } + + var sabTitle = _sabProvider.GetSabTitle(parseResult); + + if (_sabProvider.IsInQueue(sabTitle)) + { + return; + } + + if (!_sabProvider.AddByUrl(NzbDownloadUrl(feedItem), sabTitle)) + { + return; + } + foreach (var episode in episodes) { - if (_historyProvider.Exists(episode.EpisodeId, parseResult.Quality, parseResult.Proper)) + _historyProvider.Add(new History { - _logger.Debug("Episode in history: {0}", feedItem.Title.Text); - } - else - { - //TODO: Add episode to sab - - _historyProvider.Add(new History - { - Date = DateTime.Now, - EpisodeId = episode.EpisodeId, - IsProper = parseResult.Proper, - NzbTitle = feedItem.Title.Text, - Quality = parseResult.Quality - }); - } + Date = DateTime.Now, + EpisodeId = episode.EpisodeId, + IsProper = parseResult.Proper, + NzbTitle = feedItem.Title.Text, + Quality = parseResult.Quality + }); } } } @@ -188,5 +199,17 @@ namespace NzbDrone.Core.Providers.Indexer /// RSS Feed item to generate the link for /// Download link URL protected abstract string NzbDownloadUrl(SyndicationItem item); + + private bool InHistory(IList episodes, EpisodeParseResult parseResult, SyndicationItem feedItem) + { + foreach (var episode in episodes) + { + if (_historyProvider.Exists(episode.EpisodeId, parseResult.Quality, parseResult.Proper)) + { + _logger.Debug("Episode in history: {0}", feedItem.Title.Text); + return true; + } + } + } } } \ No newline at end of file From 822719bdaf7d62111196ed82bcff85fb2e720918 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Apr 2011 15:53:01 -0700 Subject: [PATCH 2/6] Missed some changes for send to Sab functionality in IndexerProviderBased. --- IISExpress/AppServer/applicationhost.config | 2 +- NzbDrone.Core.Test/IndexerProviderTest.cs | 4 ++-- NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs | 1 + NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs | 2 +- NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs | 2 +- NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs | 2 +- NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs | 2 +- NzbDrone/app.config | 2 +- 8 files changed, 9 insertions(+), 8 deletions(-) diff --git a/IISExpress/AppServer/applicationhost.config b/IISExpress/AppServer/applicationhost.config index 8572e13c6..5f57e13ec 100644 --- a/IISExpress/AppServer/applicationhost.config +++ b/IISExpress/AppServer/applicationhost.config @@ -145,7 +145,7 @@ - + diff --git a/NzbDrone.Core.Test/IndexerProviderTest.cs b/NzbDrone.Core.Test/IndexerProviderTest.cs index 11e7639f7..a2f6723ae 100644 --- a/NzbDrone.Core.Test/IndexerProviderTest.cs +++ b/NzbDrone.Core.Test/IndexerProviderTest.cs @@ -69,8 +69,8 @@ namespace NzbDrone.Core.Test public class MockIndexerProvider : IndexerProviderBase { - public MockIndexerProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) - : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider) + public MockIndexerProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider, SabProvider sabProvider) + : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider, sabProvider) { } diff --git a/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs b/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs index 4e07f2741..59835a18d 100644 --- a/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs +++ b/NzbDrone.Core/Providers/Indexer/IndexerProviderBase.cs @@ -210,6 +210,7 @@ namespace NzbDrone.Core.Providers.Indexer return true; } } + return false; } } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs b/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs index 70f5bf5dd..ba4b95117 100644 --- a/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs +++ b/NzbDrone.Core/Providers/Indexer/NewzbinProvider.cs @@ -7,7 +7,7 @@ namespace NzbDrone.Core.Providers.Indexer { public class NewzbinProvider : IndexerProviderBase { - public NewzbinProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider) + public NewzbinProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider, SabProvider sabProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider, sabProvider) { } diff --git a/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs b/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs index d6c5f9300..b4fe6c134 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbMatrixProvider.cs @@ -6,7 +6,7 @@ namespace NzbDrone.Core.Providers.Indexer { public class NzbMatrixProvider : IndexerProviderBase { - public NzbMatrixProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider) + public NzbMatrixProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider, SabProvider sabProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider, sabProvider) { } diff --git a/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs b/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs index dd847cf47..ac0d99919 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbsOrgProvider.cs @@ -6,7 +6,7 @@ namespace NzbDrone.Core.Providers.Indexer { public class NzbsOrgProvider : IndexerProviderBase { - public NzbsOrgProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider) + public NzbsOrgProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider, SabProvider sabProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider, sabProvider) { } diff --git a/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs b/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs index f02875361..d90a1c30a 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbsRUsProvider.cs @@ -6,7 +6,7 @@ namespace NzbDrone.Core.Providers.Indexer { public class NzbsRUsProvider : IndexerProviderBase { - public NzbsRUsProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider) + public NzbsRUsProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider, EpisodeProvider episodeProvider, ConfigProvider configProvider, HttpProvider httpProvider, IndexerProvider indexerProvider, HistoryProvider historyProvider, SabProvider sabProvider) : base(seriesProvider, seasonProvider, episodeProvider, configProvider, httpProvider, indexerProvider, historyProvider, sabProvider) { } diff --git a/NzbDrone/app.config b/NzbDrone/app.config index 86b310f31..81d395705 100644 --- a/NzbDrone/app.config +++ b/NzbDrone/app.config @@ -4,6 +4,6 @@ - + \ No newline at end of file From 4e5c354cd6665b26f17a37566202e82eacd4f676 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Apr 2011 16:00:09 -0700 Subject: [PATCH 3/6] Remove Div when deleting instead of just hiding it (so it's not submitted when calling save). --- NzbDrone.Web/Views/Settings/Quality.cshtml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/NzbDrone.Web/Views/Settings/Quality.cshtml b/NzbDrone.Web/Views/Settings/Quality.cshtml index 4fe3b6a28..5eff53223 100644 --- a/NzbDrone.Web/Views/Settings/Quality.cshtml +++ b/NzbDrone.Web/Views/Settings/Quality.cshtml @@ -76,17 +76,11 @@ return false; }); -// $("a.deleteRow").live("click", function () { -// $(this).parents("div.userProfileSectionEditor:first").remove(); -// return false; - // }); - var deleteQualityProfileUrl = '@Url.Action("DeleteQualityProfile", "Settings")'; function deleteProfile(id) { - //$(this).parents("div.userProfileSectionEditor:first").remove(); sendToServer(id); - $("#div_" + id).hide(); + $("#div_" + id).remove(); } function sendToServer(id) { @@ -95,7 +89,7 @@ url: deleteQualityProfileUrl, data: jQuery.param({ profileId: id }), error: function (req, status, error) { - alert("Sorry! We could not add " + path + " at this time. " + error); + alert("Sorry! We could not delete your Profile at this time. " + error); } }); } From 19c7702647a369a15cef0e4516399afcf137e126 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Apr 2011 17:43:54 -0700 Subject: [PATCH 4/6] IISController now wraps config path (in argument) with quotes to allow for paths with spaces --- NzbDrone.Web/NzbDrone.Web.Publish.xml | 873 ++++++++++++++++++++------ NzbDrone/IISController.cs | 2 +- 2 files changed, 683 insertions(+), 192 deletions(-) diff --git a/NzbDrone.Web/NzbDrone.Web.Publish.xml b/NzbDrone.Web/NzbDrone.Web.Publish.xml index d7db229df..98bc90f4a 100644 --- a/NzbDrone.Web/NzbDrone.Web.Publish.xml +++ b/NzbDrone.Web/NzbDrone.Web.Publish.xml @@ -64,7 +64,7 @@ - + @@ -85,7 +85,7 @@ - + @@ -107,11 +107,9 @@ - - @@ -122,8 +120,10 @@ + + @@ -136,7 +136,7 @@ - + @@ -162,66 +162,63 @@ - - + + - - + - + + + - + + - + + - - + + - + - - + - - + - - + + - - - + - - - + @@ -229,89 +226,97 @@ - + - - - + + + + + + - + + - - - + + - + + - + + + - - - - + + + + - - + + - + + - + + - + + - + - + + + - - - + + - - - + + - + + - - - + @@ -320,33 +325,31 @@ - + + - - + + + - - - + + - - - - - + + + - @@ -354,294 +357,782 @@ - - - - + + + - + - - - + + - - - + + - - + + + - + - - + - - - + - - + - + - - - + + + - - - - - - + + + + - + + + - - + + - + + - - - + - - - + + + - - - + + - - - - - + + - + + - - - + + - + + - - + + - - + + + - + - - - - - + + + - + - - + + - + - - + + + - + + + - + + + - - + + + - - - + + + - + - - + + - - + + + + - + - + + - - + + - + - + - + - - - - - + + + + - + - - + - - - + + + - - + + - - - - - + + + + + + - + + - - + + - + + - + - + - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NzbDrone/IISController.cs b/NzbDrone/IISController.cs index 7b23f4c98..24813c620 100644 --- a/NzbDrone/IISController.cs +++ b/NzbDrone/IISController.cs @@ -35,7 +35,7 @@ namespace NzbDrone IISProcess = new Process(); IISProcess.StartInfo.FileName = IISExe; - IISProcess.StartInfo.Arguments = String.Format("/config:{0} /trace:i", IISConfigPath);//"/config:"""" /trace:i"; + IISProcess.StartInfo.Arguments = String.Format("/config:\"{0}\" /trace:i", IISConfigPath);//"/config:"""" /trace:i"; IISProcess.StartInfo.WorkingDirectory = Config.ProjectRoot; IISProcess.StartInfo.UseShellExecute = false; From 43e02fa24aeb514f9232ed7cf2189c3d2f702602 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Apr 2011 19:30:40 -0700 Subject: [PATCH 5/6] Add series with an ' apostrophe will now work correctly. --- .../Controllers/AddSeriesController.cs | 4 +- NzbDrone.Web/NzbDrone.Web.Publish.xml | 453 +++++++++--------- NzbDrone.Web/NzbDrone.Web.csproj | 2 +- 3 files changed, 230 insertions(+), 229 deletions(-) diff --git a/NzbDrone.Web/Controllers/AddSeriesController.cs b/NzbDrone.Web/Controllers/AddSeriesController.cs index cee3db2c5..08845e628 100644 --- a/NzbDrone.Web/Controllers/AddSeriesController.cs +++ b/NzbDrone.Web/Controllers/AddSeriesController.cs @@ -84,7 +84,7 @@ namespace NzbDrone.Web.Controllers ViewData["guid"] = Guid.NewGuid(); ViewData["path"] = path; - ViewData["javaPath"] = path.Replace(Path.DirectorySeparatorChar, '|').Replace(Path.VolumeSeparatorChar, '^'); + ViewData["javaPath"] = path.Replace(Path.DirectorySeparatorChar, '|').Replace(Path.VolumeSeparatorChar, '^').Replace('\'', '`'); var defaultQuality = _configProvider.DefaultQualityProfile; var qualityProfiles = _qualityProvider.GetAllProfiles(); @@ -105,7 +105,7 @@ namespace NzbDrone.Web.Controllers //Add the new series to the Database _seriesProvider.AddSeries( - path.Replace('|', Path.DirectorySeparatorChar).Replace('^', Path.VolumeSeparatorChar), seriesId, + path.Replace('|', Path.DirectorySeparatorChar).Replace('^', Path.VolumeSeparatorChar).Replace('`', '\''), seriesId, qualityProfileId); ScanNewSeries(); return new JsonResult { Data = "ok" }; diff --git a/NzbDrone.Web/NzbDrone.Web.Publish.xml b/NzbDrone.Web/NzbDrone.Web.Publish.xml index 98bc90f4a..6ee397e25 100644 --- a/NzbDrone.Web/NzbDrone.Web.Publish.xml +++ b/NzbDrone.Web/NzbDrone.Web.Publish.xml @@ -64,7 +64,7 @@ - + @@ -85,7 +85,7 @@ - + @@ -107,9 +107,11 @@ + + @@ -120,10 +122,8 @@ - - @@ -136,7 +136,7 @@ - + @@ -163,31 +163,27 @@ - + - - - - + - - + @@ -197,67 +193,67 @@ + + + - + + - + - + - - - + - + - - @@ -270,21 +266,19 @@ + - - - + - @@ -301,11 +295,13 @@ + - + + @@ -313,41 +309,39 @@ + - - + - - + - + - - - + + - + + + - - @@ -357,30 +351,33 @@ + + + + - + - + - @@ -388,92 +385,95 @@ - - + + - + + - - + + - + - + - - - - - + + + + - - + + - - + + + + + + + - + - - @@ -481,88 +481,86 @@ - + - + - + + - - + + + - + - - - + - + - - + - + + - + - + - + - - + - + - + - + - - + - + @@ -574,13 +572,13 @@ - + - + - + @@ -588,116 +586,120 @@ - + - + - + - + - + - - + + + + - - - + + + - + - - + - + - + - + - - - + + + - - + + + - - + + + + + - + + + - + - + - + - - - + + - + - - - + + - @@ -711,26 +713,27 @@ - + + - + - + + - @@ -741,27 +744,30 @@ - + + - + - + + - - + + + @@ -774,32 +780,32 @@ - + - - - - + + - + + + - + @@ -808,54 +814,49 @@ - - - + - + - + - + - - - + - + - + - - + - + + - - + - + @@ -868,106 +869,103 @@ + - - - + - + + + - - + + - - + - + - - - + - + - + - - + + - + + - - - - - + + + - + - - - + - - + + + + - + - + @@ -976,7 +974,6 @@ - @@ -986,53 +983,55 @@ - + - + - - - + + - + - - + + + - + - + - - + - + + - - + + + - + + - + - + @@ -1046,7 +1045,7 @@ - + @@ -1056,16 +1055,17 @@ - + - + + - + @@ -1074,9 +1074,9 @@ - + - + @@ -1087,22 +1087,22 @@ - + - + - + - - - + + + - + @@ -1113,6 +1113,7 @@ + @@ -1120,18 +1121,18 @@ - + - - - - + + + + - - - - - + + + + + diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index a5b6f7678..07fadb75b 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -633,7 +633,7 @@ - + Designer From 5a4bedc34d334da341f380fea5f402999306325d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Apr 2011 19:44:01 -0700 Subject: [PATCH 6/6] Added an icon to the NzbDrone project (and set as the icon for that compiled application). --- NzbDrone.Web/NzbDrone.Web.Publish.xml | 5 +++-- NzbDrone.Web/NzbDrone.Web.csproj | 1 + NzbDrone/NzbDrone.csproj | 4 ++++ NzbDrone/NzbDrone.ico | Bin 0 -> 77302 bytes 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 NzbDrone/NzbDrone.ico diff --git a/NzbDrone.Web/NzbDrone.Web.Publish.xml b/NzbDrone.Web/NzbDrone.Web.Publish.xml index 6ee397e25..df8271ea6 100644 --- a/NzbDrone.Web/NzbDrone.Web.Publish.xml +++ b/NzbDrone.Web/NzbDrone.Web.Publish.xml @@ -849,7 +849,7 @@ - + @@ -905,7 +905,7 @@ - + @@ -931,6 +931,7 @@ + diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 07fadb75b..85cc4278e 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -590,6 +590,7 @@ + diff --git a/NzbDrone/NzbDrone.csproj b/NzbDrone/NzbDrone.csproj index e3b4625cf..983bd4931 100644 --- a/NzbDrone/NzbDrone.csproj +++ b/NzbDrone/NzbDrone.csproj @@ -49,6 +49,9 @@ prompt 4 + + NzbDrone.ico + True @@ -88,6 +91,7 @@ + diff --git a/NzbDrone/NzbDrone.ico b/NzbDrone/NzbDrone.ico new file mode 100644 index 0000000000000000000000000000000000000000..1d6e4d3f4004b4dba634c2cd8b6b5d162c2378dd GIT binary patch literal 77302 zcmeI5X>?uJb>Be{07(qQ^yU!&CyA3NYO*G4uv#~oELkEkPo(79vLbnk)2{l1`?X)X z`ps_Rrd8^AO6%Cs(sEXlx=CXB@V4h1^^XlI&)A(nHn(fGVqy1*M(S~<#v|P4e*-X~*xdd~_+kd>Z z#f)=iN12DPsvg5q-Y;SNv)p%vvFJE5y53$HSZgCYyRDSYS&pMSpRhzOX_-{k(%CGu z)Z#dZmM(I%5TnOgd|u^SOwYhA#~I_qAv2 zM~CZeXjixOr1OkFZOJU-<sUUSSR2@W}EX)AMh?AF#5TYvH3EWA29yxyjvgI^7- zv%%e+zV2H4(;XS+p+n~^n_N0e`q$W}ksn9K*4gX*P4)?wGp8T-iF48%mQ605<@o1V z_oIyc&C#_sx~tRjTJy@9o;c20e{1~9CYR1&{MB+sH1j(0eH5B0rgD~tFGbt6##-z1 zWs^&1F#c*eBYGFj=rWK~~lpXRXhdO)j0`_-86|W^h-R^&l5TGg^1a#Vqo% z);Mc@zHD--#`tT=nRKDcQmlP8RX|3jnTL*)^Fe|+Wss3MPzIown}W$#Q8%^6qr{qUQKdEoV}UEyq3c9I0H&kM3MFkIPC) zE9KBv%%i~AQ;aLAIclt6b!~6Tikw?y9y#Wpl8zRZ$s%$!?Q=MlT$(wZy;NiTHRX(W zR%@Q`wjB3OG1gMDVC6!_e*cy>yRI)`dB&GyZpjSeWWJh%c>Q19*kTXw1wSw;fthg3 z<)BB_KFc-I%u{k{>)F^#HO5~{&SbJlA6qt6v?BM+F^)~({-ql`T_@alNeAnS9%hc3 zN0uWkycpMi_+Y2KHq?N9*J&N#luswEz`QgE;UIg%Wm%QIbYvL2cJws%Mvd{;lr!*Z zl6BI$XPL{6a@v0XwpJ6JPLI{w4VzMo9lJ-opz|2F#?{4|f90k&Y|kcpb+FMsy%+h* z=LP1UgpNc@;s?p4V#QvPt?}=$y^rEQ)U@|bG5#5B^_p^qdvDLI*Ty3`uUj+7lN+qkcow13Om%;0lP zRcuiG{wA$IW5{q`WW#Zd%KNX}ywT=F3-}500bW9vOz!Biv}BohK+ws+OSWn4gnxHM)}$Hx-V!u(OS?_8=As8bn8VqOe~RD94|{!}(LQ_SM&udv z$e1&dOWZFBZztd}%|*0UlYVNfzi2nhShbdU$rF@t}E z!?E!O=Z8=2?Y1K8R%Govpdr~-k6h7l*6T0&&oFk;PA}{J*saYrHM+)*LbubRd1z+N z>8H`Ax%b(QUow3L9EF4CB7P80zc$cdpJu$0OIp7Ia_Q0c8GoQHjX}P(T@ ze3{sRWa?q=5zamF^=!v~;_t)XQ_#}u=!dcGNlWL2f6^Yl;xznQCI2;snacPjBc+@E z068;-oSA_}X3o?2=Z0GB#s2m7JMe8Ubnpl?73O!+>xtuM4o8L?tOr}{v0FOq5OPM? zy01PC%{ZN(jKgxRzvRJDblhQN!z=iwzs=fz>Z;SopV6lI{DtUG$28;r5_0C~$OiZo z8OgO|ADoZ%SA5aH`WP~83VY-=;xhmFww9XfhCV!L{L)9Fca1mbr#W=KfAuxb=zSIcp3(U=<`R#8k@&~!?>rsTPfS0t{5f;~cPVRi+;3y~ zv-0vs7%b_)26Q{HVeZPF^c-=MxpXGyuf(b6GMVh$)?#|@i4V78E2>^+srOs>eRVBR z{Qmr}fa%@P@@q7&%EntoYKQ!!1&G!WB3Oan0u#554o zKuiNM4a77M(?CoEF%85t5Ys?R12GN6G!WB3Oan0u#554oKuiNM4a77M)4==DfRS^p zKIW(w)uB2v9mm+?`QBKwy)@cs&yRN7>th@3z0p=`N;jOGtJH66v-j$PTQ#Ux3Tpc&Ay*tW?~(CTbjUny*)FUu>W*d-afmf&Yrlt+nyOq z+gt3F^7A=whCRSG8U4?3o*^qt2e|O+XXEU)Y2D zF+ZZYI{u=882^={fAJ#wYHR|2hxcdb5u*JVa}yEoYcHCOHX{pog%(~Kp>NBb8M}XT zy3H1G)DZ3AhuPk+0Nqb-u>>=9T z%ASD+-jq#&91;J!ZBfw!P6NmR=>pMPjQ`56f%LQNzZvaY7N3gm(esDl-!~^)?fJ$teylp>+DY09`=L|Vh?=tBN_YUMB3iQCz$1M z8(=tkbvb}8h;pV1J0BbF9bW%#xWoS7-kjYFrdMQJ*sq** z>^tH49Jm+QOPtRntW>05L%vAg4QPNp*>@M$+Bfb@+CPjW?a=T>w;kr~Kxj;|Cdh=C z|5uO>B$J&lTU_pI&-fu^w)kGyfBW7PSR(Vw9q4=dr+|Ap-(#tKDe5;tpN}H@ky9CZ z63`n(GC}<=_96!c%J>D61H&1o0m%XB0@(wu6LfEm82@vNzwCP7e=S|hdmYDo53{hq z<{Jll$!I>8-~JwU`*R1A_SJhz_R&(EU6tKvo9TI=-h0A7OTQxZ8cAvoK0PmVXg|LC zzNlxDjvnlTUHJ~X3mW*=T^WxL{DxjFvIlHZef<{V10G+B?SOO62i_+DA3wYXTYq|- z-Wl@4`EFYJeggmgj!ye%PlH_!hFj?U;@G3()mzMIpn`uQ;IE!Te5amc>1@vFBa_Ry zy)cN)80>*}#-Xzl;sY`NpIiQS8~Y@_kK};*4Njxy54*2U|0V4Fuicro`+MqbZ?@g- z`X2aR{g^_(wG(B4cwfE#O7a6ZlGp@^eAJIfa^SLTx7!0AAHXj-DLxSM{yF7+@w;Tc z{BhAjpa;E9(GNqu_*-M}J+b`n;@|J!gT{QAUU9OvPt?n6;h{+5199*IJfk_+T}~o^#Oam1|2YkuczG2GsJEmyFG9F zde_?JC3>b}(DxhaI4EtK$Ri7eI6Gj?~B-#yVm7_@biw=ji}_ zKRZc}IsE-+@y#E*tLV1g)wy=J^>PV%%+Z&uSfsZdJ@V3Et;2aT}V z5RK@){|?(Ajs6eufkJ}#K%vv~1>d+Mn(Z%DLdjfwOXNrue&Jd-(T? z=}u2J*&*z`x9L~*>_i^_z6U<6v%TbUdg!I6-iATXyWJLW7B5%5pO*ub&-C4?zIT}c z-2^)EzK4nrpcC9Lz_+|xdBaM4Ag&)+oE_{s-E%3#)XC*}E=Re1^0hVs{;J==zZdVn zd!Wtr{nu|#+C9CIoiFT9#PnSKE$qX!Wfxoq4Ga?>i0cOyhrR1H<=2$IS59p#>f5SX z4b^PSDz=M!n5EbA95KF^$LV`{M*)3bZ&&7t=chZI?*k_1`&Dv4F{ZeFVDb2i-yQ!0 zA%_dEgTHck%HNAdj-Ur#9!}WfwQtE-$s?oAWFJ?EGRDTMystI6O|H>zDhy5Fd!^2NuWw zoQ6XOFRUl7+1oSrTs{G%GZS!}(d)aELGfB2wcJ5Ba~NAU0O&e{FFYpBy}bGti1 zy;e&8eWB#fBREs6&dGW5590cP#m7H9e=q#$V-5bw<0*eHz8Ci2k$;bU9sK(uKDc7~ z-FjYx$MzQDd*=k-_tPcdulPV*KTw;`-!FeJ|6aDe=kL{vpW6NB52Wp@_Y&75#&Tt@ z)wY0j56^p0TwXXUXBQ6l&)*NHbM?LAO2mlb`hnW`huCGv*@V{+%a^Yw|K4qYi8gy_ zJZb;s_HNJNUQTUxl)vX$A9}73ww~v2h}F;If3C1SgX?;1QM3ph#PtKGrUBu6a@|f< z{vJE;=t#ZGfY;cE^R+u7eJ{T6P4a9PJ?BMyU$OK3879i%fX}JocIR6UIQEPst{*rx z{!wiAbou)xdy5*L7e*rgUO8Ol?-g4qQIqNG8hkwITWUGHo`cV-WA^78_v-s8?i|+- zoErc4&EFH>eP)8^1CqbLkJ=6S_gQjovh%Y!d_2}xGCz8D5$~0o5Aq<;1?N=balYRR zf6pD`561Na$J4=l-j?eemuo=J%3MZNB+H@LwcN@Cw{LS zp6gp-zL)(G^2ef!>M_YK@UgGb`hhdc-zR-<#-0+fo%BX4!}q0ZpQRJFmbHzW_V013sSKd^|o5t|@#uR4XbPIPRK! z9_q{U>@Uc$zo5we0_`m*kVE$UhWNJMtke&@L;d0@_mrMye?b&GtHEX2r@5aJu4e|BTnje&M;XqG=A*CyEC8wcoJPe?W5J#Qg>H`_8n+ zzRnTPUoia#mXg2EP@@kYX)T4X^Cg&zUyH*S24v7l!Yc#j zWiZPmc^VmyinCpgp1A3L5(QidN3pK_Ot%UpPn#a`)2VWRyyyy~+c50rx|Baa;m@ZL$SeqXA~X(I_< zx^{HUXdi&LccD?Q?+d`(Aq~ z`TI<-%X;yObic0&Yc3re$<^cas@nk-?A`7HC+*V`FKI7tZ)&4`sHfF#-_~v0`A)i4 z{&>k{J3b`W75+Nk&JK?}e+dcl>$Jx;ys5U+?)m*lzBV!9T*v&*!@&Jk*;{ z*md}j4_&&}{?EiF`>VkoyD_^C3>U8JwmR2zx{+>%H=Q4OFS>HMz;%OM(cgPBopwJp z#$O%0)c$mGhkfRfI{TpZk{7_4{vo*n*9XUlmnFlZ>x!@leSg-ra1MXBup4310x8Q@rdp9b*c*!)*uTO%F1uk3)8a{8p#q zpbHp>?=Pst2h@K+@qyFzAMpK#7gGNL;lJekeWc@qTz9^ZjC8qxZI#5%O5`06t#cCF zPHQFkyCs>j>od*v=*|}V>wSIp(oi=&-sG@94K!NKkK7cNgPa->^ z%y*&z$pMck$VROAluj$MWubM^rq_~TuV{aX=q21fpdZ1_zZd+s55Wf(%(itiC2$jIQ1je#EdvlUoj2Sr~T_AhFZNh5&13mJp z@d$g5fw2am|A6|CeDki9JvRvrsGp_wLDSRf*pTX`PtmjVeEI;y{9ZFH+Py}6YHW=iI#6#v znoQeu#rkOfFY6j|^Nzptitu;2y&$uL4d^mLxG=7r*-jhEi~l#(x>jDC#@4>sA=rS0r$_7TFvrgh7VU;YqvsEW zxz`Qx>O5c3*RHcGvPbmi@|gSS{!Wu%bZM^B`oaJEgWx~jPTv{sgWP=&yZptWW@xWq zpTDBjuFo~urO=ed*puzCEWV-SfbJ2lQu6m9o*(!`uhmC)n%qe*e1Wai3m!N0 zw%P;q?R{#j&wf4LW$z8GF?*1Bhu)gg*fXz= zyX-^`@uzUQl=`!N`bT|#c(c7S(hm0QN$N-L(g$XmeJihzwb_&X1^X8}8|_+r&&?(D zx8j5H4~ad=KG40TU*_Wjfxo%G?iuJH)DMUTJf;ZtVShoHy{voCGam{43F%+_-bjn@ zkvtQe&eb{ZGKQt(?*nhT?aq~f1GNtUUJCdp-84iu^z3h*HJ39J>NgkdS(|2G+Ur9b?di!a_HlgAYqCwm^dp}@V^$7I_=?6ud_Z!| z`MWYlrw^TjEOHtEe~nLTBb%^*kD12T6fKAb2C)bJw*YgP{BL8gSAcAH`s=DK*$9cCWFg#(VA8?EOA`AACsN_%ZlV zHDUIiVgx!v8N1 zY_(q@?`7v4qc^bk8&Z4@IWY4;i~ZvM2K(8>X8XdfCcCk)-g-;Xz1%NA2Y7sd`+1y$ zIDp4AxTo8_k_Q|?4!HfpxLgLhU(m(%pb2sgWo)0T3SD+@VU2y8KE}Ts%lO{&bH(4) z*A4jVRd&DXy8eDBX(Q01*XO6&-Bv5*ddSBRBlrFH3;vDhJc_qOdM%n~#2=17>!a_3 zeiROyQ#rc?-T#5~I(uZ#I{WjHqWyZ5evInvPOY%^2y5SfVq`Py8<72{-Vi?<$=l88 zHP{YOOi^;g?QgfMbpMJkz&$1FMFTOULqwU>ELfbO9^X|j2|=R7oU zOmYXBkR15&K+!&Pc?)ra2Jq_k9G~W?7*Uv`uCK#o8#LhYChi~Pfb&CzHbQ(LCmpC5 z65~}&^BVlpPj0HS9}Z-EJ*sg!>-XgEysu&4YtJpfOO?Of)@0v(ILGU^@%g0tf7+k4 zJ9BHjZYRiUkFBt#T2GJR$i~uq_$9Bed3#l?R%nzP&Tjq^OEwV$^sG&b;e zJe($@wGVvfaRTuw-|fk5oY()aj&``55e;~can{G{t8g;ZJ{e@69fo??AKf57vHB=^~d; zXHEw|3sxC_~; zLu)5&gFmDBNx#a!^K+QLWW464b$1(=*S?bUA~hBGJKLa>YjQ32@Saxt!C={bxgXs- zDgV3GX2kcR17aWAFSg?NvySRR=lho#lllQYKip|g6Ce2JJL>EMtWTM_`+hZOJx@Qm zvi7k-1L67)1Ks$>`)HXp+x!#+K`P%yjyvxd!Wnj?BC?iu?bi$>U9bH zAMn?hU5_z`Aj3TG=6bFQf959|(7En&iw39xNGp#H&1@?X>+9~Y>$1)E$YpKzy?yB2 z(WFhQ7l`7W;4Zl@yGyw1867K$zxY9YiPU#k&m1_aTsZc}k%<+&?Rv0OLsy>wkTR0ky)AbQ!(exI94&GyjF277Y2Y`+;x*}MDj zI}Uc>d%Ge4Jh;|-6}>^s=%<4j`{FM01;htr z$EWB^sMv1QPfGeG;(xaZ;g=A9SkRYI9f|a&Xh1P$*(LkH|B3y*u9p_Y_sb;zg}-Ec z(C5P4Z5q9Dg!#Gsr@x&>A|F}rHBZIKcR~XhUi5;xyc^BWUXCG zd|+EC;cFm!z->bKLp&n%|FUAl7kr?7Dvd_MA*ef(f7 zOogq}g>-=A8*)u@Uv{nAvX%Mf@>#d_l*jx0WgGF`koo)R0Wd)?DArLi7RBAvYg6(+ z=vwvRRvtuiUorcSd%I1__@;-54Iq~khd4aSvx3H;1N@Yk1D*EVy<36MgnCiC^46 zy>oAobpT8E3s|q{K@O~k;9jdcYOi>es_!gSM>dx>;v>?xII8T z_W-hV65nbVd!M|Qe9tMxyygG-XB8c=g8U!oQsa|Ol1(y0O#Co5!Mpeghly1jo80Jf z;AcZw``qQtb~UkS?P>St&s1b$u=QPLiYCY#DuxhfKs3w!~Y3#wz*H~SqVbAwsvjYOo&?V|fu< z@2!23`z`p>^^W~)MGl1L`v`x<9>n)6E&qf4CmT?Hl*a=qF)8(|dJo-o7q9M+>jTbH-=Oe2`1D?OduPZq{Q)5d_Mv*$*&CLCpbhCYC_Xhh5{QGD6 zTX@a}JVXwEYLK<02gsD<={)|(*NVOE_^bAWV8|`Owk+IX#k&K z<{LvDh$Tw7cK=lh+7taeL(+l`VNCZ-#$^Y!{6NyI*uIKR=^AILvVq{(S*Dkl(wtNIai7`6GLpJzh5N-ydvs z?5F7QIV=C(<2mSmXdtSEj{GgzTv2~W;=jmuvy) zvSSa_+acm+iVrA8^w}M2?P}If^#iIMQoUk9^)BgNWI)ur+~We+P3|{qJ*kJ-K_2uz z@)8#W{<-y$%!f9Gzw0UFl(6@D9%R1PIO6MWVV_P}TcG zcX46&?3*sRKDJlS80>Ibla`+AU%_=T!-(z7W;eW7B2@}Xo;34hfk z+#~z{0+9d0e?Ddo{%+rce~AA(T_D@GV#{7jJYTV$zapRdto(cGsoam_dAs6$<@ z>!Vla|CQ7KE`vmW96>KdIsqR=ehNp34=6vVezubTiWAQ%UPydv4x2~y1OJ;C(HHQ8 zZo)3wQdF%;tGDgO<;1@)6tvY$no4QRSdgeFKfNB<}9%v?x z+iE|?9{4=*fe)yD0GnBTP$K-Jc)4tA>4xRRKUzb^A{wqbeBCR5YkecSR*j|lGn0G8 zj{O_(zdqmKb+)QqRtzZZbszXC#k_4&y&m@MqvY>@LjL|Y9bFT{Cz(%9{E0>zo%wK@p0XMevKCK-p934@xN;NT-4YrwezxrkcWC! z^(*XMczR-+eSGseyOBJf>L3&YNDv=zI>7$hp6&4Go_u?s;=fDF|1Ac8#W%(OlK&qf zr{Q~7;P(WzJc|8n<@NgP27B}}^7qukJWKxmi1PObiQ}_}!sziSAMYr#WL4u2{kT5E z-|-%()V9sy7rr`>u%C`^x8K>`V9FhDqV_dU%}0@X(o!O4SL09Ji~s+f{-wu%mV&?P ze?FXV_I)d=;VJhN*n{0gz217y<^0+GW$LDr*gN=i_&ll^oD=@o58_+5hZey%)$-z^ z=6~VOv&0o2uwm*Nsc|y;9?y=p+Y5so)b~aE3uI&MD1tw6({0qlUf#vN)chLz&OXI| zm&X6qYgy~P^uMn&n4M_beXlS9O8Rn|JMh%*emSA^*kOq5U<@p*Sq}3MxRywzEZDQ zi{{Ss^NSsS$$$5SN7`(9Ao7c5h$Bw%`8)94>%_Z$esHsW{E{Z}hU;uQeQ;F&@e%eV z{z?Dl^N4?>s{{Wl2c!J&EyYIPmvcS!dLe%=?2k~3t$E1TRW2vwN#)-rIL~o5 z{vve2#f-mb-1n?t3m?MvQ@q;_G*VAiN1Zuq_W-`u1H=cYfqIJl1;4v%Eq=iUyPDjg z^8bIluLS-}tp7NJHIL-~$@u?tpxf^1p+`IZs`B@Let)maeAn;9!ln)?j>j{4EBSlv zn{kLUc`$oC1Ibwan zTKFq2R?F@@Q@J0`yV&_Z#51%$o;OrnR63G%Qm>zB=-}{pgQ+*%bL@G0dVI6}o1Jy` z1@?b@@1tq)vPb`TsBYNBJVw4H>Cim&dv#njNRYi-Wx^CjT#d*D=yuf34?_wwhJ=TOaVl(Vaf-wJn*=yT>N8qmEfpD*_H zqQ;-Oi!bK!*P4L6{*LlVtS!&LoDn}!M;7Hoh@G(BN5@*&hZ^M@7Q1%-yZ6E0$D;9Q ztg_!Y!u?!UDR)c$epWpgRG*K3@6Yc=M)+@}FDh6&=Io<2=H%a1t{bkmnAeLQf7Zus z;tCzOeZ*(-uXLyu$|lH*J70kTu>#c-D3<1S*%J9DqO;TRVP#yW!p3t1?!2QJ6s{6T(s<;leo^qSgQ<4u(1Ne5T3Y}s{NAw_ z{v1yGRo6V*`CRn)gR%S}Uo(7wg|!i{^EtT^V?Ws}vQ>K@R2QRqQq_{E=KO5e>!kC~ z0{`gw>6bi?YMU4G_tI79EbY;if3G=6{)_*44SXMJd1L%5I9KexfPYvQ?Q`{< z8TPblha?jeEAssYsv%ec?<~h}HO}hexNAywRK{0r>uHYRH{tumzFy4yuQ>;ttLI<+ z*>QRJsK0q*zsS@*e%E0WBgZM2P_AUi@ipSe~iET9K;(!?Bsmbe=e48;M1& literal 0 HcmV?d00001