From 5b6a8e83492987bfb7f82755181c7c884cfcedec Mon Sep 17 00:00:00 2001 From: Dunestorm Date: Fri, 10 Jul 2020 14:15:32 +0100 Subject: [PATCH] Firelance 0.1.5.2 - FilterDirectory renamed and moved to ManifestFilter. - Refactored ManifestFilter --- DevConsole/Program.cs | 8 ++- FireLance/Helpers.cs | 100 +----------------------------------- FireLance/ManifestFilter.cs | 83 ++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 101 deletions(-) create mode 100644 FireLance/ManifestFilter.cs diff --git a/DevConsole/Program.cs b/DevConsole/Program.cs index e3a8d54..8b17ec0 100644 --- a/DevConsole/Program.cs +++ b/DevConsole/Program.cs @@ -214,8 +214,12 @@ namespace DevConsole Console.WriteLine($"Full: {fullPath}"); Console.WriteLine($"Relative Path: {relPath}"); - Console.WriteLine("Please enter the pattern for the inclusion filter and then\nthe exclusion filter:"); - PrintListValues(Helpers.Filters.FilterDirectory(fullPath, Console.ReadLine(), Console.ReadLine())); + Console.WriteLine("Please enter the filter patterns required."); + Console.Write("\nInclusion Filter: "); + var i = Console.ReadLine(); + Console.Write("Exclusion Filter: "); + var e = Console.ReadLine(); + PrintListValues(new ManifestFilter().Build(fullPath, i, e)); //FSManipulation.CopyDirectory( // fullPath, diff --git a/FireLance/Helpers.cs b/FireLance/Helpers.cs index 256332f..36967b1 100644 --- a/FireLance/Helpers.cs +++ b/FireLance/Helpers.cs @@ -1,8 +1,8 @@ using Microsoft.Win32; using System; using System.Collections.Generic; -using System.IO; using System.Linq; +using System.Reflection.Metadata; namespace FirelanceMgr { @@ -48,103 +48,5 @@ namespace FirelanceMgr return result; } } - - public static class Filters - { - /// - /// To deprecate. - /// - /// - /// - public static List GetFileList(string fullPath) - { - var result = new List(); - foreach (var file in Directory.GetFiles(fullPath)) - { - result.Add(file); - } - - return result; - } - - public static List FilterDirectory(string fullPath, string inclusionStr, string exclusionStr) - { - var incBuilder = PatternBuilder(inclusionStr); - var excBuilder = PatternBuilder(exclusionStr); - var inclusionList = ManifestBuilder(incBuilder, fullPath); - var exclusionList = ManifestBuilder(excBuilder, fullPath); - - return inclusionList.Where(x => exclusionList.All(y => !x.Contains(y))).ToList(); ; - } - - private static List PatternBuilder(string filterStr) - { - var filters = new List(); - - if (filterStr != string.Empty) - { - char delimeter = '|'; - string currentFilter = string.Empty; - foreach (char f in filterStr) - { - currentFilter += f; - if (f == delimeter) - { - filters.Add(currentFilter.Trim(delimeter)); - currentFilter = string.Empty; - } - } - filters.Add(currentFilter); // Add final inclusion - } - - return filters; - } - - private static List ManifestBuilder(List filters, string fullPath) - { - var filteredList = new List(); - - foreach (var f in filters) - { - if (f == "*.*") - { - // Pattern: All - foreach (var file in Directory.GetFiles(fullPath, "*", SearchOption.AllDirectories)) - { - filteredList.Add(file); - } - } - else if (f.Contains(@"\*")) - { - // Pattern: Directory - foreach (var dir in Directory.GetDirectories(fullPath, "*", SearchOption.AllDirectories)) - { - if (dir.Contains(f.Substring(0, f.LastIndexOf("\\")))) { filteredList.Add(dir); } - } - } - else - { - if (f.Contains("*")) - { - // Pattern: File with wildcard - foreach (var file in Directory.GetFiles(fullPath, f, SearchOption.AllDirectories)) - { - filteredList.Add(file); - } - } - else - { - // Pattern: File - if (File.Exists(f)) - { - filteredList.Add(f); - } - } - } - } - - return filteredList; - } - } } } diff --git a/FireLance/ManifestFilter.cs b/FireLance/ManifestFilter.cs new file mode 100644 index 0000000..b36dadf --- /dev/null +++ b/FireLance/ManifestFilter.cs @@ -0,0 +1,83 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace FirelanceMgr +{ + public class ManifestFilter + { + public List Build(string fullPath, string inclusionStr, string exclusionStr) + { + var incPatterns = PatternBuilder(inclusionStr); + var excPatterns = PatternBuilder(exclusionStr); + var incFiles = FileManifestBuilder(incPatterns, fullPath); + var excFiles = FileManifestBuilder(excPatterns, fullPath); + + return incFiles.Where(x => excFiles.All(y => !x.Contains(y))).Distinct().ToList(); ; + } + + private List PatternBuilder(string filterStr) + { + var filters = new List(); + + if (filterStr != string.Empty) + { + char delimeter = '|'; + string currentFilter = string.Empty; + foreach (char f in filterStr) + { + currentFilter += f; + if (f == delimeter) + { + filters.Add(currentFilter.Trim(delimeter)); + currentFilter = string.Empty; + } + } + filters.Add(currentFilter); // Add final pending inclusion + } + + return filters; + } + + private List FileManifestBuilder(List filters, string fullPath) + { + var filteredList = new List(); + + foreach (var f in filters) + { + if (f == "*.*") // Pattern: All + { + foreach (var file in Directory.GetFiles(fullPath, "*", SearchOption.AllDirectories)) + { + filteredList.Add(file); + } + } + else if (f.Contains(@"\*")) // Pattern: Directory + { + foreach (var dir in Directory.GetDirectories(fullPath, "*", SearchOption.AllDirectories)) + foreach (var file in Directory.GetFiles(dir, "*", SearchOption.AllDirectories)) + { + filteredList.Add(file); + } + } + else + { + if (f.Contains("*")) // Pattern: File with wildcard + { + foreach (var file in Directory.GetFiles(fullPath, f, SearchOption.AllDirectories)) + { + filteredList.Add(file); + } + } + else // Pattern: File + { + if (File.Exists(f)){ filteredList.Add(f); } + } + } + } + + return filteredList; + } + } + +}