From ca04c7a88f6437a22ac450cbc413be8f5c63389b Mon Sep 17 00:00:00 2001 From: Dunestorm Date: Fri, 10 Jul 2020 15:13:22 +0100 Subject: [PATCH] Firelance 0.1.5.2 - Refactored redundant if statement in FileManifest - Added break statements to if function to prevent filter crawl --- DevConsole/Program.cs | 4 +- FireLance/FileManifest.cs | 74 +++++++++++++++++++++++++++++++++ FireLance/ManifestFilter.cs | 83 ------------------------------------- 3 files changed, 76 insertions(+), 85 deletions(-) create mode 100644 FireLance/FileManifest.cs delete mode 100644 FireLance/ManifestFilter.cs diff --git a/DevConsole/Program.cs b/DevConsole/Program.cs index 8b17ec0..cc96867 100644 --- a/DevConsole/Program.cs +++ b/DevConsole/Program.cs @@ -208,7 +208,7 @@ namespace DevConsole Console.WriteLine(Helpers.Converters.GetSpecialToAbsolutePath(Console.ReadLine().ToUpper())); break; case "B": - string fullPath = Path.Combine(Helpers.Converters.GetSpecialToAbsolutePath("%DOCUMENTS%") , @"BioWare\Mass Effect Andromeda"); + string fullPath = Path.Combine(Helpers.Converters.GetSpecialToAbsolutePath("%DOCUMENTS%") , @"Saved Games\Hades"); string relPath = fullPath.Replace(Helpers.Converters.GetSpecialToAbsolutePath("%DOCUMENTS%") + "\\", string.Empty); Console.WriteLine($"Full: {fullPath}"); @@ -219,7 +219,7 @@ namespace DevConsole var i = Console.ReadLine(); Console.Write("Exclusion Filter: "); var e = Console.ReadLine(); - PrintListValues(new ManifestFilter().Build(fullPath, i, e)); + PrintListValues(new FileManifest().Build(fullPath, i, e)); //FSManipulation.CopyDirectory( // fullPath, diff --git a/FireLance/FileManifest.cs b/FireLance/FileManifest.cs new file mode 100644 index 0000000..9f20a3d --- /dev/null +++ b/FireLance/FileManifest.cs @@ -0,0 +1,74 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace FirelanceMgr +{ + public class FileManifest + { + public List Build(string fullPath, string inclusionStr, string exclusionStr) + { + var incPatterns = PatternBuilder(inclusionStr); + var excPatterns = PatternBuilder(exclusionStr); + var incFiles = FilteredManifestBuilder(incPatterns, fullPath); + var excFiles = FilteredManifestBuilder(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 FilteredManifestBuilder(List filters, string fullPath) + { + var filteredList = new List(); + + foreach (var f in filters) + { + 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); + } + break; + } + else if (f == "*.*" || f.Contains("*")) // Pattern: All + { + foreach (var file in Directory.GetFiles(fullPath, f, SearchOption.AllDirectories)) + { + filteredList.Add(file); + } + break; + } + else // Pattern: File + { + if (File.Exists(f)) { filteredList.Add(f); } + } + } + return filteredList; + } + + } +} diff --git a/FireLance/ManifestFilter.cs b/FireLance/ManifestFilter.cs deleted file mode 100644 index b36dadf..0000000 --- a/FireLance/ManifestFilter.cs +++ /dev/null @@ -1,83 +0,0 @@ -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; - } - } - -}