I#1942 - Calendar: Show extra Google attendee info in component preview

Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1942
This commit is contained in:
Milan Crha
2022-06-27 18:18:43 +02:00
parent 18e1dc1f06
commit 5557253687
2 changed files with 118 additions and 5 deletions

View File

@ -452,6 +452,7 @@ cal_component_preview_write_html (ECalComponentPreview *preview,
for (a = attendees; a; a = a->next) { for (a = attendees; a; a = a->next) {
ECalComponentAttendee *attnd = a->data; ECalComponentAttendee *attnd = a->data;
ECalComponentParameterBag *param_bag;
const gchar *email = cal_comp_util_get_attendee_email (attnd); const gchar *email = cal_comp_util_get_attendee_email (attnd);
if (!attnd || !email || !*email) if (!attnd || !email || !*email)
@ -490,6 +491,66 @@ cal_component_preview_write_html (ECalComponentPreview *preview,
g_free (str); g_free (str);
} }
param_bag = e_cal_component_attendee_get_parameter_bag (attnd);
if (param_bag) {
ICalParameter *num_guests = NULL;
ICalParameter *response_comment = NULL;
guint ii, count;
count = e_cal_component_parameter_bag_get_count (param_bag);
for (ii = 0; ii < count && (!num_guests || !response_comment); ii++) {
ICalParameter *param = e_cal_component_parameter_bag_get (param_bag, ii);
if (param && i_cal_parameter_isa (param) == I_CAL_X_PARAMETER) {
const gchar *xname = i_cal_parameter_get_xname (param);
if (!xname)
continue;
if (!num_guests && g_ascii_strcasecmp (xname, "X-NUM-GUESTS") == 0)
num_guests = param;
if (!response_comment && g_ascii_strcasecmp (xname, "X-RESPONSE-COMMENT") == 0)
response_comment = param;
}
}
if (num_guests && i_cal_parameter_get_xvalue (num_guests)) {
gint n_guests;
n_guests = (gint) g_ascii_strtoll (i_cal_parameter_get_xvalue (num_guests), NULL, 10);
if (n_guests > 0) {
gchar *str, *escaped;
str = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE, "with one guest", "with %d guests", n_guests), n_guests);
escaped = g_markup_escape_text (str, -1);
g_string_append_c (buffer, ' ');
g_string_append (buffer, escaped);
g_free (escaped);
g_free (str);
}
}
if (response_comment) {
const gchar *value = i_cal_parameter_get_xvalue (response_comment);
if (value && *value) {
gchar *escaped;
escaped = g_markup_escape_text (value, -1);
g_string_append (buffer, " (");
g_string_append (buffer, escaped);
g_string_append_c (buffer, ')');
g_free (escaped);
}
}
}
have = TRUE; have = TRUE;
} }

View File

@ -1519,6 +1519,8 @@ preview_comp (EWebViewPreview *preview,
for (link = attendees; link; link = g_slist_next (link)) { for (link = attendees; link; link = g_slist_next (link)) {
ECalComponentAttendee *attnd = link->data; ECalComponentAttendee *attnd = link->data;
ECalComponentParameterBag *param_bag;
GString *str;
const gchar *value, *cn; const gchar *value, *cn;
if (!attnd) if (!attnd)
@ -1530,15 +1532,65 @@ preview_comp (EWebViewPreview *preview,
cn = e_cal_component_attendee_get_cn (attnd); cn = e_cal_component_attendee_get_cn (attnd);
str = g_string_new ("");
if (cn && *cn) { if (cn && *cn) {
tmp = g_strconcat (cn, " <", strip_mailto (value), ">", NULL); g_string_append_printf (str, "%s <%s>", cn, strip_mailto (value));
/* Translators: Appointment's attendees */
e_web_view_preview_add_section (preview, have ? NULL : C_("iCalImp", "Attendees"), tmp);
g_free (tmp);
} else { } else {
e_web_view_preview_add_section (preview, have ? NULL : C_("iCalImp", "Attendees"), strip_mailto (value)); g_string_append (str, strip_mailto (value));
} }
param_bag = e_cal_component_attendee_get_parameter_bag (attnd);
if (param_bag) {
ICalParameter *num_guests = NULL;
ICalParameter *response_comment = NULL;
guint ii, count;
count = e_cal_component_parameter_bag_get_count (param_bag);
for (ii = 0; ii < count && (!num_guests || !response_comment); ii++) {
ICalParameter *param = e_cal_component_parameter_bag_get (param_bag, ii);
if (param && i_cal_parameter_isa (param) == I_CAL_X_PARAMETER) {
const gchar *xname = i_cal_parameter_get_xname (param);
if (!xname)
continue;
if (!num_guests && g_ascii_strcasecmp (xname, "X-NUM-GUESTS") == 0)
num_guests = param;
if (!response_comment && g_ascii_strcasecmp (xname, "X-RESPONSE-COMMENT") == 0)
response_comment = param;
}
}
if (num_guests && i_cal_parameter_get_xvalue (num_guests)) {
gint n_guests;
n_guests = (gint) g_ascii_strtoll (i_cal_parameter_get_xvalue (num_guests), NULL, 10);
if (n_guests > 0) {
g_string_append_c (str, ' ');
g_string_append_printf (str, g_dngettext (GETTEXT_PACKAGE, "with one guest", "with %d guests", n_guests), n_guests);
}
}
if (response_comment) {
const gchar *value = i_cal_parameter_get_xvalue (response_comment);
if (value && *value) {
g_string_append (str, " (");
g_string_append (str, value);
g_string_append_c (str, ')');
}
}
}
/* Translators: Appointment's attendees */
e_web_view_preview_add_section (preview, have ? NULL : C_("iCalImp", "Attendees"), str->str);
g_string_free (str, TRUE);
have = TRUE; have = TRUE;
} }