public void CreateEvent(int UserId, int LocalId, TimeBlockCreateRequest NewEvent) { string CalendarApi = "https://www.googleapis.com/calendar/v3/calendars/primary/events?sendNotifications=true&access_token="; string AccessToken = oAuthService.GetGoogleAccessToken(UserId); string gapiRespObject; if (AccessToken != null) { string gStartTime = NewEvent.StartDate + "T" + NewEvent.StartTime + ":00"; string gEndTime = NewEvent.EndDate + "T" + NewEvent.EndTime + ":00"; HttpWebRequest createRequest = (HttpWebRequest)WebRequest.Create(CalendarApi + AccessToken); createRequest.Method = "POST"; createRequest.ContentType = "application/json"; // set bg color int categoryId = 2; if (NewEvent.ActivityCategory.HasValue) { categoryId = NewEvent.ActivityCategory.Value; } string bgColor = exCalHelperService.GetGoogleColor(categoryId); // timezone failsafe logic string userTimezone = "America/Los_Angeles"; if (NewEvent.TimeZone != null) { userTimezone = NewEvent.TimeZone; } // placeholders for the eventual start & end fields object startField; object endField; // regular events var startDateTime = new { dateTime = gStartTime, timeZone = userTimezone }; var endDateTime = new { dateTime = gEndTime, timeZone = userTimezone }; // all day events var startDate = new { date = NewEvent.StartDate }; var endDate = new { date = NewEvent.EndDate }; // select one if (NewEvent.AllDay) { startField = startDate; endField = endDate; } else { startField = startDateTime; endField = endDateTime; } List <string> validEmails = exCalHelperService.ReturnValidEmails(NewEvent.GuestEmail); string json = ""; if (validEmails.Count != 0) { List <GoogleAttendees> attendeeEmails = AttendeeList(validEmails); var tempObj = new { summary = NewEvent.Title, location = NewEvent.Location, description = NewEvent.Description, start = startField, end = endField, colorId = bgColor, reminders = new { useDefault = true }, attendees = attendeeEmails }; json = JsonConvert.SerializeObject(tempObj); } else { json = new JavaScriptSerializer().Serialize(new { summary = NewEvent.Title, location = NewEvent.Location, description = NewEvent.Description, start = startField, end = endField, colorId = bgColor, reminders = new { useDefault = true } }); } try { using (var streamWriter = new StreamWriter(createRequest.GetRequestStream())) { streamWriter.Write(json); } var httpResponse = (HttpWebResponse)createRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { gapiRespObject = streamReader.ReadToEnd(); } var GoogleResp = (JObject)JsonConvert.DeserializeObject(gapiRespObject); string ExternalId = GoogleResp["id"].Value <string>(); string ETag = GoogleResp["etag"].Value <string>(); exCalHelperService.StoreExternalEventId(UserId, LocalId, ExternalId, 1, ETag); // 1 = Google } catch (WebException ex) { string resp; using (var streamReader = new StreamReader(ex.Response.GetResponseStream())) { resp = streamReader.ReadToEnd(); } System.Diagnostics.Debug.WriteLine("Failed to POST ERROR"); System.Diagnostics.Debug.WriteLine(resp); } } }
public void CreateEvent(int UserId, int LocalId, TimeBlockCreateRequest NewEvent) { string CalendarApi = "https://graph.microsoft.com/v1.0/me/calendar/events"; string AccessToken = oAuthService.GetMicrosoftAccessToken(UserId); string respObject; if (AccessToken != null) { HttpWebRequest createRequest = (HttpWebRequest)WebRequest.Create(CalendarApi); createRequest.Method = "POST"; createRequest.ContentType = "application/json"; createRequest.Headers["authorization"] = AccessToken; string startTime = NewEvent.StartDate + "T" + NewEvent.StartTime + ":00"; string endTime = NewEvent.EndDate + "T" + NewEvent.EndTime + ":00"; // if all day, times need to be midnight if (NewEvent.AllDay) { startTime = NewEvent.StartDate + "T00:00:00"; if (NewEvent.StartDate == NewEvent.EndDate) { // a single all day event needs to be >24 hours otherwise MS will reject string nextDay = DateTime.Parse(NewEvent.EndDate).AddDays(1).ToString("yyyy-MM-dd"); endTime = nextDay + "T00:00:00"; } else { endTime = NewEvent.EndDate + "T00:00:00"; } } // grab activity category and turn it into a color int categoryId = 2; // failsafe = green if (NewEvent.ActivityCategory.HasValue) { categoryId = NewEvent.ActivityCategory.Value; } string[] activityColor = new[] { exCalHelperService.GetMicrosoftColor(categoryId) }; // timezone failsafe logic string userTimezone = "America/Los_Angeles"; if (NewEvent.TimeZone != null) { userTimezone = NewEvent.TimeZone; } List <string> validEmails = exCalHelperService.ReturnValidEmails(NewEvent.GuestEmail); string json = ""; if (validEmails.Count != 0) { List <MicrosoftAttendees.Container> attendeeEmails = AttendeeList(validEmails); var tempObj = new { subject = NewEvent.Title, body = new { contentType = "Text", content = NewEvent.Description }, location = new { displayName = NewEvent.Location }, start = new { dateTime = startTime, timeZone = userTimezone }, end = new { dateTime = endTime, timeZone = userTimezone }, isAllDay = NewEvent.AllDay, categories = activityColor, attendees = attendeeEmails }; json = JsonConvert.SerializeObject(tempObj); } else { json = new JavaScriptSerializer().Serialize(new { subject = NewEvent.Title, body = new { contentType = "Text", content = NewEvent.Description }, location = new { displayName = NewEvent.Location }, start = new { dateTime = startTime, timeZone = userTimezone }, end = new { dateTime = endTime, timeZone = userTimezone }, isAllDay = NewEvent.AllDay, categories = activityColor }); } try { using (var streamWriter = new StreamWriter(createRequest.GetRequestStream())) { streamWriter.Write(json); } System.Diagnostics.Debug.WriteLine(json); var httpResponse = (HttpWebResponse)createRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { respObject = streamReader.ReadToEnd(); } var serverResp = (JObject)JsonConvert.DeserializeObject(respObject); string ExternalId = serverResp["id"].Value <string>(); string ETag = serverResp["@odata.etag"].Value <string>(); exCalHelperService.StoreExternalEventId(UserId, LocalId, ExternalId, 2, ETag); // 2 = microsoft } catch (WebException ex) { string resp; using (var streamReader = new StreamReader(ex.Response.GetResponseStream())) { resp = streamReader.ReadToEnd(); } System.Diagnostics.Debug.WriteLine("Failed to POST ERROR"); System.Diagnostics.Debug.WriteLine(resp); } } }