diff --git a/skills/src/csharp/calendarskill/calendarskill/Dialogs/CalendarSkillDialogBase.cs b/skills/src/csharp/calendarskill/calendarskill/Dialogs/CalendarSkillDialogBase.cs index 9e4bfce47d..1cbc09e9f9 100644 --- a/skills/src/csharp/calendarskill/calendarskill/Dialogs/CalendarSkillDialogBase.cs +++ b/skills/src/csharp/calendarskill/calendarskill/Dialogs/CalendarSkillDialogBase.cs @@ -816,14 +816,15 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.FromDate != null) { var dateString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromDate[0]); - var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (date != null) { state.MeetingInfor.CreateHasDetail = true; state.MeetingInfor.StartDate = date; } - date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + // get end date from time range + date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (date != null) { state.MeetingInfor.CreateHasDetail = true; @@ -831,10 +832,10 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui } } - if (entity.ToDate != null && !state.MeetingInfor.EndDate.Any()) + if (entity.ToDate != null) { var dateString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.ToDate[0]); - var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone()); + var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, false); if (date != null) { state.MeetingInfor.CreateHasDetail = true; @@ -845,14 +846,14 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.FromTime != null) { var timeString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromTime[0]); - var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (time != null) { state.MeetingInfor.CreateHasDetail = true; state.MeetingInfor.StartTime = time; } - time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (time != null) { state.MeetingInfor.CreateHasDetail = true; @@ -860,10 +861,10 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui } } - if (entity.ToTime != null && !state.MeetingInfor.EndTime.Any()) + if (entity.ToTime != null) { var timeString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.ToTime[0]); - var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone()); + var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, false); if (time != null) { state.MeetingInfor.CreateHasDetail = true; @@ -914,13 +915,13 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.FromDate != null) { var dateString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromDate[0]); - var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (date != null) { state.MeetingInfor.StartDate = date; } - date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (date != null) { state.MeetingInfor.EndDate = date; @@ -930,13 +931,13 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.FromTime != null) { var timeString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromTime[0]); - var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (time != null) { state.MeetingInfor.StartTime = time; } - time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (time != null) { state.MeetingInfor.EndTime = time; @@ -956,13 +957,13 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.FromDate != null) { var dateString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromDate[0]); - var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (date != null) { state.MeetingInfor.StartDate = date; } - date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (date != null) { state.MeetingInfor.EndDate = date; @@ -972,23 +973,29 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.ToDate != null) { var dateString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.ToDate[0]); - var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone()); + var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (date != null) { state.UpdateMeetingInfor.NewStartDate = date; } + + date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); + if (date != null) + { + state.UpdateMeetingInfor.NewEndDate = date; + } } if (entity.FromTime != null) { var timeString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromTime[0]); - var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (time != null) { state.MeetingInfor.StartTime = time; } - time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (time != null) { state.MeetingInfor.EndTime = time; @@ -998,13 +1005,13 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.ToTime != null) { var timeString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.ToTime[0]); - var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (time != null) { state.UpdateMeetingInfor.NewStartTime = time; } - time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (time != null) { state.UpdateMeetingInfor.NewEndTime = time; @@ -1050,24 +1057,24 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.FromDate != null) { var dateString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromDate[0]); - var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (date != null) { state.MeetingInfor.StartDate = date; state.MeetingInfor.StartDateString = dateString; } - date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (date != null) { state.MeetingInfor.EndDate = date; } } - if (entity.ToDate != null && !state.MeetingInfor.EndDate.Any()) + if (entity.ToDate != null) { var dateString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.ToDate[0]); - var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone()); + var date = GetDateFromDateTimeString(dateString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, false); if (date != null) { state.MeetingInfor.EndDate = date; @@ -1077,23 +1084,23 @@ protected async Task DigestCalendarLuisResult(DialogContext dc, CalendarLuis lui if (entity.FromTime != null) { var timeString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.FromTime[0]); - var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true); + var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), true, false); if (time != null) { state.MeetingInfor.StartTime = time; } - time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false); + time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, true); if (time != null) { state.MeetingInfor.EndTime = time; } } - if (entity.ToTime != null && !state.MeetingInfor.EndTime.Any()) + if (entity.ToTime != null) { var timeString = GetDateTimeStringFromInstanceData(luisResult.Text, entity._instance.ToTime[0]); - var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone()); + var time = GetTimeFromDateTimeString(timeString, dc.Context.Activity.Locale, state.GetUserTimeZone(), false, false); if (time != null) { state.MeetingInfor.EndTime = time; @@ -1548,8 +1555,9 @@ private string GetDateTimeStringFromInstanceData(string inputString, InstanceDat return inputString.Substring(data.StartIndex, data.EndIndex - data.StartIndex); } - private List GetDateFromDateTimeString(string date, string local, TimeZoneInfo userTimeZone, bool isStart = true) + private List GetDateFromDateTimeString(string date, string local, TimeZoneInfo userTimeZone, bool isStart, bool isTargetTimeRange) { + // if isTargetTimeRange is true, will only parse the time range var culture = local ?? English; var results = RecognizeDateTime(date, culture, userTimeZone, true); var dateTimeResults = new List(); @@ -1559,7 +1567,7 @@ private List GetDateFromDateTimeString(string date, string local, Time { if (result.Value != null) { - if (!isStart) + if (isTargetTimeRange) { break; } @@ -1591,9 +1599,9 @@ private List GetDateFromDateTimeString(string date, string local, Time return dateTimeResults; } - private List GetTimeFromDateTimeString(string time, string local, TimeZoneInfo userTimeZone, bool isStart = true) + private List GetTimeFromDateTimeString(string time, string local, TimeZoneInfo userTimeZone, bool isStart, bool isTargetTimeRange) { - // if isStart is false, will only get the end time of a timerange + // if isTargetTimeRange is true, will only parse the time range var culture = local ?? English; var results = RecognizeDateTime(time, culture, userTimeZone, false); var dateTimeResults = new List(); @@ -1603,7 +1611,7 @@ private List GetTimeFromDateTimeString(string time, string local, Time { if (result.Value != null) { - if (!isStart) + if (isTargetTimeRange) { break; }