public async Task <DialogTurnResult> PromptToDelete(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken)) { try { var state = await EmailStateAccessor.GetAsync(sc.Context); var skillOptions = (EmailSkillDialogOptions)sc.Options; var message = state.Message?.FirstOrDefault(); if (message != null) { var nameListString = DisplayHelper.ToDisplayRecipientsString_Summay(message.ToRecipients); var senderIcon = await GetUserPhotoUrlAsync(sc.Context, message.Sender.EmailAddress); var emailCard = new EmailCardData { Subject = message.Subject, EmailContent = message.BodyPreview, Sender = message.Sender.EmailAddress.Name, EmailLink = message.WebLink, ReceivedDateTime = message?.ReceivedDateTime == null ? CommonStrings.NotAvailable : message.ReceivedDateTime.Value.UtcDateTime.ToDetailRelativeString(state.GetUserTimeZone()), Speak = SpeakHelper.ToSpeechEmailDetailOverallString(message, state.GetUserTimeZone()), SenderIcon = senderIcon }; emailCard = await ProcessRecipientPhotoUrl(sc.Context, emailCard, message.ToRecipients); var speech = SpeakHelper.ToSpeechEmailSendDetailString(message.Subject, nameListString, message.BodyPreview); var tokens = new StringDictionary { { "EmailDetails", speech }, }; var recipientCard = message.ToRecipients.Count() > 5 ? GetDivergedCardName(sc.Context, "DetailCard_RecipientMoreThanFive") : GetDivergedCardName(sc.Context, "DetailCard_RecipientLessThanFive"); var prompt = ResponseManager.GetCardResponse( DeleteEmailResponses.DeleteConfirm, new Card("EmailDetailCard", emailCard), tokens, "items", new List <Card>().Append(new Card(recipientCard, emailCard))); var retry = ResponseManager.GetResponse(EmailSharedResponses.ConfirmSendFailed); return(await sc.PromptAsync(Actions.TakeFurtherAction, new PromptOptions { Prompt = prompt, RetryPrompt = retry })); } skillOptions.SubFlowMode = true; return(await sc.BeginDialogAsync(Actions.UpdateSelectMessage, skillOptions)); } catch (Exception ex) { await HandleDialogExceptions(sc, ex); return(new DialogTurnResult(DialogTurnStatus.Cancelled, CommonUtil.DialogTurnResultCancelAllDialogs)); } }
protected async Task <DialogTurnResult> ConfirmBeforeSending(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken)) { try { var state = await EmailStateAccessor.GetAsync(sc.Context); if (sc.Result != null) { if (string.IsNullOrEmpty(state.Content)) { sc.Context.Activity.Properties.TryGetValue("OriginText", out var content); state.Content = content != null?content.ToString() : sc.Context.Activity.Text; } } string nameListString; // this means reply confirm if (state.Recipients.FirstOrDefault() == null) { await GetPreviewSubject(sc, Actions.Reply); nameListString = await GetPreviewNameListString(sc, Actions.Reply); } else if (state.Subject == null) { // this mean forward confirm await GetPreviewSubject(sc, Actions.Forward); nameListString = await GetPreviewNameListString(sc, Actions.Forward); } else { nameListString = await GetPreviewNameListString(sc, Actions.Send); } var emailCard = new EmailCardData { Subject = string.Format(CommonStrings.SubjectFormat, state.Subject), NameList = string.Format(CommonStrings.ToFormat, nameListString), EmailContent = string.Format(CommonStrings.ContentFormat, state.Content), }; var speech = SpeakHelper.ToSpeechEmailSendDetailString(emailCard.Subject, emailCard.NameList, emailCard.EmailContent); var stringToken = new StringDictionary { { "EmailDetails", speech }, }; var replyMessage = sc.Context.Activity.CreateAdaptiveCardReply(EmailSharedResponses.ConfirmSend, "Dialogs/Shared/Resources/Cards/EmailWithOutButtonCard.json", emailCard, ResponseBuilder, stringToken); return(await sc.PromptAsync(Actions.TakeFurtherAction, new PromptOptions { Prompt = replyMessage, RetryPrompt = sc.Context.Activity.CreateReply(EmailSharedResponses.ConfirmSendFailed, ResponseBuilder), })); } catch (Exception ex) { throw await HandleDialogExceptions(sc, ex); } }
public async Task <DialogTurnResult> PromptToDeleteAsync(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken)) { try { var state = await EmailStateAccessor.GetAsync(sc.Context, cancellationToken : cancellationToken); var skillOptions = (EmailSkillDialogOptions)sc.Options; var message = state.Message?.FirstOrDefault(); if (message != null) { var nameListString = DisplayHelper.ToDisplayRecipientsString_Summay(message.ToRecipients); var senderIcon = await GetUserPhotoUrlAsync(sc.Context, message.Sender.EmailAddress, cancellationToken); var emailCard = new EmailCardData { Subject = message.Subject, EmailContent = message.BodyPreview, Sender = message.Sender.EmailAddress.Name, EmailLink = message.WebLink, ReceivedDateTime = message?.ReceivedDateTime == null ? CommonStrings.NotAvailable : message.ReceivedDateTime.Value.UtcDateTime.ToDetailRelativeString(state.GetUserTimeZone()), Speak = SpeakHelper.ToSpeechEmailDetailOverallString(message, state.GetUserTimeZone()), SenderIcon = senderIcon }; emailCard = await ProcessRecipientPhotoUrlAsync(sc.Context, emailCard, message.ToRecipients, cancellationToken); var speech = SpeakHelper.ToSpeechEmailSendDetailString(message.Subject, nameListString, message.BodyPreview); var prompt = TemplateManager.GenerateActivityForLocale( DeleteEmailResponses.DeleteConfirm, new { emailInfo = speech, emailDetails = emailCard }); var retry = TemplateManager.GenerateActivityForLocale(EmailSharedResponses.ConfirmSendFailed); return(await sc.PromptAsync(Actions.TakeFurtherAction, new PromptOptions { Prompt = prompt as Activity, RetryPrompt = retry as Activity })); } skillOptions.SubFlowMode = true; return(await sc.BeginDialogAsync(Actions.UpdateSelectMessage, skillOptions, cancellationToken)); } catch (Exception ex) { await HandleDialogExceptionsAsync(sc, ex, cancellationToken); return(new DialogTurnResult(DialogTurnStatus.Cancelled, CommonUtil.DialogTurnResultCancelAllDialogs)); } }
public async Task <DialogTurnResult> PromptToDelete(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken)) { try { var state = await EmailStateAccessor.GetAsync(sc.Context); var skillOptions = (EmailSkillDialogOptions)sc.Options; var focusedMessage = state.Message?.FirstOrDefault(); if (focusedMessage != null) { var nameListString = DisplayHelper.ToDisplayRecipientsString_Summay(focusedMessage.ToRecipients); var emailCard = new EmailCardData { Subject = string.Format(EmailCommonStrings.SubjectFormat, focusedMessage.Subject), NameList = string.Format(EmailCommonStrings.ToFormat, nameListString), EmailContent = string.Format(EmailCommonStrings.ContentFormat, focusedMessage.BodyPreview), }; var speech = SpeakHelper.ToSpeechEmailSendDetailString(focusedMessage.Subject, nameListString, focusedMessage.BodyPreview); var tokens = new StringDictionary { { "EmailDetails", speech }, }; var prompt = ResponseManager.GetCardResponse( DeleteEmailResponses.DeleteConfirm, new Card("EmailWithOutButtonCard", emailCard), tokens); var retry = ResponseManager.GetResponse(EmailSharedResponses.ConfirmSendFailed); return(await sc.PromptAsync(Actions.TakeFurtherAction, new PromptOptions { Prompt = prompt, RetryPrompt = retry })); } skillOptions.SubFlowMode = true; return(await sc.BeginDialogAsync(Actions.UpdateSelectMessage, skillOptions)); } catch (Exception ex) { await HandleDialogExceptions(sc, ex); return(new DialogTurnResult(DialogTurnStatus.Cancelled, CommonUtil.DialogTurnResultCancelAllDialogs)); } }