diff --git a/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLine.cs b/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLine.cs index 8a02f5e26..a441f0956 100644 --- a/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLine.cs +++ b/src/activities/Elsa.Activities.Console/Activities/ReadLine/ReadLine.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using System.Threading; using System.Threading.Tasks; using Elsa.ActivityResults; @@ -16,15 +16,13 @@ namespace Elsa.Activities.Console Category = "Console", Description = "Read text from standard in.", Icon = "fas fa-terminal", - RuntimeDescription = - "a => !!a.state.variableName ? `Read text from standard in and store into ${ a.state.variableName }.` : 'Read text from standard in.'", Outcomes = new[] { OutcomeNames.Done } )] public class ReadLine : Activity { private readonly TextReader? _input; - public ReadLine() + public ReadLine() : this(System.Console.In) { } diff --git a/src/activities/Elsa.Activities.Dropbox/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.Dropbox/Extensions/ServiceCollectionExtensions.cs index 764f06862..a3532b495 100644 --- a/src/activities/Elsa.Activities.Dropbox/Extensions/ServiceCollectionExtensions.cs +++ b/src/activities/Elsa.Activities.Dropbox/Extensions/ServiceCollectionExtensions.cs @@ -14,7 +14,7 @@ namespace Microsoft.Extensions.DependencyInjection public static IServiceCollection AddDropbox(this IServiceCollection services, Action>? options = null) => services .AddDropboxServices(options) - .AddActivity(); + .AddDropboxActivities(); public static IServiceCollection AddDropboxServices(this IServiceCollection services, Action>? options = null) { diff --git a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs index 225fabc32..3700f0070 100644 --- a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs +++ b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs @@ -1,12 +1,10 @@ using System.Threading; using System.Threading.Tasks; -using Elsa.Activities.Email.Options; using Elsa.Activities.Email.Services; using Elsa.ActivityResults; using Elsa.Attributes; using Elsa.Services; using Elsa.Services.Models; -using Microsoft.Extensions.Options; using MimeKit; using MimeKit.Text; @@ -17,12 +15,10 @@ namespace Elsa.Activities.Email public class SendEmail : Activity { private readonly ISmtpService _smtpService; - private readonly IOptions _options; - public SendEmail(ISmtpService smtpService, IOptions options) + public SendEmail(ISmtpService smtpService) { _smtpService = smtpService; - _options = options; } [ActivityProperty(Hint = "The sender's email address.")] diff --git a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs index 3b5556750..cee2cb34d 100644 --- a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs @@ -1,9 +1,8 @@ using System; -using Elsa.Activities.Email; using Elsa.Builders; // ReSharper disable once CheckNamespace -namespace Elsa.Activities.Http +namespace Elsa.Activities.Email { public static class SendEmailBuilderExtensions { diff --git a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs index cc09b28b2..8f5dac9c5 100644 --- a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs +++ b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs @@ -1,10 +1,9 @@ using System; -using Elsa.Activities.Email; using Elsa.Builders; using Elsa.Services.Models; // ReSharper disable once CheckNamespace -namespace Elsa.Activities.Http +namespace Elsa.Activities.Email { public static class SendEmailExtensions { diff --git a/src/activities/Elsa.Activities.Email/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.Email/Extensions/ServiceCollectionExtensions.cs index c37739267..e678ce601 100644 --- a/src/activities/Elsa.Activities.Email/Extensions/ServiceCollectionExtensions.cs +++ b/src/activities/Elsa.Activities.Email/Extensions/ServiceCollectionExtensions.cs @@ -20,7 +20,6 @@ namespace Microsoft.Extensions.DependencyInjection options?.Invoke(optionsBuilder); return services - .AddOptions() .AddSingleton(); } diff --git a/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs b/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs index ce85f71e4..237e0edf1 100644 --- a/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs +++ b/src/activities/Elsa.Activities.Http/Activities/Redirect/Redirect.cs @@ -1,6 +1,4 @@ using System; -using System.Threading; -using System.Threading.Tasks; using Elsa.Activities.Http.Results; using Elsa.ActivityResults; using Elsa.Attributes; @@ -36,7 +34,7 @@ namespace Elsa.Activities.Http [ActivityProperty(Hint = "Whether or not the redirect is permanent (HTTP 301).")] public bool Permanent { get; set; } - protected override async ValueTask OnExecuteAsync(ActivityExecutionContext context, CancellationToken cancellationToken) + protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context) { var response = _httpContextAccessor.HttpContext.Response; diff --git a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs b/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs index 4c1a815aa..9d608f9c7 100644 --- a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs +++ b/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs @@ -167,7 +167,7 @@ namespace Elsa.Activities.Http private static bool GetMethodSupportsBody(string method) { - var methods = new[] { "POST", "PUT", "PATCH" }; + var methods = new[] { "POST", "PUT", "PATCH", "DELETE" }; return methods.Contains(method, StringComparer.InvariantCultureIgnoreCase); } } diff --git a/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponse.cs b/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponse.cs index 7e5468320..86a731d8c 100644 --- a/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponse.cs +++ b/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponse.cs @@ -31,7 +31,7 @@ namespace Elsa.Activities.Http _httpContextAccessor = httpContextAccessor; } - public IStringLocalizer T { get; } + private IStringLocalizer T { get; } /// /// The HTTP status code to return. diff --git a/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs b/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs index 48621ca8e..9bec772f8 100644 --- a/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs +++ b/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs @@ -5,10 +5,6 @@ namespace Elsa.Activities.Http.Models { public class HttpResponseModel { - public HttpResponseModel() - { - } - public HttpStatusCode StatusCode { get; set; } public Dictionary Headers { get; set; } = new Dictionary(); public object Content { get; set; } diff --git a/src/activities/Elsa.Activities.MassTransit/Activities/MassTransitBusActivity.cs b/src/activities/Elsa.Activities.MassTransit/Activities/MassTransitBusActivity.cs index a3f65076f..f3e8b4613 100644 --- a/src/activities/Elsa.Activities.MassTransit/Activities/MassTransitBusActivity.cs +++ b/src/activities/Elsa.Activities.MassTransit/Activities/MassTransitBusActivity.cs @@ -24,9 +24,7 @@ namespace Elsa.Activities.MassTransit /// the conversation and correlation id. /// protected IPublishEndpoint PublishEndpoint => - _consumeContext != null - ? (IPublishEndpoint)_consumeContext - : (IPublishEndpoint)_bus; + _consumeContext ?? (IPublishEndpoint)_bus; /// /// Gets the send endpoint provider to use. @@ -36,9 +34,7 @@ namespace Elsa.Activities.MassTransit /// the conversation and correlation id. /// protected ISendEndpointProvider SendEndpointProvider => - _consumeContext != null - ? (ISendEndpointProvider)_consumeContext - : (ISendEndpointProvider)_bus; + _consumeContext ?? (ISendEndpointProvider)_bus; } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs index 117feaa00..1cb716ea0 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEvent.cs @@ -52,8 +52,7 @@ namespace Elsa.Activities.Timers var schedule = CrontabSchedule.Parse(CronExpression); var now = _clock.GetCurrentInstant(); - if (StartTime == null) - StartTime = now; + StartTime ??= now; var nextOccurrence = schedule.GetNextOccurrence(StartTime.Value.ToDateTimeUtc()); diff --git a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs index ec01b6ab6..55931d45b 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/CronEvent/CronEventBuilderExtensions.cs @@ -1,10 +1,9 @@ using System; -using Elsa.Activities.Timers; using Elsa.Builders; using Elsa.Services.Models; // ReSharper disable once CheckNamespace -namespace Elsa.Activities.MassTransit +namespace Elsa.Activities.Timers { public static class CronEventBuilderExtensions { diff --git a/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs b/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs index 2a170bbb5..7112db0ef 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/InstantEvent/InstantEventBuilderExtensions.cs @@ -1,11 +1,10 @@ using System; -using Elsa.Activities.Timers; using Elsa.Builders; using Elsa.Services.Models; using NodaTime; // ReSharper disable once CheckNamespace -namespace Elsa.Activities.MassTransit +namespace Elsa.Activities.Timers { public static class InstantEventBuilderExtensions { diff --git a/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs b/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs index e453afb6a..2b9de6428 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/TimerEvent/TimerEventBuilderExtensions.cs @@ -1,11 +1,10 @@ using System; -using Elsa.Activities.Timers; using Elsa.Builders; using Elsa.Services.Models; using NodaTime; // ReSharper disable once CheckNamespace -namespace Elsa.Activities.MassTransit +namespace Elsa.Activities.Timers { public static class TimerEventBuilderExtensions { diff --git a/src/activities/Elsa.Activities.Timers/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.Timers/Extensions/ServiceCollectionExtensions.cs index bedd5fab3..f671d629f 100644 --- a/src/activities/Elsa.Activities.Timers/Extensions/ServiceCollectionExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Extensions/ServiceCollectionExtensions.cs @@ -15,7 +15,6 @@ namespace Microsoft.Extensions.DependencyInjection options?.Invoke(optionsBuilder); return services - .AddOptions() .AddHostedService() .AddActivity() .AddActivity() diff --git a/src/activities/Elsa.Activities.Timers/HostedServices/TimersHostedService.cs b/src/activities/Elsa.Activities.Timers/HostedServices/TimersHostedService.cs index 613c10143..daf965514 100644 --- a/src/activities/Elsa.Activities.Timers/HostedServices/TimersHostedService.cs +++ b/src/activities/Elsa.Activities.Timers/HostedServices/TimersHostedService.cs @@ -29,11 +29,12 @@ namespace Elsa.Activities.Timers.HostedServices _options = options; _logger = logger; } + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { - if (await _distributedLockProvider.AcquireLockAsync(GetType().Name, stoppingToken)) + if (await _distributedLockProvider.AcquireLockAsync(nameof(TimersHostedService), stoppingToken)) { try { diff --git a/src/core/Elsa.YesSql.Provider.Sqlite.InMemory/SingletonDbConnectionFactory.cs b/src/core/Elsa.YesSql.Provider.Sqlite.InMemory/SingletonDbConnectionFactory.cs index 21146f640..156774a05 100644 --- a/src/core/Elsa.YesSql.Provider.Sqlite.InMemory/SingletonDbConnectionFactory.cs +++ b/src/core/Elsa.YesSql.Provider.Sqlite.InMemory/SingletonDbConnectionFactory.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Data.Common; using YesSql; @@ -19,15 +19,10 @@ namespace Elsa.YesSql.Provider.Sqlite.InMemory public DbConnection CreateConnection() { - if (_connection == null) + return _connection ??= new TDbConnection { - _connection = new TDbConnection - { - ConnectionString = _connectionString - }; - } - - return _connection; + ConnectionString = _connectionString + }; } } } \ No newline at end of file diff --git a/src/scripting/Elsa.Scripting.JavaScript/Converters/TruncatingNumberJsonConverter.cs b/src/scripting/Elsa.Scripting.JavaScript/Converters/TruncatingNumberJsonConverter.cs index 98d0969bc..ed4514589 100644 --- a/src/scripting/Elsa.Scripting.JavaScript/Converters/TruncatingNumberJsonConverter.cs +++ b/src/scripting/Elsa.Scripting.JavaScript/Converters/TruncatingNumberJsonConverter.cs @@ -1,4 +1,4 @@ -using System; +using System; using Newtonsoft.Json; namespace Elsa.Scripting.JavaScript.Converters @@ -8,13 +8,9 @@ namespace Elsa.Scripting.JavaScript.Converters /// public class TruncatingNumberJsonConverter : JsonConverter { - public TruncatingNumberJsonConverter() - { - } - public override bool CanRead => false; public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) => throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter."); - public override bool CanConvert(Type objectType) => (objectType == typeof(decimal) || objectType == typeof(float) || objectType == typeof(double)); + public override bool CanConvert(Type objectType) => objectType == typeof(decimal) || objectType == typeof(float) || objectType == typeof(double); public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) => writer.WriteRawValue(IsWholeValue(value) ? JsonConvert.ToString(Convert.ToInt64(value)) : JsonConvert.ToString(value)); private static bool IsWholeValue(object value) @@ -27,7 +23,7 @@ namespace Elsa.Scripting.JavaScript.Converters if (value is float || value is double) { - var doubleValue = (double) value; + var doubleValue = Convert.ToDouble(value); return doubleValue == Math.Truncate(doubleValue); } diff --git a/src/scripting/Elsa.Scripting.Liquid/Services/LiquidExpressionHandler.cs b/src/scripting/Elsa.Scripting.Liquid/Services/LiquidExpressionHandler.cs index 1c009bcea..75de86dfb 100644 --- a/src/scripting/Elsa.Scripting.Liquid/Services/LiquidExpressionHandler.cs +++ b/src/scripting/Elsa.Scripting.Liquid/Services/LiquidExpressionHandler.cs @@ -26,16 +26,16 @@ namespace Elsa.Scripting.Liquid.Services public async Task EvaluateAsync(string expression, Type returnType, ActivityExecutionContext context, CancellationToken cancellationToken) { - var templateContext = await CreateTemplateContextAsync(context); + var templateContext = await CreateTemplateContextAsync(context, cancellationToken); var result = await _liquidTemplateManager.RenderAsync(expression, templateContext); return string.IsNullOrWhiteSpace(result) ? default : Convert.ChangeType(result, returnType); } - private async Task CreateTemplateContextAsync(ActivityExecutionContext workflowContext) + private async Task CreateTemplateContextAsync(ActivityExecutionContext workflowContext, CancellationToken cancellationToken) { var context = new TemplateContext(); context.SetValue("WorkflowExecutionContext", workflowContext); - await _mediator.Publish(new EvaluatingLiquidExpression(context, workflowContext)); + await _mediator.Publish(new EvaluatingLiquidExpression(context, workflowContext), cancellationToken); context.Model = workflowContext; return context; }