mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-04 12:14:45 +13:00
Refactoring custom uploader syntax parsing
This commit is contained in:
parent
7f0e7e34dd
commit
421ea7fc86
1 changed files with 61 additions and 58 deletions
|
@ -198,7 +198,6 @@ private string ParseURL(string url, bool output)
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
|
|
||||||
bool syntaxStart = false;
|
bool syntaxStart = false;
|
||||||
CustomUploaderResponseParseType parseType = CustomUploaderResponseParseType.Regex;
|
|
||||||
int syntaxStartIndex = 0;
|
int syntaxStartIndex = 0;
|
||||||
|
|
||||||
for (int i = 0; i < url.Length; i++)
|
for (int i = 0; i < url.Length; i++)
|
||||||
|
@ -208,72 +207,23 @@ private string ParseURL(string url, bool output)
|
||||||
if (!syntaxStart)
|
if (!syntaxStart)
|
||||||
{
|
{
|
||||||
syntaxStart = true;
|
syntaxStart = true;
|
||||||
|
syntaxStartIndex = i + 1;
|
||||||
string syntaxCheck = url.Substring(i + 1);
|
|
||||||
|
|
||||||
if (syntaxCheck.StartsWith("regex:", StringComparison.InvariantCultureIgnoreCase)) // Example: $regex:1,1$
|
|
||||||
{
|
|
||||||
parseType = CustomUploaderResponseParseType.Regex;
|
|
||||||
syntaxStartIndex = i + 7;
|
|
||||||
}
|
|
||||||
else if (syntaxCheck.StartsWith("json:", StringComparison.InvariantCultureIgnoreCase)) // Example: $json:Files[0].URL$
|
|
||||||
{
|
|
||||||
parseType = CustomUploaderResponseParseType.Json;
|
|
||||||
syntaxStartIndex = i + 6;
|
|
||||||
}
|
|
||||||
else if (syntaxCheck.StartsWith("xml:", StringComparison.InvariantCultureIgnoreCase)) // Example: $xml:/Files/File[1]/URL$
|
|
||||||
{
|
|
||||||
parseType = CustomUploaderResponseParseType.Xml;
|
|
||||||
syntaxStartIndex = i + 5;
|
|
||||||
}
|
|
||||||
else if (syntaxCheck.StartsWith("random:", StringComparison.InvariantCultureIgnoreCase)) // Example: $random:domain1.com|domain2.com$
|
|
||||||
{
|
|
||||||
parseType = CustomUploaderResponseParseType.Random;
|
|
||||||
syntaxStartIndex = i + 8;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
parseType = CustomUploaderResponseParseType.Regex;
|
|
||||||
syntaxStartIndex = i + 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string parseText = url.Substring(syntaxStartIndex, i - syntaxStartIndex).Trim();
|
syntaxStart = false;
|
||||||
|
int syntaxLength = i - syntaxStartIndex;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(parseText))
|
if (syntaxLength > 0)
|
||||||
{
|
{
|
||||||
string resultText = null;
|
string syntax = url.Substring(syntaxStartIndex, syntaxLength);
|
||||||
|
string syntaxResult = ParseSyntax(syntax, output);
|
||||||
|
|
||||||
if (output)
|
if (!string.IsNullOrEmpty(syntaxResult))
|
||||||
{
|
{
|
||||||
switch (parseType)
|
result.Append(syntaxResult);
|
||||||
{
|
|
||||||
default:
|
|
||||||
case CustomUploaderResponseParseType.Regex:
|
|
||||||
resultText = ParseRegexSyntax(parseText);
|
|
||||||
break;
|
|
||||||
case CustomUploaderResponseParseType.Json:
|
|
||||||
resultText = ParseJsonSyntax(parseText);
|
|
||||||
break;
|
|
||||||
case CustomUploaderResponseParseType.Xml:
|
|
||||||
resultText = ParseXmlSyntax(parseText);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parseType == CustomUploaderResponseParseType.Random)
|
|
||||||
{
|
|
||||||
resultText = ParseRandomSyntax(parseText);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(resultText))
|
|
||||||
{
|
|
||||||
result.Append(resultText);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
syntaxStart = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!syntaxStart)
|
else if (!syntaxStart)
|
||||||
|
@ -285,6 +235,59 @@ private string ParseURL(string url, bool output)
|
||||||
return result.ToString();
|
return result.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string ParseSyntax(string syntax, bool output)
|
||||||
|
{
|
||||||
|
CustomUploaderResponseParseType parseType;
|
||||||
|
|
||||||
|
if (syntax.StartsWith("regex:", StringComparison.InvariantCultureIgnoreCase)) // Example: $regex:1,1$
|
||||||
|
{
|
||||||
|
parseType = CustomUploaderResponseParseType.Regex;
|
||||||
|
syntax = syntax.Substring(6);
|
||||||
|
}
|
||||||
|
else if (syntax.StartsWith("json:", StringComparison.InvariantCultureIgnoreCase)) // Example: $json:Files[0].URL$
|
||||||
|
{
|
||||||
|
parseType = CustomUploaderResponseParseType.Json;
|
||||||
|
syntax = syntax.Substring(5);
|
||||||
|
}
|
||||||
|
else if (syntax.StartsWith("xml:", StringComparison.InvariantCultureIgnoreCase)) // Example: $xml:/Files/File[1]/URL$
|
||||||
|
{
|
||||||
|
parseType = CustomUploaderResponseParseType.Xml;
|
||||||
|
syntax = syntax.Substring(4);
|
||||||
|
}
|
||||||
|
else if (syntax.StartsWith("random:", StringComparison.InvariantCultureIgnoreCase)) // Example: $random:domain1.com|domain2.com$
|
||||||
|
{
|
||||||
|
parseType = CustomUploaderResponseParseType.Random;
|
||||||
|
syntax = syntax.Substring(7);
|
||||||
|
}
|
||||||
|
else // Example: $1,1$
|
||||||
|
{
|
||||||
|
parseType = CustomUploaderResponseParseType.Regex;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(syntax))
|
||||||
|
{
|
||||||
|
if (output)
|
||||||
|
{
|
||||||
|
switch (parseType)
|
||||||
|
{
|
||||||
|
case CustomUploaderResponseParseType.Regex:
|
||||||
|
return ParseRegexSyntax(syntax);
|
||||||
|
case CustomUploaderResponseParseType.Json:
|
||||||
|
return ParseJsonSyntax(syntax);
|
||||||
|
case CustomUploaderResponseParseType.Xml:
|
||||||
|
return ParseXmlSyntax(syntax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parseType == CustomUploaderResponseParseType.Random)
|
||||||
|
{
|
||||||
|
return ParseRandomSyntax(syntax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private string ParseRegexSyntax(string syntax)
|
private string ParseRegexSyntax(string syntax)
|
||||||
{
|
{
|
||||||
string regexIndexString = "";
|
string regexIndexString = "";
|
||||||
|
|
Loading…
Reference in a new issue