public static void RecordRecommendation(string user, UserRecommendationState state) { if (!givenRecommendations.ContainsKey(user)) { givenRecommendations.Add(user, new List <UserRecommendationState>()); } givenRecommendations[user].Add(state); }
/// <summary> /// Ideally this comes from the FindMeetingTime APIs but that is currently not enabled for application /// level scopes /// </summary> /// <param name="user"></param> /// <param name="items"></param> /// <returns></returns> public static UserRecommendationState AnalyzeCalendar(string user, List <CalendarItem> items) { foreach (ICalendarRule rule in rules) { UserRecommendationState urs = rule.MatchesRule(user, items); if (urs != UserRecommendationState.None //&& !GivenRecommendationsStore.AlreadyRecommended(user,urs) ) { return(urs); } } return(UserRecommendationState.None); }
public static void LoadUsersCalendars(List <string> users) { string startDate = DateTime.Now.ToString("o"); string endDate = DateTime.Now.AddDays(7).ToString("o"); string calendarprefix = $"/calendarview?startdatetime={startDate}&enddatetime={endDate}&$select=start,end,attendees,subject,organizer"; foreach (string user in users) { string userSubstring = $"users/{user}"; string fullUrl = AppState.GraphEndPoint + userSubstring + calendarprefix; Console.WriteLine($"Getting calendar for {user}"); HttpClient client = new HttpClient(); HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, fullUrl); message.Headers.Add("Authorization", "Bearer " + AppState.Token); HttpResponseMessage response = client.SendAsync(message).Result; string userPayload = response.Content.ReadAsStringAsync().Result; if (response.StatusCode == System.Net.HttpStatusCode.OK) { List <CalendarItem> meetingList = new List <CalendarItem>(); JObject resp = JObject.Parse(userPayload); IJEnumerable <JToken> meetings = resp.GetValue("value").AsJEnumerable(); foreach (JToken meeting in meetings) { meetingList.Add(ConvertToCalendarItem(meeting)); } Console.WriteLine($"Found {meetingList.Count()} meetings for user"); if (meetingList.Count > 0) { UserRecommendationState state = AnalyzeCalendar(user, meetingList); // Call API to get recommended time Console.WriteLine($"Recommendation for user is {state} "); if (state != UserRecommendationState.None) { List <CalendarItem> items = GetRecommendedTimes(user, DateTime.Now, DateTime.Now.AddDays(7), meetingList); Console.WriteLine($"Recommendation for user is {state} "); // Call BOT API CallBotApi(user, items, "LimeBot: Here is a recommendation"); } } } } }
public static bool AlreadyRecommended(string user, UserRecommendationState state) { return(!givenRecommendations.ContainsKey(user) || givenRecommendations[user].Contains(state)); }