Files
wx-win-agent/node-agent/WxAgent.Core/WechatSessions.cs
T
rogee 13c31fc902
Build web service image / build (push) Successful in 1m53s
feat: add remote control plane and whitelist reads
2026-09-12 09:46:05 +08:00

45 lines
2.2 KiB
C#

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 =>
{
var name = element.Name.Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries).FirstOrDefault() ?? element.Name;
return new WechatSessionSnapshot(name, element.AutomationId, string.Equals(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();
}
}