/// <summary> /// Check if To Do task index is valid. /// </summary> /// <param name="sc">current step context.</param> /// <param name="cancellationToken">cancellation token.</param> /// <returns>Task completion.</returns> public async Task <DialogTurnResult> AfterAskToDoTaskIndex(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken)) { var state = await this.accessors.ToDoSkillState.GetAsync(sc.Context); if (string.IsNullOrEmpty(state.ToDoTaskContent) && !state.MarkOrDeleteAllTasksFlag && (state.ToDoTaskIndexes.Count == 0 || state.ToDoTaskIndexes[0] < 0 || state.ToDoTaskIndexes[0] >= state.ToDoTaskActivities.Count)) { var luisResult = await this.toDoSkillServices.LuisRecognizer.RecognizeAsync <ToDo>(sc.Context, cancellationToken); ToDoHelper.DigestLuisResult(luisResult, sc.Context.Activity.Text, ref state); } var matchedIndexes = Enumerable.Range(0, state.ToDoTaskAllActivities.Count) .Where(i => state.ToDoTaskAllActivities[i].Topic.Equals(state.ToDoTaskContent, StringComparison.OrdinalIgnoreCase)) .ToList(); if (matchedIndexes?.Count > 0) { state.ToDoTaskIndexes = matchedIndexes; return(await sc.EndDialogAsync(true)); } else { var userInput = sc.Context.Activity.Text; matchedIndexes = Enumerable.Range(0, state.ToDoTaskAllActivities.Count) .Where(i => state.ToDoTaskAllActivities[i].Topic.Equals(userInput, StringComparison.OrdinalIgnoreCase)) .ToList(); if (matchedIndexes?.Count > 0) { state.ToDoTaskIndexes = matchedIndexes; return(await sc.EndDialogAsync(true)); } } if (state.MarkOrDeleteAllTasksFlag) { return(await sc.EndDialogAsync(true)); } if (state.ToDoTaskIndexes.Count == 1 && state.ToDoTaskIndexes[0] >= 0 && state.ToDoTaskIndexes[0] < state.ToDoTaskActivities.Count) { state.ToDoTaskIndexes[0] = (state.PageSize * state.ShowToDoPageIndex) + state.ToDoTaskIndexes[0]; return(await sc.EndDialogAsync(true)); } else { state.ToDoTaskContent = null; return(await sc.BeginDialogAsync(Action.CollectToDoTaskIndex)); } }
/// <summary> /// Check if To Do task index is valid. /// </summary> /// <param name="sc">current step context.</param> /// <param name="cancellationToken">cancellation token.</param> /// <returns>Task completion.</returns> public async Task <DialogTurnResult> AfterAskToDoTaskIndex(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken)) { var state = await this.accessors.ToDoSkillState.GetAsync(sc.Context); if (!state.MarkOrDeleteAllTasksFlag && (state.ToDoTaskIndex < 0 || state.ToDoTaskIndex >= state.ToDoTaskActivities.Count)) { var luisResult = await this.toDoSkillServices.LuisRecognizer.RecognizeAsync <ToDo>(sc.Context, cancellationToken); ToDoHelper.DigestLuisResult(luisResult, sc.Context.Activity.Text, ref state); } if (state.MarkOrDeleteAllTasksFlag || (state.ToDoTaskIndex >= 0 && state.ToDoTaskIndex < state.ToDoTaskActivities.Count)) { return(await sc.EndDialogAsync(true)); } else { return(await sc.BeginDialogAsync(Action.CollectToDoTaskIndex)); } }