Working with Gmail Calendars
Adding, Editing and Deleting a Calendar
Aspose.Email allows applications to manage the Gmail calendars using IGmailClient which provides feature like adding, deleting and updating Gmail calendars. This client class returns list of ExtendedCalendar type objects which contain information about the Gmail calendar items. IGmailClient class exposes following functions for calendars:
- CreateCalendar To insert new calendar
- ListCalendars
Get list of all calendars of a client
- DeleteCalendar It can be used to delete a calendar
- Fetch Calendar It can be used to fetch particular calendar of a client
- Update Calendar This function is used for inserting back a modified calendar of a client
To Access the calendars, GoogleTestUser is initialized using gmail account credentials. GoogleOAuthHelper is used to get the access token for the user which is further used to initialize IGmailClient.
Insert, Fetch and Update
For inserting a calendar, initialize a Calendar type object and insert it using CreateCalendar() function. CreateCalendar() returns the id of the newly inserted calendar. This id can be used to fetch the calendar from the server. The following code snippet shows you how to insert, fetch and update calendar.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Get access token | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
// Insert, get and update calendar | |
Aspose.Email.Clients.Google.Calendar calendar = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "America/Los_Angeles"); | |
// Insert calendar and Retrieve same calendar using id | |
string id = client.CreateCalendar(calendar); | |
Aspose.Email.Clients.Google.Calendar cal = client.FetchCalendar(id); | |
//Match the retrieved calendar info with local calendar | |
if ((calendar.Summary == cal.Summary) && (calendar.TimeZone == cal.TimeZone)) | |
{ | |
Console.WriteLine("fetched calendar information matches"); | |
} | |
else | |
{ | |
Console.WriteLine("fetched calendar information does not match"); | |
} | |
// Change information in the fetched calendar and Update calendar | |
cal.Description = "Description - " + Guid.NewGuid().ToString(); | |
cal.Location = "Location - " + Guid.NewGuid().ToString(); | |
client.UpdateCalendar(cal); | |
} | |
Delete particular calendar
For deleting a particular calendar, we need to get the list of all the calendars of a client and then delete as required. ListCalendars() returns the list of ExtendedCalendar which contains Gmail calendars. The following code snippet shows you how to delete particular calendar.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Get access token | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
// Access and delete calendar with summary starting from "Calendar summary - " | |
string summary = "Calendar summary - "; | |
// Get calendars list | |
ExtendedCalendar[] lst0 = client.ListCalendars(); | |
foreach (ExtendedCalendar extCal in lst0) | |
{ | |
// Delete selected calendars | |
if (extCal.Summary.StartsWith(summary)) | |
client.DeleteCalendar(extCal.Id); | |
} | |
} |
Working with Calendar Access Control
Aspose.Email provides full control over the access control to the calendar items. ListAccessRules() function is exposed by IGmailClient which returns list of AccessControlRule. Individual rule information can be retrieved, modified and saved back for the calendar of a client. IGmailClient contains following functions for managing the access control rules.
- ListAccessRules This function provides list of AccessControlRule
- CreateAccessRule This function creates a new access rule for a calendar.
- UpdateAccessRule This function is used for updating an access rule.
- FetchAccessRule It can be used to fetch particular access rule for calendar of a client
- DeleteAccessRule This function is used for deleting an access rule.
The following code snippet shows you how the functions used for managing the access rules:
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
// Retrieve list of calendars for the current client | |
ExtendedCalendar[] calendarList = client.ListCalendars(); | |
// Get first calendar id and retrieve list of AccessControlRule for the first calendar | |
string calendarId = calendarList[0].Id; | |
AccessControlRule[] roles1 = client.ListAccessRules(calendarId); | |
// Create a local access control rule and Set rule properties | |
AccessControlRule rule = new AccessControlRule(); | |
rule.Role = AccessRole.reader; | |
rule.Scope = new AclScope(AclScopeType.user, User2.EMail); | |
// Insert new rule for the calendar. It returns the newly created rule | |
AccessControlRule createdRule = client.CreateAccessRule(calendarId, rule); | |
// Confirm if local created rule and returned rule are equal | |
if ((rule.Role == createdRule.Role) && (rule.Scope.Type == createdRule.Scope.Type) && (rule.Scope.Value.ToLower() == createdRule.Scope.Value.ToLower())) | |
{ | |
Console.WriteLine("local rule and returned rule after creation are equal"); | |
} | |
else | |
{ | |
Console.WriteLine("Rule could not be created successfully"); | |
return; | |
} | |
// Get list of rules | |
AccessControlRule[] roles2 = client.ListAccessRules(calendarId); | |
// Current list length should be 1 more than the earlier one | |
if (roles1.Length + 1 == roles2.Length) | |
{ | |
Console.WriteLine("List lengths are ok"); | |
} | |
else | |
{ | |
Console.WriteLine("List lengths are not ok"); | |
return; | |
} | |
// Change rule and Update the rule for the selected calendar | |
createdRule.Role = AccessRole.writer; | |
AccessControlRule updatedRule = client.UpdateAccessRule(calendarId, createdRule); | |
// Check if returned access control rule after update is ok | |
if ((createdRule.Role == updatedRule.Role) && (createdRule.Id == updatedRule.Id)) | |
{ | |
Console.WriteLine("Rule is updated successfully"); | |
} | |
else | |
{ | |
Console.WriteLine("Rule is not updated"); | |
return; | |
} | |
// Retrieve individaul rule against a calendar | |
AccessControlRule fetchedRule = client.FetchAccessRule(calendarId, createdRule.Id); | |
//Check if rule parameters are ok | |
if ((updatedRule.Id == fetchedRule.Id) && (updatedRule.Role == fetchedRule.Role) && (updatedRule.Scope.Type == fetchedRule.Scope.Type) && (updatedRule.Scope.Value.ToLower() == fetchedRule.Scope.Value.ToLower())) | |
{ | |
Console.WriteLine("Rule parameters are ok"); | |
} | |
else | |
{ | |
Console.WriteLine("Rule parameters are not ok"); | |
} | |
// Delete particular rule against a given calendar and Retrieve the all rules list for the same calendar | |
client.DeleteAccessRule(calendarId, createdRule.Id); | |
AccessControlRule[] roles3 = client.ListAccessRules(calendarId); | |
// Check that current rules list length should be equal to the original list length before adding and deleting the rule | |
if (roles1.Length == roles3.Length) | |
{ | |
Console.WriteLine("List lengths are same"); | |
} | |
else | |
{ | |
Console.WriteLine("List lengths are not equal"); | |
return; | |
} | |
} |
Working with Client Settings and Color Info
Aspose.Email supports accessing the Client settings by using IGmailClient.GetSettings(). It returns list of settings as given below:
- dateFieldOrder
- displayAllTimezones
- hideInvitations
- format24HourTime
- defaultCalendarMode
- defaultEventLength
- locale
- remindOnRespondedEventsOnly
- alternateCalendar
- userLocation
- hideWeekends
- showDeclinedEvents
- weekStart
- weather
- customCalendarMode
- timezoneLabel
- timezone
- useKeyboardShortcuts
- country
Similarly color info for clients can also be retrieved using IGmailClient.GetColors(). This color info object returns the list of Foreground colors, background colors and update date and time.
Access client settings
The following code snippet shows you how the functions used for accessing the client settings:
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
// Retrieve client settings | |
Dictionary<string, string> settings = client.GetSettings(); | |
if (settings.Count < 1) | |
{ | |
Console.WriteLine("No settings are available."); | |
return; | |
} | |
// Traverse the settings list | |
foreach (KeyValuePair<string, string> pair in settings) | |
{ | |
// Get the setting value and test if settings are ok | |
string value = client.GetSetting(pair.Key); | |
if (pair.Value == value) | |
{ | |
Console.WriteLine("Key = " + pair.Key + ", Value = " + pair.Value); | |
} | |
else | |
{ | |
Console.WriteLine("Settings could not be retrieved"); | |
} | |
} | |
} |
Access color info
The following code snippet shows you how the functions used for accessing the client color settings.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
ColorsInfo colors = client.GetColors(); | |
Dictionary<string, Colors> palettes = colors.Calendar; | |
// Traverse the settings list | |
foreach (KeyValuePair<string, Colors> pair in palettes) | |
{ | |
Console.WriteLine("Key = " + pair.Key + ", Color = " + pair.Value); | |
} | |
Console.WriteLine("Update Date = " + colors.Updated); | |
} |
Working with Appointments
Aspose.Email provides features for working with Appointments in Google calendars. Following is the list of tasks that can be performed on appointments in google calendar:
- Add Appointments.
- Retrieve list off appointments.
- Retrieve particular appointment.
- Update an appointment.
- Move appointment from one calendar to another.
- Delete appointment.
IGmailClient provides functions like CreateAppointment, FetchAppointment, UpdateAppointment, ListAppointments, MoveAppointment and DeleteAppointment.
Adding an appointment
Following code sample demonstrates the feature of adding an appointment in a calendar. In this sample following steps are followed:
- Create and insert a calendar.
- Retrieve list of appointments from a new calendar.
- Create an appointment.
- Insert appointment.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
// Get IGmailclient | |
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
// Create local calendar | |
Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev"); | |
// Insert calendar and get id of inserted calendar and Get back calendar using an id | |
string id = client.CreateCalendar(calendar1); | |
Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id); | |
string calendarId1 = cal1.Id; | |
try | |
{ | |
// Retrieve list of appointments from the first calendar | |
Appointment[] appointments = client.ListAppointments(calendarId1); | |
if (appointments.Length > 0) | |
{ | |
Console.WriteLine("Wrong number of appointments"); | |
return; | |
} | |
// Get current time and Calculate time after an hour from now | |
DateTime startDate = DateTime.Now; | |
DateTime endDate = startDate.AddHours(1); | |
// Initialize a mail address collection and set attendees mail address | |
MailAddressCollection attendees = new MailAddressCollection(); | |
attendees.Add("User1.EMail@domain.com"); | |
attendees.Add("User3.EMail@domain.com"); | |
// Create an appointment with above attendees | |
Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, User2.EMail, attendees); | |
// Set appointment summary, description, start/end time zone | |
app1.Summary = "Summary - " + Guid.NewGuid().ToString(); | |
app1.Description = "Description - " + Guid.NewGuid().ToString(); | |
app1.StartTimeZone = "Europe/Kiev"; | |
app1.EndTimeZone = "Europe/Kiev"; | |
// Insert appointment in the first calendar inserted above and get back inserted appointment | |
Appointment app2 = client.CreateAppointment(calendarId1, app1); | |
// Retrieve appointment using unique id | |
Appointment app3 = client.FetchAppointment(calendarId1, app2.UniqueId); | |
} | |
catch (Exception ex) | |
{ | |
Console.WriteLine(ex.Message); | |
} | |
} |
Retrieve and update appointment
Here retrieving and updating of calendar is demonstrated as follows:
- Rerieve particaulr appointment.
- Modify the appointment.
- Update the appointment in calendar.
It is assumed that a calendar with id “calendarId” and appointment unique id “AppointmentUniqueId” are already extracted. The following code snippet shows you how to retrieve and update appointment.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
// Get IGmailclient | |
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
string calendarId = client.ListCalendars()[0].Id; | |
string AppointmentUniqueId = client.ListAppointments(calendarId)[0].UniqueId; | |
// Retrieve Appointment | |
Appointment app3 = client.FetchAppointment(calendarId, AppointmentUniqueId); | |
// Change the appointment information | |
app3.Summary = "New Summary - " + Guid.NewGuid().ToString(); | |
app3.Description = "New Description - " + Guid.NewGuid().ToString(); | |
app3.Location = "New Location - " + Guid.NewGuid().ToString(); | |
app3.Flags = AppointmentFlags.AllDayEvent; | |
app3.StartDate = DateTime.Now.AddHours(2); | |
app3.EndDate = app3.StartDate.AddHours(1); | |
app3.StartTimeZone = "Europe/Kiev"; | |
app3.EndTimeZone = "Europe/Kiev"; | |
// Update the appointment and get back updated appointment | |
Appointment app4 = client.UpdateAppointment(calendarId, app3); | |
} |
Move and Delete appointment
Appointment can be moved by providing the source calendar, destination calendar and unique id of appointment in the source calendar. The following code snippet shows you how to move and delete appointment.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret"); | |
string accessToken; | |
string refreshToken; | |
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken); | |
// Get IGmailclient | |
using (IGmailClient client = Aspose.Email.Clients.Google.GmailClient.GetInstance(accessToken, User2.EMail)) | |
{ | |
string SourceCalendarId = client.ListCalendars()[0].Id; | |
string DestinationCalendarId = client.ListCalendars()[1].Id; | |
string TargetAppUniqueId = client.ListAppointments(SourceCalendarId)[0].UniqueId; | |
// Retrieve the list of appointments in the destination calendar before moving the appointment | |
Appointment[] appointments = client.ListAppointments(DestinationCalendarId); | |
Console.WriteLine("Before moving count = " + appointments.Length); | |
Appointment Movedapp = client.MoveAppointment(SourceCalendarId, DestinationCalendarId, TargetAppUniqueId); | |
// Retrieve the list of appointments in the destination calendar after moving the appointment | |
appointments = client.ListAppointments(DestinationCalendarId); | |
Console.WriteLine("After moving count = " + appointments.Length); | |
// Delete particular appointment from a calendar using unique id | |
client.DeleteAppointment(DestinationCalendarId, Movedapp.UniqueId); | |
// Retrieve the list of appointments. It should be one less than the earlier appointments in the destination calendar | |
appointments = client.ListAppointments(DestinationCalendarId); | |
Console.WriteLine("After deleting count = " + appointments.Length); | |
} | |