diff --git a/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFiles.cs b/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFiles.cs new file mode 100644 index 000000000..d892b2ee9 --- /dev/null +++ b/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFiles.cs @@ -0,0 +1,48 @@ +using Elsa.ActivityResults; +using Elsa.Attributes; +using Elsa.Services; +using Elsa.Services.Models; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Elsa.Activities.File +{ + [Action(Category = "File", + Description = "Enumerates files in a given folder", + Outcomes = new[] { OutcomeNames.Done })] + public class EnumerateFiles : Activity + { + [ActivityInput(Hint = "Path of the folder to enumerate files.")] + public string Path { get; set; } + + [ActivityInput(Hint = "Pattern for files to return.")] + public string Pattern { get; set; } + + [ActivityInput(Hint = "Ignore inaccessible files.", Label = "Ignore Inaccessible")] + public bool IgnoreInaccessible { get; set; } = true; + + [ActivityInput(Hint = "Set case sensitivity.", Label = "Match Casing")] + public MatchCasing MatchCasing { get; set; } = MatchCasing.CaseInsensitive; + + [ActivityInput(Hint = "Return files from sub directories", Label = "Sub Directories")] + public bool SubDirectories { get; set; } = false; + + protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context) + { + if (string.IsNullOrWhiteSpace(Pattern)) + return Done(Directory.EnumerateFiles(Path)); + + EnumerationOptions options = new EnumerationOptions() + { + IgnoreInaccessible = IgnoreInaccessible, + MatchCasing = MatchCasing, + RecurseSubdirectories = SubDirectories + }; + return Done(Directory.EnumerateFiles(Path, Pattern, options)); + } + } +} diff --git a/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFilesBuilderExtensions.cs b/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFilesBuilderExtensions.cs new file mode 100644 index 000000000..38b74f43d --- /dev/null +++ b/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFilesBuilderExtensions.cs @@ -0,0 +1,46 @@ +using Elsa.Builders; +using Elsa.Services.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace Elsa.Activities.File.Activities.EnumeratreFiles +{ + public static class EnumerateFilesBuilderExtensions + { + public static IActivityBuilder EnumerateFiles(this IBuilder builder, Action> setup, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.Then(setup, null, lineNumber, sourceFile); + + public static IActivityBuilder EnumerateFiles(this IBuilder builder, Func> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.EnumerateFiles(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder EnumerateFiles(this IBuilder builder, Func path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.EnumerateFiles(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder EnumerateFiles(this IBuilder builder, Func> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.EnumerateFiles(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder EnumerateFiles(this IBuilder builder, Func path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.EnumerateFiles(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + + public static IActivityBuilder EnumerateFiles(this IBuilder builder, string path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => + builder.EnumerateFiles(activity => activity + .Set(x => x.Path, path), + lineNumber, + sourceFile); + } +} diff --git a/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFilesExtensions.cs b/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFilesExtensions.cs new file mode 100644 index 000000000..dd761e461 --- /dev/null +++ b/src/activities/Elsa.Activities.File/Activities/EnumeratreFiles/EnumerateFilesExtensions.cs @@ -0,0 +1,54 @@ +using Elsa.Builders; +using Elsa.Services.Models; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Elsa.Activities.File.Activities.EnumeratreFiles +{ + public static class EnumerateFilesExtensions + { + #region Path + public static ISetupActivity WithPath(this ISetupActivity setup, Func> path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, Func path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, Func> path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, Func path) => setup.Set(x => x.Path, path); + public static ISetupActivity WithPath(this ISetupActivity setup, string path) => setup.Set(x => x.Path, path); + #endregion + + #region Pattern + public static ISetupActivity WithPattern(this ISetupActivity setup, Func> pattern) => setup.Set(x => x.Pattern, pattern); + public static ISetupActivity WithPattern(this ISetupActivity setup, Func pattern) => setup.Set(x => x.Pattern, pattern); + public static ISetupActivity WithPattern(this ISetupActivity setup, Func> pattern) => setup.Set(x => x.Pattern, pattern); + public static ISetupActivity WithPattern(this ISetupActivity setup, Func pattern) => setup.Set(x => x.Pattern, pattern); + public static ISetupActivity WithPattern(this ISetupActivity setup, string pattern) => setup.Set(x => x.Pattern, pattern); + #endregion + + #region IgnoreInaccessible + public static ISetupActivity WithIgnoreInaccessible(this ISetupActivity setup, Func> ignoreInaccessible) => setup.Set(x => x.IgnoreInaccessible, ignoreInaccessible); + public static ISetupActivity WithIgnoreInaccessible(this ISetupActivity setup, Func ignoreInaccessible) => setup.Set(x => x.IgnoreInaccessible, ignoreInaccessible); + public static ISetupActivity WithIgnoreInaccessible(this ISetupActivity setup, Func> ignoreInaccessible) => setup.Set(x => x.IgnoreInaccessible, ignoreInaccessible); + public static ISetupActivity WithIgnoreInaccessible(this ISetupActivity setup, Func ignoreInaccessible) => setup.Set(x => x.IgnoreInaccessible, ignoreInaccessible); + public static ISetupActivity WithIgnoreInaccessible(this ISetupActivity setup, bool ignoreInaccessible) => setup.Set(x => x.IgnoreInaccessible, ignoreInaccessible); + #endregion + + #region MatchCasing + public static ISetupActivity WithMatchCasing(this ISetupActivity setup, Func> matchCasing) => setup.Set(x => x.MatchCasing, matchCasing); + public static ISetupActivity WithMatchCasing(this ISetupActivity setup, Func matchCasing) => setup.Set(x => x.MatchCasing, matchCasing); + public static ISetupActivity WithMatchCasing(this ISetupActivity setup, Func> matchCasing) => setup.Set(x => x.MatchCasing, matchCasing); + public static ISetupActivity WithMatchCasing(this ISetupActivity setup, Func matchCasing) => setup.Set(x => x.MatchCasing, matchCasing); + public static ISetupActivity WithMatchCasing(this ISetupActivity setup, MatchCasing matchCasing) => setup.Set(x => x.MatchCasing, matchCasing); + #endregion + + #region SubDirectories + public static ISetupActivity WithSubDirectories(this ISetupActivity setup, Func> subDirectories) => setup.Set(x => x.SubDirectories, subDirectories); + public static ISetupActivity WithSubDirectories(this ISetupActivity setup, Func subDirectories) => setup.Set(x => x.SubDirectories, subDirectories); + public static ISetupActivity WithSubDirectories(this ISetupActivity setup, Func> subDirectories) => setup.Set(x => x.SubDirectories, subDirectories); + public static ISetupActivity WithSubDirectories(this ISetupActivity setup, Func subDirectories) => setup.Set(x => x.SubDirectories, subDirectories); + public static ISetupActivity WithSubDirectories(this ISetupActivity setup, bool subDirectories) => setup.Set(x => x.SubDirectories, subDirectories); + #endregion + } +} diff --git a/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs index aa674a8dd..a3f32f523 100644 --- a/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs +++ b/src/activities/Elsa.Activities.File/Extensions/ServiceCollectionExtensions.cs @@ -20,6 +20,7 @@ namespace Microsoft.Extensions.DependencyInjection throw new ArgumentNullException(nameof(builder)); builder.AddActivity() + .AddActivity() .AddActivity() .AddActivity() .AddActivity()