Управление календарями Google с использованием клиента Gmail

Добавление, редактирование и удаление календарей Gmail

Aspose.Email позволяет приложениям управлять календарями Gmail с помощью IGmailClient который предоставляет возможности добавления, удаления и обновления календарей Gmail. Этот клиентский класс возвращает список объектов типа ExtendedCalendar, содержащих информацию о элементах календаря Gmail. IGmailClient класс предоставляет следующие функции для календарей:

  • CreateCalendar Её можно использовать для вставки нового календаря
  • ListCalendars Её можно использовать для получения списка всех календарей клиента
  • DeleteCalendar Можно использовать для удаления календаря
  • FetchCalendar Можно использовать для получения конкретного календаря клиента
  • UpdateCalendar Эта функция используется для повторной вставки изменённого календаря клиента

Для доступа к календарям GoogleTestUser инициализируется с использованием учётных данных Gmail. GoogleOAuthHelper используется для получения токена доступа для пользователя, который затем используется для инициализации IGmailClient.

Вставка, получение и обновление календарей Gmail

Для вставки календаря инициализируйте объект типа Calendar и вставьте его с помощью CreateCalendar() функция. CreateCalendar() возвращает идентификатор только что вставленного календаря. Этот идентификатор можно использовать для получения календаря с сервера. Следующий фрагмент кода показывает, как вставить, получить и обновить календарь.

Удаление конкретных календарей Google

Для удаления конкретного календаря необходимо получить список всех календарей клиента, а затем удалить нужный. ListCalendars() возвращает список ExtendedCalendar который содержит календари Gmail. Следующий фрагмент кода показывает, как удалить конкретный календарь.

Контроль доступа к календарю

Aspose.Email предоставляет полный контроль над доступом к элементам календаря. ListAccessRules() функция предоставлена в IGmailClient которая возвращает список AccessControlRule. Информацию о отдельном правиле можно получить, изменить и сохранить обратно для календаря клиента. IGmailClient содержит следующие функции для управления правилами контроля доступа.

  • ListAccessRules Эта функция предоставляет список AccessControlRule
  • CreateAccessRule Эта функция создает новое правило доступа для календаря.
  • UpdateAccessRule Эта функция используется для обновления правила доступа.
  • FetchAccessRule Можно использовать для получения конкретного правила доступа к календарю клиента
  • DeleteAccessRule Эта функция используется для удаления правила доступа.

Следующий фрагмент кода показывает, как использовать функции для управления правилами доступа:

Настройки клиента календаря и информация о цветах

Aspose.Email поддерживает доступ к настройкам клиента с помощью IGmailClient.GetSettings(). Она возвращает список настроек, как указано ниже:

  1. dateFieldOrder
  2. displayAllTimezones
  3. hideInvitations
  4. format24HourTime
  5. defaultCalendarMode
  6. defaultEventLength
  7. locale
  8. remindOnRespondedEventsOnly
  9. alternateCalendar
  10. userLocation
  11. hideWeekends
  12. showDeclinedEvents
  13. weekStart
  14. weather
  15. customCalendarMode
  16. timezoneLabel
  17. timezone
  18. useKeyboardShortcuts
  19. country

Аналогично информацию о цвете для клиентов можно получить, используя IGmailClient.GetColors(). Этот объект информации о цвете возвращает список цветов переднего плана, цветов фона и дату и время обновления.

Доступ к настройкам клиента

Следующий фрагмент кода показывает, как функции могут использоваться для доступа к настройкам клиента:

Доступ к информации о цветах

Следующий фрагмент кода показывает, как функции могут использоваться для доступа к настройкам цветов клиента.

Управление встречами 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. Вставить назначение.

Получение и обновление встреч Google Calendar

Здесь демонстрируются получение и обновление календаря следующим образом:

  1. Получить конкретную встречу.
  2. Изменить встречу.
  3. Обновить встречу в календаре.

Предполагается, что календарь с идентификатором "calendarId" и уникальный идентификатор встречи "AppointmentUniqueId" уже получены. Ниже приведён фрагмент кода, показывающий, как получить и обновить встречу.

Перемещение и удаление встреч в Google Calendar

Встречу можно переместить, указав исходный календарь, целевой календарь и уникальный идентификатор встречи в исходном календаре. Ниже приведён фрагмент кода, показывающий, как переместить и удалить встречу.

Запрос FreeBusy для Google Calendar

Aspose.Email предоставляет механизм запросов для проверки, наступила ли встреча в соответствии с критериями. Для этой цели предоставляется класс FreebusyQuery, который позволяет подготовить запрос к конкретному календарю.

Этот пример кода демонстрирует возможность запросов к календарю. В этом примере выполняются следующие задачи:

  1. Создать и вставить календарь
  2. Создать встречу
  3. Вставить встречу
  4. Подготовить FreeBusyQuery
  5. Получить FreebusyResponse
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET

// 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);
    }
}