From 2a4fd2bbdee1c62686e9f178e8e51e5b850bbceb Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 14 Apr 2015 07:06:08 -0700 Subject: [PATCH] Fixed: Better error messaging when import fails due to inaccessible path --- .../DownloadedEpisodesImportServiceFixture.cs | 27 ++++++++++++++++++- .../DownloadedEpisodesImportService.cs | 16 +++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs index 279b83ab8..810f3300e 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs @@ -202,6 +202,9 @@ namespace NzbDrone.Core.Test.MediaFiles Mocker.GetMock().Setup(c => c.FolderExists(It.IsAny())) .Returns(false); + Mocker.GetMock().Setup(c => c.FileExists(It.IsAny())) + .Returns(true); + var fileName = @"C:\folder\file.mkv".AsOsAgnostic(); var result = Subject.ProcessPath(fileName); @@ -275,7 +278,7 @@ namespace NzbDrone.Core.Test.MediaFiles imported.Add(new ImportDecision(localEpisode)); - var result = Subject.ProcessPath(fileName); + Subject.ProcessPath(fileName); Mocker.GetMock() .Verify(s => s.GetImportDecisions(It.IsAny>(), It.IsAny(), It.Is(v => v.AbsoluteEpisodeNumbers.First() == 9), true), Times.Once()); @@ -291,6 +294,9 @@ namespace NzbDrone.Core.Test.MediaFiles Mocker.GetMock().Setup(c => c.FolderExists(fileName)) .Returns(false); + Mocker.GetMock().Setup(c => c.FileExists(fileName)) + .Returns(true); + var localEpisode = new LocalEpisode(); var imported = new List(); @@ -302,6 +308,25 @@ namespace NzbDrone.Core.Test.MediaFiles .Verify(s => s.GetImportDecisions(It.IsAny>(), It.IsAny(), null, true), Times.Once()); } + [Test] + public void should_not_process_if_file_and_folder_do_not_exist() + { + var folderName = @"C:\media\ba09030e-1234-1234-1234-123456789abc\[HorribleSubs] Maria the Virgin Witch - 09 [720p]".AsOsAgnostic(); + + Mocker.GetMock().Setup(c => c.FolderExists(folderName)) + .Returns(false); + + Mocker.GetMock().Setup(c => c.FileExists(folderName)) + .Returns(false); + + Subject.ProcessPath(folderName).Should().BeEmpty(); + + Mocker.GetMock() + .Verify(v => v.GetSeries(It.IsAny()), Times.Never()); + + ExceptionVerification.ExpectedErrors(1); + } + private void VerifyNoImport() { Mocker.GetMock().Verify(c => c.Import(It.IsAny>(), true, null), diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs index ee81d927a..b41c380e8 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs @@ -82,14 +82,20 @@ namespace NzbDrone.Core.MediaFiles return ProcessFolder(directoryInfo, series, downloadClientItem); } - var fileInfo = new FileInfo(path); - - if (series == null) + if (_diskProvider.FileExists(path)) { - return ProcessFile(fileInfo, downloadClientItem); + var fileInfo = new FileInfo(path); + + if (series == null) + { + return ProcessFile(fileInfo, downloadClientItem); + } + + return ProcessFile(fileInfo, series, downloadClientItem); } - return ProcessFile(fileInfo, series, downloadClientItem); + _logger.Error("Import failed, path does not exist or is not accessible by Sonarr: {0}", path); + return new List(); } private List ProcessFolder(DirectoryInfo directoryInfo, DownloadClientItem downloadClientItem = null)