Управление на 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(). Той връща списъка с настройки, както е дадено по-долу:

  1. ред на полетата за дата
  2. показване на всички часови зони
  3. hideInvitations
  4. форматиране на 24-часово време
  5. defaultCalendarMode
  6. стандартна продължителност на събитие
  7. локализация
  8. remindOnRespondedEventsOnly
  9. alternateCalendar
  10. местоположение на потребителя
  11. hideWeekends
  12. showDeclinedEvents
  13. начало на седмицата
  14. време
  15. customCalendarMode
  16. етикет за часова зона
  17. часова зона
  18. useKeyboardShortcuts
  19. страна

Подобно, информация за цвят за клиентите може да се извлече чрез 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 календар:

  1. Добавяне на срещи.
  2. Получаване на списък със срещи.
  3. Получаване на конкретна среща.
  4. Актуализиране на среща.
  5. Преместване на среща от един календар в друг.
  6. Изтриване на среща.

IGmailClient предоставя функции като CreateAppointment, FetchAppointment, UpdateAppointment, ListAppointments, MoveAppointment и DeleteAppointment.

Добавяне на срещи към Google Calendar

Следният примерен код демонстрира функцията за добавяне на среща в календар. За да постигнете това, следвайте стъпките:

  1. Създаване и вмъкване на календар.
  2. Извличане на списъка със срещи от нов календар.
  3. Създаване на среща.
  4. Вмъкване на среща.

                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

Тук се демнстрира извличането и актуализирането на календар както следва:

  1. Извличане на конкретна среща.
  2. Промяна на срещата.
  3. Актуализиране на срещата в календара.

Приема се, че календар с идентификатор "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 е предоставен за тази цел и позволява подготовка на заявка за конкретен календар.

Този примерен код демонстрира функцията за заявка към календар. В този пример се изпълняват следните задачи:

  1. Създайте и вмъкнете календар
  2. Създайте среща
  3. Вмъкнете среща
  4. Подготовка на FreeBusyQuery
  5. Получаване на 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);
    }
}