in utils/SkiaSharpGenerator/Cookies/CookieDetector.cs [37:100]
public async Task DetectAsync()
{
Log?.LogVerbose("Downloading source...");
var code = await DownloadLatestCodeAsync();
if (string.IsNullOrEmpty(code))
{
Log?.LogError("Downloading source failed.");
throw new Exception("Downloading source failed.");
}
compilation = (CSharpSyntaxTree)CSharpSyntaxTree.ParseText(code);
if (compilation == null || HasErrors)
{
Log?.LogError("Parsing source failed.");
throw new Exception("Parsing source failed.");
}
Log?.LogVerbose("Parsing cookies...");
var cookies = GetExistingCookies();
if (cookies == null || cookies.Length == 0)
{
Log?.LogError("Retreiving cookies failed.");
throw new Exception("Retreiving cookies failed.");
}
Log?.LogVerbose($"Found {cookies.Length} cookies.");
Log?.LogVerbose("Loading .NET assembly...");
var signatures = ParseAssembly(type);
Log?.LogVerbose($"Found {signatures.Length} signatures.");
var newSignatures = signatures
.Where(s => !cookies.Contains(s.Signature))
.ToArray();
if (newSignatures.Length > 0)
{
Log?.LogWarning($"Found {newSignatures.Length} NEW signatures.");
foreach (var sig in newSignatures)
{
Log?.LogVerbose($"{sig}");
Log?.LogVerbose($"Potential matches: {string.Join(", ", GetMatches(sig.Signature))}");
}
Log?.Log(string.Join(Environment.NewLine, newSignatures.Select(s => s.Signature).Distinct()));
}
else
{
Log?.LogVerbose($"Found NO new signatures.");
}
IEnumerable<string> GetMatches(string signature)
{
return cookies.Where(c =>
c.Length == signature.Length &&
c[0] == signature[0] &&
string.Concat(c.Substring(1).ToCharArray().OrderBy(x => x)) == string.Concat(signature.Substring(1).ToCharArray().OrderBy(x => x)));
}
}