45 lines
2.2 KiB
C#
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();
|
|
}
|
|
}
|