diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs index d8ac88eb8..18c03ab88 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs @@ -36,7 +36,7 @@ protected void GivenCompletedItem() .Setup(c => c.GetFileSize(It.IsAny())) .Returns(1000000); - Mocker.GetMock().Setup(c => c.FilterFiles(It.IsAny(), It.IsAny>(), It.IsAny())) + Mocker.GetMock().Setup(c => c.FilterPaths(It.IsAny(), It.IsAny>(), It.IsAny())) .Returns, bool>((b, s, e) => s.ToList()); } diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs index f88d0d1bf..e30899030 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs @@ -51,7 +51,7 @@ public void Setup() .Setup(c => c.GetHashFromTorrentFile(It.IsAny())) .Returns("myhash"); - Mocker.GetMock().Setup(c => c.FilterFiles(It.IsAny(), It.IsAny>(), It.IsAny())) + Mocker.GetMock().Setup(c => c.FilterPaths(It.IsAny(), It.IsAny>(), It.IsAny())) .Returns, bool>((b, s, e) => s.ToList()); } diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/UsenetBlackholeFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/UsenetBlackholeFixture.cs index e0ad8c961..47771167a 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/UsenetBlackholeFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/UsenetBlackholeFixture.cs @@ -42,7 +42,7 @@ public void Setup() .Setup(c => c.OpenWriteStream(It.IsAny())) .Returns(() => new FileStream(GetTempFilePath(), FileMode.Create)); - Mocker.GetMock().Setup(c => c.FilterFiles(It.IsAny(), It.IsAny>(), It.IsAny())) + Mocker.GetMock().Setup(c => c.FilterPaths(It.IsAny(), It.IsAny>(), It.IsAny())) .Returns, bool>((b, s, e) => s.ToList()); } diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedMoviesImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedMoviesImportServiceFixture.cs index 1826985c0..2beca9d02 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedMoviesImportServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedMoviesImportServiceFixture.cs @@ -36,7 +36,7 @@ public void Setup() Mocker.GetMock().Setup(c => c.GetVideoFiles(It.IsAny(), It.IsAny())) .Returns(_videoFiles); - Mocker.GetMock().Setup(c => c.FilterFiles(It.IsAny(), It.IsAny>(), It.IsAny())) + Mocker.GetMock().Setup(c => c.FilterPaths(It.IsAny(), It.IsAny>(), It.IsAny())) .Returns, bool>((b, s, e) => s.ToList()); Mocker.GetMock().Setup(c => c.GetDirectories(It.IsAny())) diff --git a/src/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs index 163eadcb7..43b779b2b 100644 --- a/src/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs +++ b/src/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs @@ -97,7 +97,7 @@ public void should_filter_certain_sub_folders(string subFolder) var specialFiles = GetFiles(path, subFolder).ToList(); var allFiles = files.Concat(specialFiles); - var filteredFiles = Subject.FilterFiles(path, allFiles); + var filteredFiles = Subject.FilterPaths(path, allFiles); filteredFiles.Should().NotContain(specialFiles); filteredFiles.Count.Should().BeGreaterThan(0); } diff --git a/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs b/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs index 6fef92d30..2d41c3eef 100644 --- a/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs +++ b/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs @@ -52,7 +52,7 @@ public IEnumerable GetItems(string watchFolder, TimeSpan waitPe private IEnumerable GetDownloadItems(string watchFolder, Dictionary lastWatchItems, TimeSpan waitPeriod) { - foreach (var folder in _diskScanService.FilterFiles(watchFolder, _diskProvider.GetDirectories(watchFolder))) + foreach (var folder in _diskScanService.FilterPaths(watchFolder, _diskProvider.GetDirectories(watchFolder))) { var title = FileNameBuilder.CleanFileName(Path.GetFileName(folder)); @@ -88,7 +88,7 @@ private IEnumerable GetDownloadItems(string watchFolder, Dictio yield return newWatchItem; } - foreach (var videoFile in _diskScanService.FilterFiles(watchFolder, _diskScanService.GetVideoFiles(watchFolder, false))) + foreach (var videoFile in _diskScanService.FilterPaths(watchFolder, _diskScanService.GetVideoFiles(watchFolder, false))) { var title = FileNameBuilder.CleanFileName(Path.GetFileName(videoFile)); diff --git a/src/NzbDrone.Core/Extras/ExistingExtraFileService.cs b/src/NzbDrone.Core/Extras/ExistingExtraFileService.cs index cf8979dbf..656458efe 100644 --- a/src/NzbDrone.Core/Extras/ExistingExtraFileService.cs +++ b/src/NzbDrone.Core/Extras/ExistingExtraFileService.cs @@ -41,7 +41,7 @@ public void Handle(MovieScannedEvent message) _logger.Debug("Looking for existing extra files in {0}", movie.Path); var filesOnDisk = _diskScanService.GetNonVideoFiles(movie.Path); - var possibleExtraFiles = _diskScanService.FilterFiles(movie.Path, filesOnDisk, false); + var possibleExtraFiles = _diskScanService.FilterPaths(movie.Path, filesOnDisk, false); var filteredFiles = possibleExtraFiles; var importedFiles = new List(); diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index 82e11efdd..c08849eed 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -24,7 +24,7 @@ public interface IDiskScanService void Scan(Movie movie); string[] GetVideoFiles(string path, bool allDirectories = true); string[] GetNonVideoFiles(string path, bool allDirectories = true); - List FilterFiles(string basePath, IEnumerable files, bool filterExtras = true); + List FilterPaths(string basePath, IEnumerable paths, bool filterExtras = true); } public class DiskScanService : @@ -120,7 +120,7 @@ public void Scan(Movie movie) } var videoFilesStopwatch = Stopwatch.StartNew(); - var mediaFileList = FilterFiles(movie.Path, GetVideoFiles(movie.Path)).ToList(); + var mediaFileList = FilterPaths(movie.Path, GetVideoFiles(movie.Path)).ToList(); videoFilesStopwatch.Stop(); _logger.Trace("Finished getting movie files for: {0} [{1}]", movie, videoFilesStopwatch.Elapsed); @@ -180,20 +180,20 @@ public string[] GetNonVideoFiles(string path, bool allDirectories = true) return mediaFileList.ToArray(); } - public List FilterFiles(string basePath, IEnumerable files, bool filterExtras = true) + public List FilterPaths(string basePath, IEnumerable paths, bool filterExtras = true) { - var filteredFiles = files.Where(file => !ExcludedSubFoldersRegex.IsMatch(basePath.GetRelativePath(file))) - .Where(file => !ExcludedFilesRegex.IsMatch(Path.GetFileName(file))) - .ToList(); + var filteredPaths = paths.Where(path => !ExcludedSubFoldersRegex.IsMatch(basePath.GetRelativePath(path))) + .Where(path => !ExcludedFilesRegex.IsMatch(Path.GetFileName(path))) + .ToList(); if (filterExtras) { - filteredFiles = filteredFiles.Where(file => !ExcludedExtrasSubFolderRegex.IsMatch(basePath.GetRelativePath(file))) - .Where(file => !ExcludedExtraFilesRegex.IsMatch(Path.GetFileName(file))) + filteredPaths = filteredPaths.Where(path => !ExcludedExtrasSubFolderRegex.IsMatch(basePath.GetRelativePath(path))) + .Where(path => !ExcludedExtraFilesRegex.IsMatch(Path.GetFileName(path))) .ToList(); } - return filteredFiles; + return filteredPaths; } private void SetPermissions(string path) diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedMovieImportService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedMovieImportService.cs index 1fd8d4dfc..3edc88d5f 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedMovieImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedMovieImportService.cs @@ -189,7 +189,7 @@ private List ProcessFolder(DirectoryInfo directoryInfo, ImportMode _logger.Debug("{0} folder quality: {1}", cleanedUpName, folderInfo.Quality); } - var videoFiles = _diskScanService.FilterFiles(directoryInfo.FullName, _diskScanService.GetVideoFiles(directoryInfo.FullName)); + var videoFiles = _diskScanService.FilterPaths(directoryInfo.FullName, _diskScanService.GetVideoFiles(directoryInfo.FullName)); if (downloadClientItem == null) { diff --git a/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs index 1517e097f..e39ad794f 100644 --- a/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs @@ -120,8 +120,11 @@ private List ProcessFolder(string rootFolder, string baseFolde if (movie == null) { - var files = _diskScanService.FilterFiles(baseFolder, _diskScanService.GetVideoFiles(baseFolder, false)); - var subfolders = _diskScanService.FilterFiles(baseFolder, _diskProvider.GetDirectories(baseFolder)); + // Filter paths based on the rootFolder, so files in subfolders that should be ignored are ignored. + // It will lead to some extra directories being checked for files, but it saves the processing of them and is cleaner than + // teaching FilterPaths to know whether it's processing a file or a folder and changing it's filtering based on that. + var files = _diskScanService.FilterPaths(rootFolder, _diskScanService.GetVideoFiles(baseFolder, false)); + var subfolders = _diskScanService.FilterPaths(rootFolder, _diskProvider.GetDirectories(baseFolder)); var processedFiles = files.Select(file => ProcessFile(rootFolder, baseFolder, file, downloadId)); var processedFolders = subfolders.SelectMany(subfolder => ProcessFolder(rootFolder, subfolder, downloadId, null, filterExistingFiles));