使用 Gmail 日历
添加、编辑和删除日历
Aspose.Email 允许应用程序使用以下方式管理 Gmail 日历 IGmailClient 提供添加、删除和更新 Gmail 日历的功能。此客户端类返回包含 Gmail 日历项信息的 ExtendedCalendar 类型对象列表。 IGmailClient 类公开以下日历函数:
- createCalendar 插入新日历
- listCalendars
获取客户端所有日历的列表
- deleteCalendar 它可用于删除日历
- fetchCalendar 它可用于获取客户端的特定日历
- updateCalendar 此函数用于重新插入客户端已修改的日历
要访问日历,使用 Gmail 账户凭据初始化 GoogleTestUser。GoogleOAuthHelper 用于获取用户的访问令牌,随后用于初始化 IGmailClient.
插入、检索和更新
要插入日历,请初始化一个 Calendar 类型对象并使用以下方式插入 createCalendar 函数。 createCalendar 返回新插入日历的 ID。该 ID 可用于从服务器检索日历。以下代码片段展示了如何插入、检索和更新日历。
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。它返回如下设置列表:
- dateFieldOrder
- displayAllTimezones
- hideInvitations
- format24HourTime
- defaultCalendarMode
- defaultEventLength
- locale
- remindOnRespondedEventsOnly
- alternateCalendar
- userLocation
- hideWeekends
- showDeclinedEvents
- weekStart
- weather
- customCalendarMode
- timezoneLabel
- timezone
- useKeyboardShortcuts
- 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 日历中对预约执行的任务列表:
- 添加预约 - createAppointment, importAppointment
- 检索预约列表 - listAppointments
- 检索特定预约 - fetchAppointment, listAppointmentInstances
- 更新预约 - updateAppointment
- 将预约从一个日历移动到另一个日历 - moveAppointment
- 删除预约 - deleteAppointment
添加约会
以下代码示例演示了在日历中添加约会的功能。示例遵循以下步骤:
- 创建并插入日历。
- 从新建的日历中检索约会列表。
- 创建约会。
- 插入约会。
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);
}
}
检索和更新约会
下面演示了日历的检索和更新过程:
- 检索特定约会。
- 修改约会。
- 在日历中更新约会。
假设已经提取了 ID 为 "calendarId" 的日历以及约会唯一 ID 为 "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 可以通过提供源日历、目标日历以及源日历中约会的唯一 ID 来移动日历。以下代码片段演示了如何移动和删除约会。
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);
}