Files
wx-win-agent/node-agent/WxAgent.Core/WechatDerivedText.cs
T

23 lines
1.3 KiB
C#

namespace WxAgent.Core;
public static class WechatDerivedText
{
// Only consume new text inside the bound message, never an entire window or an unbound OCR popup.
public static string? AddedText(IReadOnlyList<string> before, IReadOnlyList<string> after)
{
var remaining = before.Where(value => !string.IsNullOrWhiteSpace(value))
.GroupBy(value => value, StringComparer.Ordinal).ToDictionary(group => group.Key, group => group.Count(), StringComparer.Ordinal);
var added = new List<string>();
foreach (var value in after.Where(value => !string.IsNullOrWhiteSpace(value)))
{
if (remaining.GetValueOrDefault(value) > 0) remaining[value]--;
else added.Add(value);
}
if (remaining.Values.Any(count => count > 0) || added.Count == 0) return null;
if (added.Any(value => value.Contains("识别中", StringComparison.Ordinal) || value.Contains("转换中", StringComparison.Ordinal)
|| value.Contains("转换失败", StringComparison.Ordinal) || value.Contains("识别失败", StringComparison.Ordinal)
|| value.Contains("未识别到", StringComparison.Ordinal) || value.Contains("无法转换", StringComparison.Ordinal))) return null;
return string.Join(Environment.NewLine, added);
}
}