Reworked outfile and readfile to use byte[]

This commit is contained in:
Cameron Cowen 2021-06-13 01:22:15 +01:00
parent 01d952c6ee
commit 5d75523c8b
5 changed files with 22 additions and 24 deletions

View file

@ -17,8 +17,8 @@ namespace Elsa.Activities.File
Outcomes = new[] { OutcomeNames.Done })]
public class OutFile : Activity
{
[ActivityInput(Hint = "Content of the file.", UIHint = ActivityInputUIHints.MultiLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })]
public string Content { get; set; }
[ActivityInput(Hint = "Data to write to file.", SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })]
public byte[] Data { get; set; }
[ActivityInput(Hint = "Path to create file at.", UIHint = ActivityInputUIHints.SingleLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })]
public string Path { get; set; }
@ -49,10 +49,8 @@ namespace Elsa.Activities.File
}
using (var fs = new FileStream(Path, fileMode, fileAccess))
using (var sw = new StreamWriter(fs))
{
await sw.WriteLineAsync(Content);
await sw.FlushAsync();
await fs.WriteAsync(Data);
await fs.FlushAsync();
}

View file

@ -13,41 +13,41 @@ namespace Elsa.Activities.File
{
public static IActivityBuilder OutFile(this IBuilder builder, Action<ISetupActivity<OutFile>> setup, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.Then(setup, null, lineNumber, sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, string> content, Func<ActivityExecutionContext, string> path, Func<ActivityExecutionContext, CopyMode> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, byte[]> data, Func<ActivityExecutionContext, string> path, Func<ActivityExecutionContext, CopyMode> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity
.Set(x => x.Content, content)
.Set(x => x.Data, data)
.Set(x => x.Path, path)
.Set(x => x.Mode, mode),
lineNumber,
sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, ValueTask<string>> content, Func<ActivityExecutionContext, ValueTask<string>> path, Func<ActivityExecutionContext, ValueTask<CopyMode>> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, ValueTask<byte[]>> data, Func<ActivityExecutionContext, ValueTask<string>> path, Func<ActivityExecutionContext, ValueTask<CopyMode>> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity
.Set(x => x.Content, content)
.Set(x => x.Data, data)
.Set(x => x.Path, path)
.Set(x => x.Mode, mode),
lineNumber,
sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<string> content, Func<string> path, Func<CopyMode> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
public static IActivityBuilder OutFile(this IBuilder builder, Func<byte[]> data, Func<string> path, Func<CopyMode> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity
.Set(x => x.Content, content)
.Set(x => x.Data, data)
.Set(x => x.Path, path)
.Set(x => x.Mode, mode),
lineNumber,
sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<ValueTask<string>> content, Func<ValueTask<string>> path, Func<ValueTask<CopyMode>> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
public static IActivityBuilder OutFile(this IBuilder builder, Func<ValueTask<byte[]>> data, Func<ValueTask<string>> path, Func<ValueTask<CopyMode>> mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity
.Set(x => x.Content, content)
.Set(x => x.Data, data)
.Set(x => x.Path, path)
.Set(x => x.Mode, mode),
lineNumber,
sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, string content, string path, CopyMode mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
public static IActivityBuilder OutFile(this IBuilder builder, byte[] data, string path, CopyMode mode, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity
.Set(x => x.Content, content)
.Set(x => x.Data, data)
.Set(x => x.Path, path)
.Set(x => x.Mode, mode),
lineNumber,

View file

@ -10,12 +10,12 @@ namespace Elsa.Activities.File
{
public static class OutFileExtensions
{
#region Content
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, ValueTask<string>> content) => setup.Set(x => x.Content, content);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, string> content) => setup.Set(x => x.Content, content);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ValueTask<string>> content) => setup.Set(x => x.Content, content);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<string> content) => setup.Set(x => x.Content, content);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, string content) => setup.Set(x => x.Content, content);
#region Data
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, ValueTask<byte[]>> data) => setup.Set(x => x.Data, data);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, byte[]> data) => setup.Set(x => x.Data, data);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<ValueTask<byte[]>> data) => setup.Set(x => x.Data, data);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, Func<byte[]> data) => setup.Set(x => x.Data, data);
public static ISetupActivity<OutFile> WithContent(this ISetupActivity<OutFile> setup, byte[] data) => setup.Set(x => x.Data, data);
#endregion
#region Path

View file

@ -21,8 +21,8 @@ namespace Elsa.Activities.File
public async override ValueTask<IActivityExecutionResult> ExecuteAsync(ActivityExecutionContext context)
{
var content = await System.IO.File.ReadAllTextAsync(Path);
return Done(content);
var data = await System.IO.File.ReadAllBytesAsync(Path);
return Done(data);
}
}
}

View file

@ -21,7 +21,7 @@ namespace Elsa.Samples.ReadLineToFile
.WithName("TempFile")
.OutFile(setup =>
{
setup.WithContent(context => context.GetOutputFrom<string>("ReadLine"));
setup.WithContent(context => System.Text.Encoding.UTF8.GetBytes(context.GetOutputFrom<string>("ReadLine")));
setup.WithPath(context => context.GetOutputFrom<string>("TempFile"));
setup.WithMode(CopyMode.Overwrite);
})