Firelance 0.1.5.2
- Refactored redundant if statement in FileManifest - Added break statements to if function to prevent filter crawl
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace FirelanceMgr
|
||||
{
|
||||
public class FileManifest
|
||||
{
|
||||
public List<string> 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<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> FilteredManifestBuilder(List<string> filters, string fullPath)
|
||||
{
|
||||
var filteredList = new List<string>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user