using FileFlows.Plugin; using FileFlows.Plugin.Attributes; using System.ComponentModel.DataAnnotations; using System.Text.RegularExpressions; namespace FileFlows.BasicNodes.Functions; /// /// A flow element that matches different conditions /// public class Matches : Node { /// public override int Inputs => 1; /// public override FlowElementType Type => FlowElementType.Logic; /// public override string Icon => "fas fa-equals"; /// public override bool FailureNode => true; /// public override string HelpUrl => "https://fileflows.com/docs/plugins/basic-nodes/matches"; /// /// Gets or sets replacements to replace /// [KeyValue(1, showVariables: true, allowDuplicates: true)] [Required] public List> MatchConditions { get; set; } /// public override int Execute(NodeParameters args) { if (MatchConditions?.Any() != true) { args.FailureReason = "No matches defined"; args.Logger.ELog(args.FailureReason); return -1; } int output = 0; foreach (var match in MatchConditions) { output++; try { object value; if (Regex.IsMatch(match.Key, @"\{[\w\d\.-]+\}") && args.Variables.TryGetValue(match.Key[1..^1], out var varValue)) value = varValue; else value = args.ReplaceVariables(match.Key, stripMissing: true); if (args.MathHelper.IsMathOperation(match.Value)) { string strValue = value?.ToString()?.Trim() ?? string.Empty; if (args.MathHelper.IsTrue(match.Value, strValue)) { args.Logger?.ILog($"Match found '{match.Value}' = {strValue}"); return output; } } if (args.StringHelper.Matches(match.Value, value)) return output; } catch (Exception) { // Ignored } } args.Logger?.ILog("No matches found"); return MatchConditions.Count + 1; } }