Public Access
Add attendee transformation workflows
This commit is contained in:
@@ -213,7 +213,12 @@ public sealed class MeetingRecordingCoordinator
|
||||
currentMeetingNote = await meetingNoteStore.ReadAsync(currentMeetingNote.Path, cancellationToken);
|
||||
if (suppliedMetadata is not null)
|
||||
{
|
||||
await ApplyMeetingMetadataAsync(currentMeetingNote, suppliedMetadata, runOptions, cancellationToken);
|
||||
await ApplyMeetingMetadataAsync(
|
||||
currentArtifacts,
|
||||
currentMeetingNote,
|
||||
suppliedMetadata,
|
||||
runOptions,
|
||||
cancellationToken);
|
||||
currentMeetingNote = await meetingNoteStore.SaveAsync(
|
||||
currentMeetingNote,
|
||||
runOptions,
|
||||
@@ -1030,7 +1035,7 @@ public sealed class MeetingRecordingCoordinator
|
||||
}
|
||||
|
||||
var meetingNote = await meetingNoteStore.ReadAsync(run.MeetingNotePath, CancellationToken.None);
|
||||
await ApplyMeetingMetadataAsync(meetingNote, metadata, run.Options, CancellationToken.None);
|
||||
await ApplyMeetingMetadataAsync(run.Artifacts, meetingNote, metadata, run.Options, CancellationToken.None);
|
||||
meetingNote = await meetingNoteStore.SaveAsync(meetingNote, run.Options, CancellationToken.None);
|
||||
if (currentMeetingNote?.Path == meetingNote.Path)
|
||||
{
|
||||
@@ -1082,6 +1087,7 @@ public sealed class MeetingRecordingCoordinator
|
||||
}
|
||||
|
||||
private async Task ApplyMeetingMetadataAsync(
|
||||
MeetingSessionArtifacts artifacts,
|
||||
MeetingNote meetingNote,
|
||||
MeetingMetadata metadata,
|
||||
MeetingAssistantOptions options,
|
||||
@@ -1104,10 +1110,39 @@ public sealed class MeetingRecordingCoordinator
|
||||
return;
|
||||
}
|
||||
|
||||
meetingNote.Frontmatter.Attendees = await CanonicalizeAttendeesAsync(metadata.Attendees, cancellationToken);
|
||||
var canonicalized = await CanonicalizeAttendeesAsync(metadata.Attendees, cancellationToken);
|
||||
meetingNote.Frontmatter.Attendees = await TransformAttendeesAsync(
|
||||
artifacts,
|
||||
canonicalized,
|
||||
options,
|
||||
cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<List<string>> TransformAttendeesAsync(
|
||||
MeetingSessionArtifacts artifacts,
|
||||
IReadOnlyList<string> attendees,
|
||||
MeetingAssistantOptions options,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var transformed = new List<string>();
|
||||
foreach (var attendee in attendees)
|
||||
{
|
||||
var value = await TransformAttendeeAsync(artifacts, attendee, options, cancellationToken);
|
||||
var storageValue = string.Equals(value, attendee, StringComparison.Ordinal)
|
||||
? attendee.Trim()
|
||||
: NormalizeAttendeeName(value);
|
||||
var normalized = NormalizeAttendeeName(storageValue);
|
||||
if (!string.IsNullOrWhiteSpace(normalized) &&
|
||||
!transformed.Contains(normalized, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
transformed.Add(storageValue);
|
||||
}
|
||||
}
|
||||
|
||||
return transformed;
|
||||
}
|
||||
|
||||
private async Task<List<string>> CanonicalizeAttendeesAsync(
|
||||
IReadOnlyList<string> attendees,
|
||||
CancellationToken cancellationToken)
|
||||
@@ -1422,8 +1457,17 @@ public sealed class MeetingRecordingCoordinator
|
||||
continue;
|
||||
}
|
||||
|
||||
var transformedDisplayName = await TransformAttendeeAsync(
|
||||
artifacts,
|
||||
match.DisplayName.Trim(),
|
||||
runOptions,
|
||||
cancellationToken);
|
||||
var displayName = string.Equals(transformedDisplayName, match.DisplayName.Trim(), StringComparison.Ordinal)
|
||||
? match.DisplayName.Trim()
|
||||
: NormalizeAttendeeName(transformedDisplayName);
|
||||
var acceptedNames = match.AcceptedNames
|
||||
.Append(match.DisplayName)
|
||||
.Append(displayName)
|
||||
.Select(NormalizeAttendeeName)
|
||||
.Where(name => !string.IsNullOrWhiteSpace(name))
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
@@ -1442,7 +1486,6 @@ public sealed class MeetingRecordingCoordinator
|
||||
continue;
|
||||
}
|
||||
|
||||
var displayName = match.DisplayName.Trim();
|
||||
meetingNote.Frontmatter.Attendees.Add(displayName);
|
||||
existingNames.Add(NormalizeAttendeeName(displayName));
|
||||
changed = true;
|
||||
@@ -1502,6 +1545,18 @@ public sealed class MeetingRecordingCoordinator
|
||||
return MeetingAttendeeNames.NormalizeDisplayName(attendee);
|
||||
}
|
||||
|
||||
private async Task<string> TransformAttendeeAsync(
|
||||
MeetingSessionArtifacts artifacts,
|
||||
string attendee,
|
||||
MeetingAssistantOptions options,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
return await meetingWorkflowEngine.TransformAttendeeAsync(
|
||||
MeetingWorkflowEvent.AttendeeAdded(artifacts, attendee),
|
||||
options,
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
private static bool RemoveDuplicateAcceptedAliases(
|
||||
List<string> attendees,
|
||||
string displayName,
|
||||
|
||||
Reference in New Issue
Block a user