Esempio n. 1
0
        /// <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));
            }
        }
Esempio n. 2
0
        /// <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));
            }
        }