Public Access
64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
namespace MeetingAssistant.Recording;
|
|
|
|
public interface IMeetingInactivityPromptService
|
|
{
|
|
Task ShowStopPromptAsync(
|
|
MeetingInactivityPromptRequest request,
|
|
Func<MeetingInactivityPromptResponse, CancellationToken, Task> handleResponseAsync,
|
|
CancellationToken cancellationToken);
|
|
|
|
Task DismissAllAsync(CancellationToken cancellationToken);
|
|
}
|
|
|
|
public sealed record MeetingInactivityPromptRequest(
|
|
TimeSpan InactivityDuration,
|
|
DateTimeOffset SuggestedEndTime,
|
|
int PromptIndex,
|
|
TimeSpan Threshold);
|
|
|
|
public enum MeetingInactivityPromptResponse
|
|
{
|
|
Dismissed,
|
|
Continue,
|
|
Pause,
|
|
Stop
|
|
}
|
|
|
|
internal sealed record MeetingInactivityPromptAction(
|
|
string Content,
|
|
string ResponseArgument,
|
|
MeetingInactivityPromptResponse Response);
|
|
|
|
internal static class MeetingInactivityPromptActions
|
|
{
|
|
public static IReadOnlyList<MeetingInactivityPromptAction> All { get; } =
|
|
[
|
|
new("Yes", "stop", MeetingInactivityPromptResponse.Stop),
|
|
new("No", "continue", MeetingInactivityPromptResponse.Continue),
|
|
new("Pause transcription", "pause", MeetingInactivityPromptResponse.Pause)
|
|
];
|
|
|
|
public static MeetingInactivityPromptResponse ParseResponse(string? value)
|
|
{
|
|
return All.FirstOrDefault(action =>
|
|
action.ResponseArgument.Equals(value, StringComparison.OrdinalIgnoreCase))
|
|
?.Response ?? MeetingInactivityPromptResponse.Continue;
|
|
}
|
|
}
|
|
|
|
public sealed class NoopMeetingInactivityPromptService : IMeetingInactivityPromptService
|
|
{
|
|
public Task ShowStopPromptAsync(
|
|
MeetingInactivityPromptRequest request,
|
|
Func<MeetingInactivityPromptResponse, CancellationToken, Task> handleResponseAsync,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task DismissAllAsync(CancellationToken cancellationToken)
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|