/// <summary> /// Update Google Events in Google Calenar /// </summary> /// <param name="owner">calendar owner</param> /// <param name="calendarId">calendar id</param> /// <param name="events">events to update</param> /// <returns>async task for the background Api tasks</returns> private static async Task UpdateGoogleEventsAsync(string owner, string calendarId, List <GCalEventItem> events) { try { int batchCount = 1; // Create a batch request. var request = new BatchRequest(GetCalendarService(owner)); foreach (GCalEventItem e in events) { Event tempEvent = new Event(); string summary = e.StaffMember.ToString() + ": " + e.Client; tempEvent.Summary = summary; tempEvent.Start = new EventDateTime() { DateTime = e.StartTime }; tempEvent.End = new EventDateTime() { DateTime = e.EndTime }; RemindersData eventReminders = new RemindersData(); List <EventReminder> eventReminder = new List <EventReminder>(); eventReminder.Add(new EventReminder { Method = "popup", Minutes = 30 }); eventReminders.Overrides = eventReminder; eventReminders.UseDefault = false; tempEvent.Reminders = eventReminders; ExtendedPropertiesData extendedProps = new ExtendedPropertiesData(); extendedProps.Private__ = new Dictionary <string, string>(); extendedProps.Private__.Add("staffMember", e.StaffMember.ToString()); extendedProps.Private__.Add("appointmentType", e.AppointmentType); extendedProps.Private__.Add("client", e.Client); extendedProps.Private__.Add("salonCalId", e.SalonCalendarId.ToString()); tempEvent.ExtendedProperties = extendedProps; if (batchCount < 900) { request.Queue <Event>( GetCalendarService(owner).Events.Update(tempEvent, calendarId, e.EventId), (content, error, i, message) => { // Put your callback code here. if (error != null) { log.Error("Error updating Google Calendar with new details: " + error.Message); } }); batchCount++; } else { // Execute the batch request and create a new batch as cannot send more than 1000 await request.ExecuteAsync(); batchCount = 1; request = new BatchRequest(GetCalendarService(owner)); } } // Execute the batch request await request.ExecuteAsync(); foreach (var ev in events) { var entryToUpdate = googleCalEvents.FirstOrDefault(x => x.SalonCalendarId == ev.SalonCalendarId); if (entryToUpdate != null) { entryToUpdate.EventId = ev.EventId; entryToUpdate.AppointmentType = ev.AppointmentType; entryToUpdate.Client = ev.Client; entryToUpdate.StaffMember = ev.StaffMember; entryToUpdate.StartTime = ev.StartTime; entryToUpdate.EndTime = ev.EndTime; entryToUpdate.DurationMinutes = ev.DurationMinutes; } } } catch (Exception e) { log.Error("Error updating canged Google Events : " + e.Message); } }
/// <summary> /// Create new events in the Google Calendar /// </summary> /// <param name="owner">Calendar owner</param> /// <param name="calendarId">Calendar id</param> /// <param name="events">list of events to create</param> /// <returns>async Task for running API in background</returns> private static async Task CreateNewEventsAsync(string owner, string calendarId, List <GCalEventItem> events) { try { int eventCount = 1; // Create a batch request. var request = new BatchRequest(GetCalendarService(owner)); foreach (GCalEventItem e in events) { Event tempEvent = new Event(); string summary = e.StaffMember.ToString() + ": " + e.Client; tempEvent.Summary = summary; tempEvent.Start = new EventDateTime() { DateTime = e.StartTime }; tempEvent.End = new EventDateTime() { DateTime = e.EndTime }; RemindersData eventReminders = new RemindersData(); List <EventReminder> eventReminder = new List <EventReminder>(); eventReminder.Add(new EventReminder { Method = "popup", Minutes = 30 }); eventReminders.Overrides = eventReminder; eventReminders.UseDefault = false; tempEvent.Reminders = eventReminders; ExtendedPropertiesData extendedProps = new ExtendedPropertiesData(); extendedProps.Private__ = new Dictionary <string, string>(); extendedProps.Private__.Add("staffMember", e.StaffMember.ToString()); extendedProps.Private__.Add("appointmentType", e.AppointmentType); extendedProps.Private__.Add("client", e.Client); extendedProps.Private__.Add("salonCalId", e.SalonCalendarId.ToString()); tempEvent.ExtendedProperties = extendedProps; if (eventCount < 900) { request.Queue <Event>( GetCalendarService(owner).Events.Insert(tempEvent, calendarId), (content, error, i, message) => { // Put your callback code here. if (error != null) { log.Error("Error creating new appointments in Google Calendar: " + error.Message); } if (content != null) { // do something log.Debug("New event id = " + content.Id); e.EventId = content.Id; } }); eventCount++; } else { // Execute the batch request and create a new batch as cannot send more than 1000 await request.ExecuteAsync(); eventCount = 1; request = new BatchRequest(GetCalendarService(owner)); } } // Execute the batch request await request.ExecuteAsync(); if (googleCalEvents != null) { googleCalEvents = (List <GCalEventItem>)googleCalEvents.Concat(events).ToList(); } else { googleCalEvents = events; } } catch (Exception e) { log.Error("Error creating new Google Events : " + e.Message); } }