From b527cca60960117e8f8fd2079e62a5082ee4cbcb Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Fri, 12 Feb 2021 11:02:53 -0600 Subject: [PATCH] support .etvignore files to exclude folders (and child folders) from scanner --- ErsatzTV.Core/Metadata/LocalMediaScanner.cs | 15 ++++++++++++++- ErsatzTV.sln.DotSettings | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ErsatzTV.Core/Metadata/LocalMediaScanner.cs b/ErsatzTV.Core/Metadata/LocalMediaScanner.cs index 54cf57a9c..a45b5bd7e 100644 --- a/ErsatzTV.Core/Metadata/LocalMediaScanner.cs +++ b/ErsatzTV.Core/Metadata/LocalMediaScanner.cs @@ -63,8 +63,19 @@ namespace ErsatzTV.Core.Metadata ".avi", ".wmv", ".mov", ".mkv", ".ts" }; - var allFiles = Directory.GetFiles(localMediaSource.Folder, "*", SearchOption.AllDirectories) + var allDirectories = Directory + .GetDirectories(localMediaSource.Folder, "*", SearchOption.AllDirectories) + .ToSeq(); + + // remove any directories with an .etvignore file locally, or in any parent directory + Seq excluded = allDirectories.Filter(ShouldExcludeDirectory); + Seq relevantDirectories = allDirectories + .Filter(d => !excluded.Any(d.StartsWith)); + + var allFiles = relevantDirectories + .Collect(d => Directory.GetFiles(d, "*", SearchOption.TopDirectoryOnly)) .Filter(file => knownExtensions.Contains(Path.GetExtension(file))) + .OrderBy(identity) .ToSeq(); // check if the media item exists @@ -137,5 +148,7 @@ namespace ErsatzTV.Core.Metadata await _localMetadataProvider.RefreshMetadata(mediaItem); await _smartCollectionBuilder.RefreshSmartCollections(mediaItem); } + + private static bool ShouldExcludeDirectory(string path) => File.Exists(Path.Combine(path, ".etvignore")); } } diff --git a/ErsatzTV.sln.DotSettings b/ErsatzTV.sln.DotSettings index 40c458df3..abf5d7878 100644 --- a/ErsatzTV.sln.DotSettings +++ b/ErsatzTV.sln.DotSettings @@ -8,6 +8,7 @@ True True True + True True True True