Управление на Google Calendar чрез Gmail клиент
Добавяне, редактиране и изтриване на Gmail календари
Aspose.Email позволява на приложенията да управляват Gmail календарите, използвайки IGmailClient които предоставят функции като добавяне, изтриване и актуализиране на Gmail календари. Този клиентски клас връща списък от обекти тип ExtendedCalendar, съдържащи информация за елементите на Gmail календар. IGmailClient класът предоставя следните функции за календари:
- CreateCalendar Може да се използва за вмъкване на нов календар
- ListCalendars Може да се използва за получаване на списъка от всички календари на клиент
- DeleteCalendar Може да се използва за изтриване на календар
- FetchCalendar Може да се използва за извличане на конкретен календар на клиент
- UpdateCalendar Тази функция се използва за въвеждане обратно на модифициран календар на клиент
За достъп до календарите, GoogleTestUser се инициализира с данни за Gmail акаунт. GoogleOAuthHelper се използва за получаване на токен за достъп за потребителя, който след това се използва за инициализиране на IGmailClient.
Вмъкване, извличане и актуализиране на Gmail календари
За вмъкване на календар, инициализирайте обект от тип Calendar и го вмъкнете, като използвате CreateCalendar() функция. CreateCalendar() връща идентификатора на нововъведения календар. Този идентификатор може да се използва за извличане на календара от сървъра. Следният кодов фрагмент показва как да вмъкнете, извлечете и актуализирате календар.
// 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);
}
Изтриване на конкретни Google календари
За изтриване на конкретен календар, трябва да получим списъка с всички календари на клиент и след това да изтрием според нуждите. ListCalendars() връща списъка с ExtendedCalendar което съдържа Gmail календари. Следният кодов фрагмент показва как да изтриете конкретен календар.
// 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);
}
}
Контрол на достъпа до календар
Aspose.Email предоставя пълен контрол върху достъпа до елементите от календара. ListAccessRules() функцията е предоставена от IGmailClient които връщат списъка от AccessControlRule. Индивидуална информация за правило може да бъде извлечена, модифицирана и запазена обратно за календара на клиент. IGmailClient съдържа следните функции за управление на правилата за контрол на достъпа.
- ListAccessRules Тази функция предоставя списъка от AccessControlRule
- CreateAccessRule Тази функция създава ново правило за достъп за календар.
- UpdateAccessRule Тази функция се използва за актуализиране на правило за достъп.
- FetchAccessRule Може да се използва за извличане на конкретно правило за достъп за календар на клиент
- DeleteAccessRule Тази функция се използва за изтриване на правило за достъп.
Следният кодов откъс показва как да използвате функциите за управление на правилата за достъп:
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;
}
}
Настройки на клиент за календар и информация за цветовете
Aspose.Email поддържа достъп до клиентските настройки чрез използване на IGmailClient.GetSettings(). Той връща списъка с настройки, както е дадено по-долу:
- ред на полетата за дата
- показване на всички часови зони
- hideInvitations
- форматиране на 24-часово време
- defaultCalendarMode
- стандартна продължителност на събитие
- локализация
- remindOnRespondedEventsOnly
- alternateCalendar
- местоположение на потребителя
- hideWeekends
- showDeclinedEvents
- начало на седмицата
- време
- customCalendarMode
- етикет за часова зона
- часова зона
- useKeyboardShortcuts
- страна
Подобно, информация за цвят за клиентите може да се извлече чрез IGmailClient.GetColors(). Този обект за информация за цвят връща списъка с предни цветове, фонови цветове и дата и час на актуализиране.
Достъп до клиентски настройки
Следният кодов откъс показва как функциите могат да се използват за достъп до настройките на клиента:
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");
}
}
}
Достъп до информация за цветовете
Следният кодов откъс показва как функциите могат да се използват за достъп до цветовите настройки на клиента.
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);
}
Управление на срещи в Google Calendar
Aspose.Email предоставя функции за работа със срещи в Google календарите. Следните задачи могат да се изпълняват със срещи в Google календар:
- Добавяне на срещи.
- Получаване на списък със срещи.
- Получаване на конкретна среща.
- Актуализиране на среща.
- Преместване на среща от един календар в друг.
- Изтриване на среща.
IGmailClient предоставя функции като CreateAppointment, FetchAppointment, UpdateAppointment, ListAppointments, MoveAppointment и DeleteAppointment.
Добавяне на срещи към Google Calendar
Следният примерен код демонстрира функцията за добавяне на среща в календар. За да постигнете това, следвайте стъпките:
- Създаване и вмъкване на календар.
- Извличане на списъка със срещи от нов календар.
- Създаване на среща.
- Вмъкване на среща.
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);
}
}
Получаване и актуализиране на срещи в Google Calendar
Тук се демнстрира извличането и актуализирането на календар както следва:
- Извличане на конкретна среща.
- Промяна на срещата.
- Актуализиране на срещата в календара.
Приема се, че календар с идентификатор "calendarId" и уникален идентификатор на среща "AppointmentUniqueId" вече са извлечени. Следният кодов откъс показва как да получите и актуализирате среща.
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);
}
Преместване и изтриване на срещи в Google Calendar
Срещата може да бъде преместена, като се посочи изходният календар, целевият календар и уникалният идентификатор на срещата в изходния календар. Следният кодов откъс показва как да преместите и изтриете среща.
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);
}
FreeBusy заявка за Google Calendar
Aspose.Email предоставя механизъм за заявка, за да провери дали срещата е предстояща или не според критериите. Класът FreebusyQuery е предоставен за тази цел и позволява подготовка на заявка за конкретен календар.
Този примерен код демонстрира функцията за заявка към календар. В този пример се изпълняват следните задачи:
- Създайте и вмъкнете календар
- Създайте среща
- Вмъкнете среща
- Подготовка на FreeBusyQuery
- Получаване на FreebusyResponse
// Use the GoogleUser and GoogleOAuthHelper classes below to receive an access token
using (IGmailClient client = GmailClient.GetInstance(accessToken, user.Email))
{
// Initialize calendar item
Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev");
// Insert calendar and get back id of newly inserted calendar and Fetch the same calendar using calendar id
string id = client.CreateCalendar(calendar1);
Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id);
string calendarId1 = cal1.Id;
try
{
// Get list of appointments in newly inserted calendar. It should be zero
Appointment[] appointments = client.ListAppointments(calendarId1);
if (appointments.Length != 0)
{
Console.WriteLine("Wrong number of appointments");
return;
}
// Create a new appointment and Calculate appointment start and finish time
DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(1);
// Create attendees list for appointment
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add("user1@domain.com");
attendees.Add("user2@domain.com");
// Create appointment
Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, "user2@domain.com", attendees);
app1.Summary = "Summary - " + Guid.NewGuid().ToString();
app1.Description = "Description - " + Guid.NewGuid().ToString();
app1.StartTimeZone = "Europe/Kiev";
app1.EndTimeZone = "Europe/Kiev";
// Insert the newly created appointment and get back the same in case of successful insertion
Appointment app2 = client.CreateAppointment(calendarId1, app1);
// Create Freebusy query by setting min/max timeand time zone
FreebusyQuery query = new FreebusyQuery();
query.TimeMin = DateTime.Now.AddDays(-1);
query.TimeMax = DateTime.Now.AddDays(1);
query.TimeZone = "Europe/Kiev";
// Set calendar item to search and Get the reponse of query containing
query.Items.Add(cal1.Id);
FreebusyResponse resp = client.GetFreebusyInfo(query);
// Delete the appointment
client.DeleteAppointment(calendarId1, app2.UniqueId);
}
finally
{
// Delete the calendar
client.DeleteCalendar(cal1.Id);
}
}