Browse Source

support .etvignore files to exclude folders (and child folders) from scanner

pull/23/head
Jason Dove 6 years ago
parent
commit
b527cca609
  1. 15
      ErsatzTV.Core/Metadata/LocalMediaScanner.cs
  2. 1
      ErsatzTV.sln.DotSettings

15
ErsatzTV.Core/Metadata/LocalMediaScanner.cs

@ -63,8 +63,19 @@ namespace ErsatzTV.Core.Metadata @@ -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<string> excluded = allDirectories.Filter(ShouldExcludeDirectory);
Seq<string> 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 @@ -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"));
}
}

1
ErsatzTV.sln.DotSettings

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=deinterlaced/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=discardcorrupt/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ersatztv/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=etvignore/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=faststart/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ffconcat/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ffprobe/@EntryIndexedValue">True</s:Boolean>

Loading…
Cancel
Save