diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs index c00f22c39..5c90daa12 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs @@ -14,7 +14,6 @@ namespace NzbDrone.Core.Test.ProviderTests // ReSharper disable InconsistentNaming public class DiskScanProviderTest : TestBase { - [Test] public void scan_series_should_update_last_scan_date() { @@ -38,7 +37,6 @@ namespace NzbDrone.Core.Test.ProviderTests } - [Test] public void cleanup_should_skip_existing_files() { @@ -89,7 +87,6 @@ namespace NzbDrone.Core.Test.ProviderTests } - [Test] public void cleanup_should_delete_none_existing_files_remove_links_to_episodes() { @@ -131,7 +128,34 @@ namespace NzbDrone.Core.Test.ProviderTests } + [Test] + public void scan_series_should_log_warning_if_path_doesnt_exist_on_disk() + { + //Setup + var mocker = new AutoMoqer(MockBehavior.Strict); + + var series = Builder.CreateNew() + .With(s => s.Path = @"C:\Test\TV\SeriesName\") + .Build(); + + mocker.GetMock() + .Setup(c => c.DeleteOrphaned()) + .Returns(0); + + mocker.GetMock() + .Setup(c => c.RepairLinks()) + .Returns(0); + mocker.GetMock() + .Setup(c => c.FolderExists(series.Path)) + .Returns(false); + //Act + mocker.Resolve().Scan(series, series.Path); + + //Assert + mocker.VerifyAllMocks(); + ExceptionVerification.ExcpectedWarns(1); + } } } diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index 070d2ad9a..441fa747a 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -58,6 +58,12 @@ namespace NzbDrone.Core.Providers _mediaFileProvider.DeleteOrphaned(); _mediaFileProvider.RepairLinks(); + if (!_diskProvider.FolderExists(path)) + { + Logger. Warn("Series folder doesn't exist: {0}", path); + return new List(); + } + if (_episodeProvider.GetEpisodeBySeries(series.SeriesId).Count == 0) { Logger.Debug("Series {0} has no episodes. skipping", series.Title); diff --git a/NzbDrone.Core/Providers/PostDownloadProvider.cs b/NzbDrone.Core/Providers/PostDownloadProvider.cs index b80771930..3d0709c59 100644 --- a/NzbDrone.Core/Providers/PostDownloadProvider.cs +++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs @@ -83,7 +83,7 @@ namespace NzbDrone.Core.Providers continue; } - if (folderStatus != PostDownloadStatusType.Unknown) + if (folderStatus != PostDownloadStatusType.NoError) { //Retry processing on the download ReProcessDownload(new PostDownloadInfoModel{ Name = subfolderInfo.FullName, Status = folderStatus }); diff --git a/NzbDrone.Web/Controllers/CommandController.cs b/NzbDrone.Web/Controllers/CommandController.cs index 520609b21..e401f01a4 100644 --- a/NzbDrone.Web/Controllers/CommandController.cs +++ b/NzbDrone.Web/Controllers/CommandController.cs @@ -26,6 +26,12 @@ namespace NzbDrone.Web.Controllers return new JsonResult { Data = "ok", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } + public JsonResult BacklogSearch() + { + _jobProvider.QueueJob(typeof(BacklogSearchJob)); + return new JsonResult { Data = "ok", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; + } + public JsonResult SyncEpisodesOnDisk(int seriesId) { //Syncs the episodes on disk for the specified series diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 01ceb302c..810f1e238 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -752,9 +752,6 @@ - - - diff --git a/NzbDrone.Web/Views/Missing/Index.cshtml b/NzbDrone.Web/Views/Missing/Index.cshtml index 4abc3f2bd..dc7925543 100644 --- a/NzbDrone.Web/Views/Missing/Index.cshtml +++ b/NzbDrone.Web/Views/Missing/Index.cshtml @@ -7,6 +7,13 @@ Missing +@section ActionMenu{ + +} + @section MainContent{ @{Html.Telerik().Grid().Name("missing") .TableHtmlAttributes(new { @class = "Grid" }) diff --git a/NzbDrone.Web/Views/Series/SingleSeason.cshtml b/NzbDrone.Web/Views/Series/SingleSeason.cshtml deleted file mode 100644 index a40c08683..000000000 --- a/NzbDrone.Web/Views/Series/SingleSeason.cshtml +++ /dev/null @@ -1,18 +0,0 @@ -@using NzbDrone.Web.Helpers; -@using NzbDrone.Web.Models; -@model SeasonEditModel - -@using (Html.BeginCollectionItem("SeasonEditor")) -{ - var idClean = ViewData.TemplateInfo.HtmlFieldPrefix.Replace('[', '_').Replace(']', '_'); - -
- - @Html.DisplayFor(m => m.SeasonString) - @Html.CheckBoxFor(m => m.Monitored, new { @class = "chkbox" }) - - @Html.HiddenFor(m => m.SeriesId) - @Html.HiddenFor(m => m.SeasonNumber) - @Html.Hidden(idClean, new { @class = "cleanId", }) -
-} \ No newline at end of file