refactor: split node agent and Go control plane
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
namespace WxAgent.Core;
|
||||
|
||||
public sealed record WechatSessionSnapshot(string Name, string AutomationId, bool IsCurrent);
|
||||
|
||||
public sealed record WechatSessionSearchResult(string Name, string AutomationId, string? Category, bool IsExactMatch);
|
||||
|
||||
public static class WechatSessionParser
|
||||
{
|
||||
public static IReadOnlyList<WechatSessionSnapshot> Parse(
|
||||
IEnumerable<(string AutomationId, string Name)> elements,
|
||||
string? currentName)
|
||||
{
|
||||
return elements
|
||||
.Where(element => element.AutomationId.StartsWith("session_item_", StringComparison.Ordinal) &&
|
||||
!string.IsNullOrWhiteSpace(element.Name))
|
||||
.DistinctBy(element => element.AutomationId, StringComparer.Ordinal)
|
||||
.Select(element => new WechatSessionSnapshot(
|
||||
element.Name,
|
||||
element.AutomationId,
|
||||
string.Equals(element.Name, currentName, StringComparison.Ordinal)))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
public static IReadOnlyList<WechatSessionSearchResult> ParseSearchResults(
|
||||
IEnumerable<(string AutomationId, string AccessibleName)> elements,
|
||||
string query)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(query);
|
||||
return elements
|
||||
.Where(element => element.AutomationId.StartsWith("search_item_", StringComparison.Ordinal) &&
|
||||
!string.IsNullOrWhiteSpace(element.AccessibleName))
|
||||
.DistinctBy(element => element.AutomationId, StringComparer.Ordinal)
|
||||
.Select(element =>
|
||||
{
|
||||
var lines = element.AccessibleName.Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
||||
var exact = lines.FirstOrDefault(line => string.Equals(line, query, StringComparison.Ordinal));
|
||||
var name = exact ?? lines.Last();
|
||||
var category = lines.Length > 1 && !string.Equals(lines[0], name, StringComparison.Ordinal) ? lines[0] : null;
|
||||
return new WechatSessionSearchResult(name, element.AutomationId, category, exact is not null);
|
||||
})
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user