Работа с календарями Gmail

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

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

Получить список всех календарей клиента

  • deleteCalendar Может быть использован для удаления календаря
  • fetchCalendar Может быть использован для получения конкретного календаря клиента
  • updateCalendar Эта функция используется для вставки обратно измененного календаря клиента

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

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

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

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // Вставить, получить и обновить календарь
    Calendar calendar = new Calendar("Summary", "Description", "Location", "America/Los_Angeles");

    // Вставить календарь и получить тот же календарь по идентификатору
    String id = client.createCalendar(calendar);
    Calendar cal = client.fetchCalendar(id);

    // Изменить информацию в полученном календаре и обновить календарь
    cal.setDescription("New Description");
    cal.setLocation("New Location");
    client.updateCalendar(cal);
}

Удаление конкретного календаря

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

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // Получить доступ и удалить календарь с описанием, начинающимся с "Calendar summary"
    String summary = "Calendar summary";

    // Получить список календарей
    ExtendedCalendar[] lst = client.listCalendars();

    for (ExtendedCalendar extCal : lst) {
        // Удалить выбранные календари
        if (extCal.getSummary().startsWith(summary))
            client.deleteCalendar(extCal.getId());
    }
}

Работа с контролем доступа к календарю

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

  • listAccessRules Эта функция предоставляет список AccessControlRule
  • createAccessRule Эта функция создает новое правило доступа для календаря.
  • updateAccessRule Эта функция используется для обновления правила доступа.
  • fetchAccessRule Может быть использована для получения конкретного правила доступа для календаря клиента
  • deleteAccessRule Эта функция используется для удаления правила доступа.

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

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // Получить список календарей для текущего клиента
    ExtendedCalendar[] calendarList = client.listCalendars();

    // Получить идентификатор первого календаря и извлечь список AccessControlRule для первого календаря
    String calendarId = calendarList[0].getId();
    AccessControlRule[] roles1 = client.listAccessRules(calendarId);

    // Создать локальное правило контроля доступа и установить свойства правила
    AccessControlRule rule = new AccessControlRule();
    rule.setRole(AccessRole.reader);
    rule.setScope(new AclScope(AclScopeType.user, email2));

    // Вставить новое правило для календаря. Оно возвращает вновь созданное правило
    AccessControlRule createdRule = client.createAccessRule(calendarId, rule);

    // Получить список правил
    AccessControlRule[] roles2 = client.listAccessRules(calendarId);

    // Длина текущего списка должна быть на 1 больше, чем раньше
    if (roles1.length + 1 == roles2.length) {
        System.out.println("Длины списков в порядке");
    } else {
        System.out.println("Длины списков не в порядке");
        return;
    }

    // Изменить правило и обновить правило для выбранного календаря
    createdRule.setRole(AccessRole.writer);
    AccessControlRule updatedRule = client.updateAccessRule(calendarId, createdRule);

    // Извлечь отдельное правило для календаря
    AccessControlRule fetchedRule = client.fetchAccessRule(calendarId, createdRule.getId());

    // Удалить конкретное правило для данного календаря и извлечь весь список правил для того же календаря
    client.deleteAccessRule(calendarId, createdRule.getId());
    AccessControlRule[] roles3 = client.listAccessRules(calendarId);

    // Проверить, что длина текущего списка правил должна быть равна длине исходного списка до добавления и удаления правила
    if (roles1.length == roles3.length) {
        System.out.println("Длины списков равны");
    } else {
        System.out.println("Длины списков не равны");
        return;
    }
}

Работа с настройками клиента и информацией о цветах

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. Этот объект информации о цветах возвращает список основных цветов, фоновых цветов и даты и времени обновления.

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

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

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // Получить настройки клиента
    Dictionary<String, String> settings = client.getSettings();
    if (settings.size() < 1) {
        System.out.println("Нет доступных настроек.");
        return;
    }

    // Пройтись по списку настроек
    for (KeyValuePair<String, String> pair : settings) {
        // Получить значение настройки и проверить, все ли в порядке
        String value = client.getSetting(pair.getKey());
        if (pair.getValue().equals(value)) {
            System.out.println("Ключ = " + pair.getKey() + ", Значение = " + pair.getValue());
        } else {
            System.out.println("Настройки не удалось извлечь");
        }
    }
}

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

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

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    ColorsInfo colors = client.getColors();
    Dictionary<String, Colors> palettes = colors.getCalendar();

    // Пройтись по списку настроек
    for (KeyValuePair<String, Colors> pair : palettes) {
        System.out.println("Ключ = " + pair.getKey() + ", Цвет = " + pair.getValue());
    }
    System.out.println("Дата обновления = " + colors.getUpdated());
}

Работа с встречами

