diff --git a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs index ea1a07f8d..28d5b5f76 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs @@ -1,12 +1,17 @@ using System; +using System.Collections; +using System.Collections.Generic; using System.IO; +using System.Linq; using FizzWare.NBuilder; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.Commands; +using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.Messaging.Commands; +using NzbDrone.Core.Qualities; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; using NzbDrone.Test.Common; @@ -28,6 +33,22 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests Mocker.GetMock() .Setup(s => s.GetParentFolder(It.IsAny())) .Returns((String path) => Directory.GetParent(path).FullName); + + + } + + private void GivenParentFolderExists() + { + Mocker.GetMock() + .Setup(s => s.FolderExists(It.IsAny())) + .Returns(true); + } + + private void GivenFiles(IEnumerable files) + { + Mocker.GetMock() + .Setup(s => s.GetFiles(It.IsAny(), SearchOption.AllDirectories)) + .Returns(files.ToArray()); } [Test] @@ -40,5 +61,28 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests Mocker.GetMock() .Verify(v => v.PublishCommand(It.IsAny()), Times.Never()); } + + [Test] + public void should_not_scan_extras_folder() + { + GivenParentFolderExists(); + GivenFiles(new List + { + Path.Combine(_series.Path, "EXTRAS", "file1.mkv").AsOsAgnostic(), + Path.Combine(_series.Path, "Extras", "file2.mkv").AsOsAgnostic(), + Path.Combine(_series.Path, "EXTRAs", "file3.mkv").AsOsAgnostic(), + Path.Combine(_series.Path, "ExTrAs", "file4.mkv").AsOsAgnostic(), + Path.Combine(_series.Path, "Season 1", "s01e01.mkv").AsOsAgnostic() + }); + +// Mocker.GetMock() +// .Setup(s => s.GetImportDecisions(It.IsAny>(), _series, false, (QualityModel) null)) +// .Returns(new List()); + + Subject.Scan(_series); + + Mocker.GetMock() + .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _series, false, (QualityModel)null), Times.Once()); + } } } diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index 2a8145339..032ed8c06 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Text.RegularExpressions; using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.Instrumentation.Extensions; @@ -55,6 +56,8 @@ namespace NzbDrone.Core.MediaFiles _logger = logger; } + private static readonly Regex ExtrasRegex = new Regex(@"(?:\\|\/)extras(?:\\|\/)", RegexOptions.Compiled | RegexOptions.IgnoreCase); + public void Scan(Series series) { var rootFolder = _diskProvider.GetParentFolder(series.Path); @@ -86,7 +89,7 @@ namespace NzbDrone.Core.MediaFiles } var videoFilesStopwatch = Stopwatch.StartNew(); - var mediaFileList = GetVideoFiles(series.Path).Where(file => !file.StartsWith(Path.Combine(series.Path, "EXTRAS"))).ToList(); + var mediaFileList = GetVideoFiles(series.Path).Where(file => !ExtrasRegex.IsMatch(file)).ToList(); videoFilesStopwatch.Stop(); _logger.Trace("Finished getting episode files for: {0} [{1}]", series, videoFilesStopwatch.Elapsed);