Trabalhando com Calendários Gmail

Adicionar, Editar e Excluir um Calendário

Aspose.Email permite que aplicações gerenciem os calendários do Gmail usando IGmailClient que fornece recursos como adicionar, excluir e atualizar calendários do Gmail. Esta classe cliente devolve uma lista de objetos do tipo ExtendedCalendar que contêm informações sobre os itens de calendário do Gmail. IGmailClient a classe expõe as seguintes funções para calendários:

Obter lista de todos os calendários de um cliente

  • deleteCalendar Pode ser usada para excluir um calendário
  • fetchCalendar Pode ser usada para buscar um calendário específico de um cliente
  • updateCalendar Esta função é usada para inserir novamente um calendário modificado de um cliente

Para acessar os calendários, GoogleTestUser é inicializado usando credenciais de conta do Gmail. GoogleOAuthHelper é usado para obter o token de acesso do usuário, que é usado posteriormente para inicializar IGmailClient.

Inserir, Buscar e Atualizar

Para inserir um calendário, inicialize um Calendar objeto do tipo e inseri-lo usando createCalendar função. createCalendar devolve o ID do calendário recém inserido. Esse ID pode ser usado para buscar o calendário no servidor. O trecho de código a seguir mostra como inserir, buscar e atualizar o calendário.

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

Excluir Calendário Específico

Para excluir um calendário específico, precisamos obter a lista de todos os calendários de um cliente e então excluir conforme necessário. listCalendars devolve a lista de ExtendedCalendar que contém calendários do Gmail. O trecho de código a seguir mostra como excluir um calendário específico.

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

Trabalhando com Controle de Acesso ao Calendário

Aspose.Email fornece controle total sobre o controle de acesso aos itens do calendário. listAccessRules função é exposta por IGmailClient que devolve a lista de AccessControlRule. As informações individuais da regra podem ser recuperadas, modificadas e salvas novamente para o calendário de um cliente. IGmailClient contém as seguintes funções para gerenciar as regras de controle de acesso.

O trecho de código a seguir mostra como as funções usadas para gerenciar as regras de acesso:

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

Trabalhando com Configurações do Cliente e Informações de Cor

Aspose.Email suporta o acesso às configurações do Cliente usando IGmailClient.getSettings. Ela devolve uma lista de configurações conforme abaixo:

  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

Da mesma forma, informações de cor para clientes também podem ser obtidas usando IGmailClient.getColors. Este objeto de informações de cor devolve a lista de cores de primeiro plano, cores de fundo e data e hora da atualização.

Acessar Configurações do Cliente

O trecho de código a seguir mostra como as funções usadas para acessar as configurações do cliente:

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

Acessar Informações de Cor

O trecho de código a seguir mostra como as funções usadas para acessar as configurações de cores do cliente.

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

Trabalhando com Compromissos

Aspose.Email fornece recursos para trabalhar com Compromissos nos calendários do Google. A seguir está a lista de tarefas que podem ser realizadas em compromissos no calendário do Google:

  1. Adicionar compromissos - createAppointment, importAppointment
  2. Recuperar lista de compromissos - listAppointments
  3. Recuperar compromisso específico - fetchAppointment, listAppointmentInstances
  4. Atualizar um compromisso - updateAppointment
  5. Mover compromisso de um calendário para outro - moveAppointment
  6. Excluir compromisso - deleteAppointment

Adicionando um Compromisso

O exemplo de código a seguir demonstra o recurso de adicionar um compromisso em um calendário. Neste exemplo são seguidos os passos:

  1. Criar e inserir um calendário.
  2. Recuperar lista de compromissos de um novo calendário.
  3. Criar um compromisso.
  4. Inserir compromisso.
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);
    }
    
}

Recuperar e Atualizar Compromisso

Aqui a recuperação e atualização do calendário são demonstradas da seguinte forma:

  1. Recuperar compromisso específico.
  2. Modificar o compromisso.
  3. Atualizar o compromisso no calendário.

Presume‑se que um calendário com id "calendarId" e o ID único de compromisso "AppointmentUniqueId" já foram extraídos. O trecho de código a seguir mostra como recuperar e atualizar o compromisso.

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

Mover e Excluir Compromisso

Appointment pode ser movido fornecendo o calendário de origem, o calendário de destino e o ID único do compromisso no calendário de origem. O trecho de código a seguir mostra como mover e excluir o compromisso.

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