JD2022-TU1/main/tools/apps/Packager/Tasks/EnumerateDirFiles.cs

83 lines
2.6 KiB
C#

using System;
using System.Linq;
using System.ComponentModel;
using System.IO;
using Packager.Parameters;
namespace Packager.Tasks
{
[DisplayName("Enumerate Directory Files")]
public class EnumerateDirFiles: Task
{
[Input("Directory List", IOCardinality.Multi, IOType.Directory)]
public ReferenceList Directories { get; set; }
[Input("Extension Filter", IOCardinality.Single, IOType.String, Flags = InputFlags.Optional)]
public SingleReference ExtFilter { get; set; }
[Output("Output Directories", IOType.Directory)]
public ReferenceList OutputDirectories = new ReferenceList();
[Output("Files", IOType.File)]
public ReferenceList Files = new ReferenceList();
public EnumerateDirFiles()
{
Directories = new ReferenceList();
ExtFilter = new SingleReference();
}
protected override void StartInternal(BuildConfiguration profile, cookerWrapper cooker)
{
OutputDirectories.Add(Directories);
var filter = ExtFilter.Value;
var filterSplit = string.IsNullOrEmpty(filter) ? null : filter.Split(';');
if(filterSplit != null)
{
foreach (var i in Enumerable.Range(0, filterSplit.Length))
{
if (filterSplit[i][0] == '*')
{
filterSplit[i] = filterSplit[i].Substring(1);
}
if (filterSplit[i][0] != '.')
{
filterSplit[i] = '.' + filterSplit[i];
}
}
}
foreach (var dir in Directories)
{
try
{
if (Directory.Exists(dir))
{
var dirInfo = new DirectoryInfo(dir);
foreach (var file in dirInfo.GetFiles())
{
if (filterSplit != null && filterSplit.All(ext => ext != Path.GetExtension(file.Name)))
{
continue;
}
Files.Add(file.FullName);
}
}
else
{
LogMessage(true, $"Directory \"{dir}\" doesn't exist");
}
}
catch(System.Exception ex)
{
LogMessage(true, ex.Message);
}
}
}
}
}