diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs index 89f00416c..279b83ab8 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs @@ -255,6 +255,53 @@ namespace NzbDrone.Core.Test.MediaFiles ExceptionVerification.ExpectedWarns(1); } + [Test] + public void should_use_folder_if_folder_import() + { + GivenValidSeries(); + + var folderName = @"C:\media\ba09030e-1234-1234-1234-123456789abc\[HorribleSubs] Maria the Virgin Witch - 09 [720p]".AsOsAgnostic(); + var fileName = @"C:\media\ba09030e-1234-1234-1234-123456789abc\[HorribleSubs] Maria the Virgin Witch - 09 [720p]\[HorribleSubs] Maria the Virgin Witch - 09 [720p].mkv".AsOsAgnostic(); + + Mocker.GetMock().Setup(c => c.FolderExists(folderName)) + .Returns(true); + + Mocker.GetMock().Setup(c => c.GetFiles(folderName, SearchOption.TopDirectoryOnly)) + .Returns(new[] { fileName }); + + var localEpisode = new LocalEpisode(); + + var imported = new List(); + imported.Add(new ImportDecision(localEpisode)); + + + var result = Subject.ProcessPath(fileName); + + Mocker.GetMock() + .Verify(s => s.GetImportDecisions(It.IsAny>(), It.IsAny(), It.Is(v => v.AbsoluteEpisodeNumbers.First() == 9), true), Times.Once()); + } + + [Test] + public void should_not_use_folder_if_file_import() + { + GivenValidSeries(); + + var fileName = @"C:\media\ba09030e-1234-1234-1234-123456789abc\Torrents\[HorribleSubs] Maria the Virgin Witch - 09 [720p].mkv".AsOsAgnostic(); + + Mocker.GetMock().Setup(c => c.FolderExists(fileName)) + .Returns(false); + + var localEpisode = new LocalEpisode(); + + var imported = new List(); + imported.Add(new ImportDecision(localEpisode)); + + var result = Subject.ProcessPath(fileName); + + Mocker.GetMock() + .Verify(s => s.GetImportDecisions(It.IsAny>(), It.IsAny(), null, true), Times.Once()); + } + 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 73de1ad9e..ee81d927a 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs @@ -72,20 +72,24 @@ namespace NzbDrone.Core.MediaFiles { if (_diskProvider.FolderExists(path)) { + var directoryInfo = new DirectoryInfo(path); + if (series == null) { - return ProcessFolder(new DirectoryInfo(path), downloadClientItem); + return ProcessFolder(directoryInfo, downloadClientItem); } - return ProcessFolder(new DirectoryInfo(path), series, downloadClientItem); + return ProcessFolder(directoryInfo, series, downloadClientItem); } + var fileInfo = new FileInfo(path); + if (series == null) { - return ProcessFile(new FileInfo(path), downloadClientItem); + return ProcessFile(fileInfo, downloadClientItem); } - return ProcessFile(new FileInfo(path), series, downloadClientItem); + return ProcessFile(fileInfo, series, downloadClientItem); } private List ProcessFolder(DirectoryInfo directoryInfo, DownloadClientItem downloadClientItem = null) @@ -120,7 +124,7 @@ namespace NzbDrone.Core.MediaFiles if (folderInfo != null) { - _logger.Debug("{0} folder quality: {1}", cleanedUpName, folderInfo.Quality); + _logger.Debug("{0} folder quality: {1}", cleanedUpName, folderInfo.Quality); } var videoFiles = _diskScanService.GetVideoFiles(directoryInfo.FullName); @@ -181,8 +185,7 @@ namespace NzbDrone.Core.MediaFiles } } - var folderInfo = Parser.Parser.ParseTitle(fileInfo.DirectoryName); - var decisions = _importDecisionMaker.GetImportDecisions(new List() { fileInfo.FullName }, series, folderInfo, true); + var decisions = _importDecisionMaker.GetImportDecisions(new List() { fileInfo.FullName }, series, null, true); return _importApprovedEpisodes.Import(decisions, true, downloadClientItem); }