Firelance 0.1.5.2

- FilterDirectory renamed and moved to ManifestFilter.
- Refactored ManifestFilter
This commit is contained in:
2020-07-10 14:15:32 +01:00
parent afcb89ad50
commit 5b6a8e8349
3 changed files with 90 additions and 101 deletions
+6 -2
View File
@@ -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,
+1 -99
View File
@@ -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
{
/// <summary>
/// To deprecate.
/// </summary>
/// <param name="fullPath"></param>
/// <returns></returns>
public static List<string> GetFileList(string fullPath)
{
var result = new List<string>();
foreach (var file in Directory.GetFiles(fullPath))
{
result.Add(file);
}
return result;
}
public static List<string> 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<string> PatternBuilder(string filterStr)
{
var filters = new List<string>();
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<string> ManifestBuilder(List<string> filters, string fullPath)
{
var filteredList = new List<string>();
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;
}
}
}
}
+83
View File
@@ -0,0 +1,83 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace FirelanceMgr
{
public class ManifestFilter
{
public List<string> 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<string> PatternBuilder(string filterStr)
{
var filters = new List<string>();
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<string> FileManifestBuilder(List<string> filters, string fullPath)
{
var filteredList = new List<string>();
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;
}
}
}