static const gchar * get_email_location (EVCardAttribute *attr) { gint i; for (i = 0; i < G_N_ELEMENTS (common_location); i++) { if (e_vcard_attribute_has_type (attr, common_location[i].name)) return _(common_location[i].pretty_name); } return _("Other"); }
static void accum_sip (GString *buffer, EContact *contact, EABContactFormatterSIPType use_sip_type, const gchar *icon, guint html_flags) { const gchar *html_label = _("SIP"); GList *sip_attr_list, *l; GString *val = g_string_new (""); gchar *tmp; sip_attr_list = e_contact_get_attributes (contact, E_CONTACT_SIP); for (l = sip_attr_list; l; l = g_list_next (l)) { EVCardAttribute *attr = l->data; gchar *sip; const gchar *str; EABContactFormatterSIPType sip_type; if (e_vcard_attribute_has_type (attr, "HOME")) sip_type = EAB_CONTACT_FORMATTER_SIP_TYPE_HOME; else if (e_vcard_attribute_has_type (attr, "WORK")) sip_type = EAB_CONTACT_FORMATTER_SIP_TYPE_WORK; else sip_type = EAB_CONTACT_FORMATTER_SIP_TYPE_OTHER; if (sip_type != use_sip_type) continue; sip = e_vcard_attribute_get_value (attr); if (!sip || !*sip) { g_free (sip); continue; } tmp = maybe_create_url (sip, html_flags); if (tmp) str = tmp; else str = sip; if ((html_flags & E_TEXT_TO_HTML_CONVERT_URLS) != 0) { gchar *value = e_text_to_html (str, html_flags); if (value && *value) { if (val->len) g_string_append (val, "<br>"); g_string_append (val, value); } g_free (value); } else { if (val->len) g_string_append (val, "<br>"); g_string_append (val, str); } g_free (tmp); g_free (sip); } if (val->str && *val->str) { if ((html_flags & E_TEXT_TO_HTML_CONVERT_URLS) != 0) html_flags = 0; render_table_row (buffer, html_label, val->str, icon, html_flags); } g_string_free (val, TRUE); g_list_free_full (sip_attr_list, (GDestroyNotify) e_vcard_attribute_free); }
static void render_contact_column (EABContactFormatter *formatter, EContact *contact, GString *buffer) { GString *accum, *email; GList *email_list, *l, *email_attr_list, *al, *phone_attr_list; gint email_num = 0; const gchar *nl; guint32 phone_flags = 0, sip_flags = 0; if (formatter->priv->supports_tel) phone_flags = E_TEXT_TO_HTML_CONVERT_URLS | E_TEXT_TO_HTML_HIDE_URL_SCHEME | E_TEXT_TO_HTML_URL_IS_WHOLE_TEXT | E_CREATE_TEL_URL; if (formatter->priv->supports_sip) sip_flags = E_TEXT_TO_HTML_CONVERT_URLS | E_TEXT_TO_HTML_HIDE_URL_SCHEME | E_TEXT_TO_HTML_URL_IS_WHOLE_TEXT | E_CREATE_SIP_URL; email = g_string_new (""); nl = ""; email_list = e_contact_get (contact, E_CONTACT_EMAIL); email_attr_list = e_contact_get_attributes (contact, E_CONTACT_EMAIL); for (l = email_list, al = email_attr_list; l && al; l = l->next, al = al->next) { gchar *name = NULL, *mail = NULL; gchar *attr_str = (gchar *) get_email_location ((EVCardAttribute *) al->data); if (!eab_parse_qp_email (l->data, &name, &mail)) mail = e_text_to_html (l->data, 0); g_string_append_printf ( email, "%s%s%s<a href=\"internal-mailto:%d\">%s</a>%s " "<span class=\"header\">(%s)</span>", nl, name ? name : "", name ? " <" : "", email_num, mail, name ? ">" : "", attr_str ? attr_str : ""); email_num++; nl = "<br>"; g_free (name); g_free (mail); } g_list_foreach (email_list, (GFunc) g_free, NULL); g_list_foreach (email_attr_list, (GFunc) e_vcard_attribute_free, NULL); g_list_free (email_list); g_list_free (email_attr_list); accum = g_string_new (""); if (email->len) render_table_row (accum, _("Email"), email->str, NULL, 0); phone_attr_list = e_contact_get_attributes (contact, E_CONTACT_TEL); for (l = phone_attr_list; l; l = g_list_next (l)) { EVCardAttribute *attr = l->data; if (!e_vcard_attribute_has_type (attr, "WORK") && !e_vcard_attribute_has_type (attr, "HOME")) { guint32 html_flags = phone_flags; const gchar *attr_str, *str; gchar *phone, *tmp_value, *label; phone = e_vcard_attribute_get_value (attr); if (!phone || !*phone) { g_free (phone); continue; } attr_str = get_phone_location (attr); label = e_text_to_html (attr_str, E_TEXT_TO_HTML_CONVERT_ALL_SPACES); tmp_value = maybe_create_url (phone, html_flags); if (tmp_value) str = tmp_value; else str = phone; render_table_row (accum, label, str, NULL, html_flags); g_free (tmp_value); g_free (phone); g_free (label); } } g_list_free_full (phone_attr_list, (GDestroyNotify) e_vcard_attribute_free); accum_sip (accum, contact, EAB_CONTACT_FORMATTER_SIP_TYPE_OTHER, NULL, sip_flags); accum_attribute (accum, contact, _("Nickname"), E_CONTACT_NICKNAME, NULL, 0); accum_attribute_multival (accum, contact, _("AIM"), E_CONTACT_IM_AIM, AIM_ICON, 0); accum_attribute_multival (accum, contact, _("GroupWise"), E_CONTACT_IM_GROUPWISE, GROUPWISE_ICON, 0); accum_attribute_multival (accum, contact, _("ICQ"), E_CONTACT_IM_ICQ, ICQ_ICON, 0); accum_attribute_multival (accum, contact, _("Jabber"), E_CONTACT_IM_JABBER, JABBER_ICON, 0); accum_attribute_multival (accum, contact, _("MSN"), E_CONTACT_IM_MSN, MSN_ICON, 0); accum_attribute_multival (accum, contact, _("Yahoo"), E_CONTACT_IM_YAHOO, YAHOO_ICON, 0); accum_attribute_multival (accum, contact, _("Gadu-Gadu"), E_CONTACT_IM_GADUGADU, GADUGADU_ICON, 0); accum_attribute_multival (accum, contact, _("Skype"), E_CONTACT_IM_SKYPE, SKYPE_ICON, 0); accum_attribute_multival (accum, contact, _("Twitter"), E_CONTACT_IM_TWITTER, TWITTER_ICON, 0); if (accum->len) g_string_append_printf ( buffer, "<div class=\"column\" id=\"contact-internet\">" "<table border=\"0\" cellspacing=\"5\">%s</table>" "</div>", accum->str); g_string_free (accum, TRUE); g_string_free (email, TRUE); }