diff --git a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs index 2eb302db2..b0b40eeae 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs @@ -28,8 +28,6 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests Mocker.GetMock() .Setup(s => s.GetParentFolder(It.IsAny())) .Returns((string path) => Directory.GetParent(path).FullName); - - } private void GivenParentFolderExists() @@ -180,7 +178,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests } [Test] - public void should_not_scan_Ssynology_eaDir() + public void should_not_scan_Synology_eaDir() { GivenParentFolderExists(); @@ -195,5 +193,40 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests Mocker.GetMock() .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _series), Times.Once()); } + + [Test] + public void should_not_scan_thumb_folder() + { + GivenParentFolderExists(); + + GivenFiles(new List + { + Path.Combine(_series.Path, ".@__thumb", "file1.mkv").AsOsAgnostic(), + Path.Combine(_series.Path, "Season 1", "s01e01.mkv").AsOsAgnostic() + }); + + Subject.Scan(_series); + + Mocker.GetMock() + .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _series), Times.Once()); + } + + [Test] + public void should_scan_dotHack_folder() + { + GivenParentFolderExists(); + _series.Path = @"C:\Test\TV\.hack".AsOsAgnostic(); + + GivenFiles(new List + { + Path.Combine(_series.Path, "Season 1", "file1.mkv").AsOsAgnostic(), + Path.Combine(_series.Path, "Season 1", "s01e01.mkv").AsOsAgnostic() + }); + + Subject.Scan(_series); + + Mocker.GetMock() + .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 2), _series), Times.Once()); + } } } diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index b30c4b70e..b39caf26a 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -58,8 +58,7 @@ namespace NzbDrone.Core.MediaFiles _logger = logger; } - private static readonly Regex ExcludedSubFoldersRegex = new Regex(@"(extras|@eadir)(?:\\|\/)", RegexOptions.Compiled | RegexOptions.IgnoreCase); - private static readonly Regex ExcludedFoldersRegex = new Regex(@"(?:\\|\/)(\..+)(?:\\|\/)", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static readonly Regex ExcludedSubFoldersRegex = new Regex(@"(?:\\|\/|^)(extras|@eadir|\..+)(?:\\|\/)", RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex ExcludedFilesRegex = new Regex(@"^\._", RegexOptions.Compiled | RegexOptions.IgnoreCase); public void Scan(Series series) @@ -136,7 +135,6 @@ namespace NzbDrone.Core.MediaFiles private IEnumerable FilterFiles(Series series, IEnumerable videoFiles) { return videoFiles.Where(file => !ExcludedSubFoldersRegex.IsMatch(series.Path.GetRelativePath(file))) - .Where(file => !ExcludedFoldersRegex.IsMatch(file)) .Where(file => !ExcludedFilesRegex.IsMatch(Path.GetFileName(file))); }