Files
meeting-assistant/MeetingAssistant/Recording/MeetingArtifactContentDetector.cs
codex edade8ab62
PR and Push Build/Test / build-and-test (push) Failing after 14m53s
Add meeting inactivity safeguards
2026-06-03 08:30:15 +02:00

60 lines
2.1 KiB
C#

using MeetingAssistant.MeetingNotes;
namespace MeetingAssistant.Recording;
internal static class MeetingArtifactContentDetector
{
private static readonly string[] DefaultAssistantContextLines =
[
"# Assistant Context",
"## Live Context"
];
public static async Task<bool> IsDefaultOnlyAsync(
MeetingSessionArtifacts artifacts,
CancellationToken cancellationToken)
{
if (!File.Exists(artifacts.MeetingNotePath) ||
!File.Exists(artifacts.TranscriptPath) ||
!File.Exists(artifacts.AssistantContextPath))
{
return false;
}
var meetingNote = await File.ReadAllTextAsync(artifacts.MeetingNotePath, cancellationToken);
var transcript = await File.ReadAllTextAsync(artifacts.TranscriptPath, cancellationToken);
var assistantContext = await File.ReadAllTextAsync(artifacts.AssistantContextPath, cancellationToken);
return IsDefaultOnlyMeetingNote(meetingNote) &&
IsDefaultOnlyTranscript(transcript) &&
IsDefaultOnlyAssistantContext(assistantContext);
}
private static bool IsDefaultOnlyMeetingNote(string content)
{
return string.IsNullOrWhiteSpace(MarkdownDocumentParser.SplitOptional(content).Body);
}
private static bool IsDefaultOnlyTranscript(string content)
{
var body = MarkdownDocumentParser.SplitOptional(content).Body;
return GetMeaningfulLines(body)
.All(line => string.Equals(line, "# Meeting Transcript", StringComparison.OrdinalIgnoreCase));
}
private static bool IsDefaultOnlyAssistantContext(string content)
{
var body = MarkdownDocumentParser.SplitOptional(content).Body;
return GetMeaningfulLines(body)
.All(line => DefaultAssistantContextLines.Contains(line, StringComparer.OrdinalIgnoreCase));
}
private static IEnumerable<string> GetMeaningfulLines(string body)
{
return body
.Split(["\r\n", "\n"], StringSplitOptions.None)
.Select(line => line.Trim())
.Where(line => !string.IsNullOrWhiteSpace(line));
}
}