Added MinParameterLength

This commit is contained in:
Jaex 2022-04-13 09:16:00 +03:00
parent e0904c0488
commit 8c386bbbbf
9 changed files with 39 additions and 26 deletions

View file

@ -29,6 +29,8 @@ internal abstract class CustomUploaderFunction
{
public abstract string Name { get; }
public virtual int MinParameterLength { get; } = 0;
public abstract string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters);
}
}

View file

@ -32,6 +32,8 @@ internal class CustomUploaderFunctionBase64 : CustomUploaderFunction
{
public override string Name { get; } = "base64";
public override int MinParameterLength { get; } = 1;
public override string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters)
{
string text = parameters[0];

View file

@ -30,6 +30,8 @@ internal class CustomUploaderFunctionHeader : CustomUploaderFunction
{
public override string Name { get; } = "header";
public override int MinParameterLength { get; } = 1;
public override string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters)
{
string header = parameters[0];

View file

@ -32,6 +32,8 @@ internal class CustomUploaderFunctionJson : CustomUploaderFunction
{
public override string Name { get; } = "json";
public override int MinParameterLength { get; } = 1;
public override string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters)
{
// https://goessner.net/articles/JsonPath/

View file

@ -32,14 +32,11 @@ internal class CustomUploaderFunctionRandom : CustomUploaderFunction
{
public override string Name { get; } = "random";
public override int MinParameterLength { get; } = 2;
public override string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters)
{
if (parameters.Length > 0)
{
return RandomFast.Pick(parameters);
}
return null;
return RandomFast.Pick(parameters);
}
}
}

View file

@ -34,37 +34,36 @@ internal class CustomUploaderFunctionRegex : CustomUploaderFunction
{
public override string Name { get; } = "regex";
public override int MinParameterLength { get; } = 1;
public override string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters)
{
if (parameters.Length > 0)
string pattern = parameters[0];
if (!string.IsNullOrEmpty(pattern))
{
string pattern = parameters[0];
Match match = Regex.Match(parser.ResponseInfo.ResponseText, pattern);
if (!string.IsNullOrEmpty(pattern))
if (match.Success)
{
Match match = Regex.Match(parser.ResponseInfo.ResponseText, pattern);
if (match.Success)
if (parameters.Length > 1)
{
if (parameters.Length > 1)
{
string group = parameters[1];
string group = parameters[1];
if (!string.IsNullOrEmpty(group))
if (!string.IsNullOrEmpty(group))
{
if (int.TryParse(group, out int groupNumber))
{
if (int.TryParse(group, out int groupNumber))
{
return match.Groups[groupNumber].Value;
}
else
{
return match.Groups[group].Value;
}
return match.Groups[groupNumber].Value;
}
else
{
return match.Groups[group].Value;
}
}
return match.Value;
}
return match.Value;
}
}

View file

@ -32,6 +32,8 @@ internal class CustomUploaderFunctionSelect : CustomUploaderFunction
{
public override string Name { get; } = "select";
public override int MinParameterLength { get; } = 1;
public override string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters)
{
string[] values = parameters.Where(x => !string.IsNullOrEmpty(x)).ToArray();

View file

@ -33,6 +33,8 @@ internal class CustomUploaderFunctionXml : CustomUploaderFunction
{
public override string Name { get; } = "xml";
public override int MinParameterLength { get; } = 1;
public override string Call(ShareXCustomUploaderSyntaxParser parser, string[] parameters)
{
// https://www.w3schools.com/xml/xpath_syntax.asp

View file

@ -74,6 +74,11 @@ protected override string CallFunction(string functionName, string[] parameters
{
if (function.Name.Equals(functionName, StringComparison.OrdinalIgnoreCase))
{
if (function.MinParameterLength > 0 && (parameters == null || parameters.Length < function.MinParameterLength))
{
throw new Exception($"Minimum parameter length for function \"{function.Name}\" is {function.MinParameterLength}.");
}
return function.Call(this, parameters);
}
}