private async Task GetLUISInsights()

in Snip-Insights/SnipInsight/AIServices/AIViewModels/OCRViewModel.cs [435:512]


        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;
            }
        }