Aspose.Email предоставляет функции для работы с Appointments в календарях Google. Вот список задач, которые можно выполнить с встречами в календаре Google:

  1. Добавить встречи - createAppointment, importAppointment
  2. Извлечь список встреч - listAppointments
  3. Извлечь конкретную встречу - fetchAppointment, listAppointmentInstances
  4. Обновить встречу - updateAppointment
  5. Переместить встречу из одного календаря в другой - moveAppointment
  6. Удалить встречу - deleteAppointment

Добавление встречи

Следующий образец кода демонстрирует возможность добавления встречи в календарь. В этом примере выполняются следующие шаги:

  1. Создать и вставить календарь.
  2. Извлечь список встреч из нового календаря.
  3. Создать встречу.
  4. Вставить встречу.
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // Создать локальный календарь
    Calendar calendar1 = new Calendar("Summary", null, null, "Europe/Kiev");

    // Вставить календарь и получить идентификатор вставленного календаря, а также получить календарь по идентификатору
    String id = client.createCalendar(calendar1);
    Calendar cal1 = client.fetchCalendar(id);
    String calendarId1 = cal1.getId();

    try {
        // Извлечь список встреч из первого календаря
        Appointment[] appointments = client.listAppointments(calendarId1);
        if (appointments.length > 0) {
            System.out.println("Неверное количество встреч");
            return;
        }

        // Получить текущее время и рассчитать время через час от начала
        java.util.Calendar c = java.util.Calendar.getInstance();
        Date startDate = c.getTime();
        c.add(java.util.Calendar.HOUR_OF_DAY, 1);
        Date endDate = c.getTime();

        // Инициализировать коллекцию адресов электронной почты и установить адреса электронной почты участников
        MailAddressCollection attendees = new MailAddressCollection();
        attendees.add("User1.EMail@domain.com");
        attendees.add("User3.EMail@domain.com");

        // Создать встречу с вышеуказанными участниками
        Appointment app1 = new Appointment("Location", startDate, endDate, MailAddress.to_MailAddress(email2), attendees);

        // Установить краткое содержание встречи, описание, временные зоны начала/конца
        app1.setSummary("New Summary");
        app1.setDescription("New Description");
        app1.setStartTimeZone("Europe/Kiev");
        app1.setEndTimeZone("Europe/Kiev");

        // Вставить встречу в первый календарь, вставленный выше, и получить вставленную встречу
        Appointment app2 = client.createAppointment(calendarId1, app1);

        // Извлечь встречу по уникальному идентификатору
        Appointment app3 = client.fetchAppointment(calendarId1, app2.getUniqueId());
    } catch (Exception ex) {
        System.err.println(ex);
    }
    
}

Извлечение и обновление встречи

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

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

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

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    String calendarId = client.listCalendars()[0].getId();
    String AppointmentUniqueId = client.listAppointments(calendarId)[0].getUniqueId();

    // Извлечь встречу
    Appointment app3 = client.fetchAppointment(calendarId, AppointmentUniqueId);
    // Изменить информацию о встрече
    app3.setSummary("New Summary");
    app3.setDescription("New Description");
    app3.setLocation("New Location");
    app3.setFlags(AppointmentFlags.AllDayEvent);
    java.util.Calendar c = java.util.Calendar.getInstance();
    c.add(java.util.Calendar.HOUR_OF_DAY, 2);
    app3.setStartDate(c.getTime());
    c.add(java.util.Calendar.HOUR_OF_DAY, 1);
    app3.setEndDate(c.getTime());
    app3.setStartTimeZone("Europe/Kiev");
    app3.setEndTimeZone("Europe/Kiev");
    // Обновить встречу и получить обновленную встречу
    Appointment app4 = client.updateAppointment(calendarId, app3);
}

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

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

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    String SourceCalendarId = client.listCalendars()[0].getId();
    String DestinationCalendarId = client.listCalendars()[1].getId();
    String TargetAppUniqueId = client.listAppointments(SourceCalendarId)[0].getUniqueId();

    // Извлечь список встреч в целевом календаре перед перемещением встречи
    Appointment[] appointments = client.listAppointments(DestinationCalendarId);
    System.out.println("Перед перемещением количество = " + appointments.length);
    Appointment Movedapp = client.moveAppointment(SourceCalendarId, DestinationCalendarId, TargetAppUniqueId);

    // Извлечь список встреч в целевом календаре после перемещения встречи
    appointments = client.listAppointments(DestinationCalendarId);
    System.out.println("После перемещения количество = " + appointments.length);

    // Удалить конкретную встречу из календаря, используя уникальный идентификатор
    client.deleteAppointment(DestinationCalendarId, Movedapp.getUniqueId());

    // Извлечь список встреч. Он должен быть на одну меньше, чем количество встреч в целевом календаре ранее
    appointments = client.listAppointments(DestinationCalendarId);
    System.out.println("После удаления количество = " + appointments.length);
}