private async Task GetLUISInsights()

in snipinsights/windows/SnipInsight/AIServices/AIViewModels/OCRViewModel.cs [360:437]


    private async Task GetLUISInsights(string ocrText)
    {
        List<string> datesFound = new List<string>();

        CalendarButtonVisibility = Visibility.Collapsed;
        EmailButtonVisibility = Visibility.Collapsed;
        calendarDates.Clear();
        toAddress.Clear();

        try
        {
            var luisResult = await luisInsights.GetResult(ocrText);

            for (int i = 0; i < luisResult.Entities.Count; i++)
            {
                LUISModel.Entity entity = luisResult.Entities[i];
                LUISModel.Entity nextEntity = i + 1 < luisResult.Entities.Count ? luisResult.Entities[i + 1] : null;
                var validYear = @"^[1-9]\d*$";

                switch (entity.Type)
                {
                    case "builtin.email":
                        toAddress.Add(entity.TheEntity);
                        EmailAvailable = true;
                        break;
                    case "builtin.datetimeV2.datetime":
                        datesFound.Add(entity.Resolution.Values[0].TheValue);
                        break;
                    case "builtin.datetimeV2.date":
                        if (nextEntity != null && nextEntity.Type.Equals("builtin.datetimeV2.time"))
                        {
                            datesFound.Add(entity.Resolution.Values[0].TheValue + " " + nextEntity.Resolution.Values[0].TheValue);
                            i++;
                        }
                        else if (nextEntity != null && nextEntity.Type.Equals("builtin.datetimeV2.timerange"))
                        {
                            datesFound.Add(entity.Resolution.Values[0].TheValue + " " + nextEntity.Resolution.Values[0].Start);
                            datesFound.Add(entity.Resolution.Values[0].TheValue + " " + nextEntity.Resolution.Values[0].End);
                            i++;
                        }
                        else if (nextEntity != null && !nextEntity.Type.Equals("builtin.datetimeV2.daterange"))
                        {
                            datesFound.Add(entity.Resolution.Values.Count == 2 ? entity.Resolution.Values[1].TheValue : entity.Resolution.Values[0].TheValue);
                        }
                        break;
                    case "builtin.datetimeV2.daterange":
                        Match isYear = Regex.Match(entity.Resolution.Values[0].Timex, validYear);
                        // Should not create calender event for recognized year
                        if (!isYear.Success)
                        {
                            datesFound.Add(entity.Resolution.Values[0].Start);
                            datesFound.Add(entity.Resolution.Values[0].End);
                        }
                        break;
                    case "builtin.datetimeV2.time":
                        datesFound.Add(entity.Resolution.Values[0].TheValue);
                        break;
                    case "builtin.datetimeV2.timerange":
                        datesFound.Add(entity.Resolution.Values[0].Start);
                        datesFound.Add(entity.Resolution.Values[0].End);
                        break;
                    case "builtin.datetimeV2.datetimerange":
                        datesFound.Add(entity.Resolution.Values[0].Start);
                        datesFound.Add(entity.Resolution.Values[0].End);
                        break;
                }
            }

            DatesAvailable = ExtractDateTime(datesFound);
            EmailAvailable = (toAddress.Count > 0) ? true : false;
        }
        catch (WebException e)
        {
            Debug.WriteLine(e.Message);
            DatesAvailable = false;
            EmailAvailable = false;
        }
    }