public static void RecordRecommendation(string user, UserRecommendationState state)
 {
     if (!givenRecommendations.ContainsKey(user))
     {
         givenRecommendations.Add(user, new List <UserRecommendationState>());
     }
     givenRecommendations[user].Add(state);
 }
Пример #2
0
 /// <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);
 }
Пример #3
0
        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));
 }