mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-09-14 15:43:37 +00:00
Optimized code for readability
This commit is contained in:
parent
7417c650f5
commit
ed3b00320f
@ -240,89 +240,16 @@ public static class WorkspaceBehaviour
|
|||||||
.Where(term => text.IndexOf(term, StringComparison.OrdinalIgnoreCase) < 0)
|
.Where(term => text.IndexOf(term, StringComparison.OrdinalIgnoreCase) < 0)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
private static bool TryGetProperty(JsonElement element, string propertyName, out JsonElement property)
|
private static bool ChatThreadContainsTerms(ChatThread thread, IReadOnlyList<string> terms)
|
||||||
{
|
{
|
||||||
if (element.ValueKind is JsonValueKind.Object)
|
|
||||||
{
|
|
||||||
foreach (var candidate in element.EnumerateObject())
|
|
||||||
{
|
|
||||||
if (string.Equals(candidate.Name, propertyName, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
property = candidate.Value;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
property = default;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool TryGetAnyProperty(JsonElement element, out JsonElement property, params string[] propertyNames)
|
|
||||||
{
|
|
||||||
foreach (var propertyName in propertyNames)
|
|
||||||
if (TryGetProperty(element, propertyName, out property))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
property = default;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool IsHiddenFromUser(JsonElement block)
|
|
||||||
{
|
|
||||||
if (!TryGetAnyProperty(block, out var hideFromUser, "hide_from_user", "HideFromUser"))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return hideFromUser.ValueKind is JsonValueKind.True || (hideFromUser.ValueKind is JsonValueKind.String && bool.TryParse(hideFromUser.GetString(), out var parsed) && parsed);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool TryReadTextContent(JsonElement block, out string text)
|
|
||||||
{
|
|
||||||
if (TryGetAnyProperty(block, out var contentType, "content_type", "ContentType")
|
|
||||||
&& contentType.ValueKind is JsonValueKind.String
|
|
||||||
&& !string.Equals(contentType.GetString(), "TEXT", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
text = string.Empty;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TryGetAnyProperty(block, out var content, "content", "Content") || content.ValueKind is not JsonValueKind.Object)
|
|
||||||
{
|
|
||||||
text = string.Empty;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TryGetAnyProperty(content, out var typeDiscriminator, "$type")
|
|
||||||
&& typeDiscriminator.ValueKind is JsonValueKind.String
|
|
||||||
&& !string.Equals(typeDiscriminator.GetString(), "text", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
text = string.Empty;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TryGetAnyProperty(content, out var textElement, "text", "Text") || textElement.ValueKind is not JsonValueKind.String)
|
|
||||||
{
|
|
||||||
text = string.Empty;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
text = textElement.GetString() ?? string.Empty;
|
|
||||||
return !string.IsNullOrWhiteSpace(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool VisibleThreadTextContainsTerms(JsonElement root, IReadOnlyList<string> terms)
|
|
||||||
{
|
|
||||||
if (!TryGetAnyProperty(root, out var blocks, "blocks", "Blocks") || blocks.ValueKind is not JsonValueKind.Array)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
var matchedTerms = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
var matchedTerms = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||||
foreach (var block in blocks.EnumerateArray())
|
foreach (var block in thread.Blocks)
|
||||||
{
|
{
|
||||||
if (IsHiddenFromUser(block) || !TryReadTextContent(block, out var text))
|
if (block.HideFromUser || block.Content is not ContentText textContent || string.IsNullOrWhiteSpace(textContent.Text))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
foreach (var term in terms)
|
foreach (var term in terms)
|
||||||
if (text.IndexOf(term, StringComparison.OrdinalIgnoreCase) >= 0)
|
if (textContent.Text.Contains(term, StringComparison.OrdinalIgnoreCase))
|
||||||
matchedTerms.Add(term);
|
matchedTerms.Add(term);
|
||||||
|
|
||||||
if (matchedTerms.Count == terms.Count)
|
if (matchedTerms.Count == terms.Count)
|
||||||
@ -344,9 +271,10 @@ public static class WorkspaceBehaviour
|
|||||||
if (!File.Exists(threadPath))
|
if (!File.Exists(threadPath))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
await using var stream = File.OpenRead(threadPath);
|
var chatData = await File.ReadAllTextAsync(threadPath, Encoding.UTF8, token);
|
||||||
using var document = await JsonDocument.ParseAsync(stream, cancellationToken: token);
|
token.ThrowIfCancellationRequested();
|
||||||
return VisibleThreadTextContainsTerms(document.RootElement, terms);
|
var thread = JsonSerializer.Deserialize<ChatThread>(chatData, JSON_OPTIONS);
|
||||||
|
return thread is not null && ChatThreadContainsTerms(thread, terms);
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user