Робота з календарями 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)) {
    // Insert, get and update calendar
    Calendar calendar = new Calendar("Summary", "Description", "Location", "America/Los_Angeles");

    // Insert calendar and Retrieve same calendar using id
    String id = client.createCalendar(calendar);
    Calendar cal = client.fetchCalendar(id);

    // Change information in the fetched calendar and Update calendar
    cal.setDescription("New Description");
    cal.setLocation("New Location");
    client.updateCalendar(cal);
}

Видалити конкретний календар

Для видалення конкретного календаря нам потрібно отримати список усіх календарів клієнта, а потім видалити потрібний. listCalendars повертає список ExtendedCalendar яка містить календарі Gmail. Наступний фрагмент коду показує, як видалити конкретний календар.

try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // Access and delete calendar with summary starting from "Calendar summary"
    String summary = "Calendar summary";

    // Get calendars list
    ExtendedCalendar[] lst = client.listCalendars();

    for (ExtendedCalendar extCal : lst) {
        // Delete selected calendars
        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)) {
    // 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].getId();
    AccessControlRule[] roles1 = client.listAccessRules(calendarId);

    // Create a local access control rule and Set rule properties
    AccessControlRule rule = new AccessControlRule();
    rule.setRole(AccessRole.reader);
    rule.setScope(new AclScope(AclScopeType.user, email2));

    // Insert new rule for the calendar. It returns the newly created rule
    AccessControlRule createdRule = client.createAccessRule(calendarId, rule);

    // 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) {
        System.out.println("List lengths are ok");
    } else {
        System.out.println("List lengths are not ok");
        return;
    }

    // Change rule and Update the rule for the selected calendar
    createdRule.setRole(AccessRole.writer);
    AccessControlRule updatedRule = client.updateAccessRule(calendarId, createdRule);

    // Retrieve individaul rule against a calendar
    AccessControlRule fetchedRule = client.fetchAccessRule(calendarId, createdRule.getId());

    // Delete particular rule against a given calendar and Retrieve the all rules list for the same calendar
    client.deleteAccessRule(calendarId, createdRule.getId());
    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) {
        System.out.println("List lengths are same");
    } else {
        System.out.println("List lengths are not equal");
        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)) {
    // Retrieve client settings
    Dictionary<String, String> settings = client.getSettings();
    if (settings.size() < 1) {
        System.out.println("No settings are available.");
        return;
    }

    // Traverse the settings list
    for (KeyValuePair<String, String> pair : settings) {
        // Get the setting value and test if settings are ok
        String value = client.getSetting(pair.getKey());
        if (pair.getValue().equals(value)) {
            System.out.println("Key = " + pair.getKey() + ", Value = " + pair.getValue());
        } else {
            System.out.println("Settings could not be retrieved");
        }
    }
}

Доступ до інформації про колір

Наступний фрагмент коду показує, як використовуються функції для доступу до налаштувань кольорів клієнта.

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

    // Traverse the settings list
    for (KeyValuePair<String, Colors> pair : palettes) {
        System.out.println("Key = " + pair.getKey() + ", Color = " + pair.getValue());
    }
    System.out.println("Update Date = " + colors.getUpdated());
}

Робота з зустрічами

Aspose.Email надає можливості для роботи з Зустрічі у календарях 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)) {
    // Create local calendar
    Calendar calendar1 = new Calendar("Summary", null, null, "Europe/Kiev");

    // Insert calendar and get id of inserted calendar and Get back calendar using an id
    String id = client.createCalendar(calendar1);
    Calendar cal1 = client.fetchCalendar(id);
    String calendarId1 = cal1.getId();

    try {
        // Retrieve list of appointments from the first calendar
        Appointment[] appointments = client.listAppointments(calendarId1);
        if (appointments.length > 0) {
            System.out.println("Wrong number of appointments");
            return;
        }

        // Get current time and Calculate time after an hour from now
        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();

        // 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", startDate, endDate, MailAddress.to_MailAddress(email2), attendees);

        // Set appointment summary, description, start/end time zone
        app1.setSummary("New Summary");
        app1.setDescription("New Description");
        app1.setStartTimeZone("Europe/Kiev");
        app1.setEndTimeZone("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.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();

    // Retrieve Appointment
    Appointment app3 = client.fetchAppointment(calendarId, AppointmentUniqueId);
    // Change the appointment information
    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");
    // Update the appointment and get back updated appointment
    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();

    // Retrieve the list of appointments in the destination calendar before moving the appointment
    Appointment[] appointments = client.listAppointments(DestinationCalendarId);
    System.out.println("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);
    System.out.println("After moving count = " + appointments.length);

    // Delete particular appointment from a calendar using unique id
    client.deleteAppointment(DestinationCalendarId, Movedapp.getUniqueId());

    // Retrieve the list of appointments. It should be one less than the earlier appointments in the destination calendar
    appointments = client.listAppointments(DestinationCalendarId);
    System.out.println("After deleting count = " + appointments.length);
}