83 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|