/* this is copied from Evolution's libemail-engine/e-mail-folder-utils.c */ static gchar * mail_folder_uri_build (CamelStore *store, const gchar *folder_name) { const gchar *uid; gchar *encoded_name; gchar *encoded_uid; gchar *uri; g_return_val_if_fail (CAMEL_IS_STORE (store), NULL); g_return_val_if_fail (folder_name != NULL, NULL); /* Skip the leading slash, if present. */ if (*folder_name == '/') folder_name++; uid = camel_service_get_uid (CAMEL_SERVICE (store)); encoded_uid = camel_url_encode (uid, ":;@/"); encoded_name = camel_url_encode (folder_name, "#"); uri = g_strdup_printf ("folder://%s/%s", encoded_uid, encoded_name); g_free (encoded_uid); g_free (encoded_name); return uri; }
/* ************************************************************************* */ static gchar * create_base_uri (EUri * uri) { char *uri_string = NULL; char *user; user = camel_url_encode (uri->user, "@"); if (uri->port != 0) { uri_string = g_strdup_printf ("%s://%s%s%s%s%s:%d/", uri->protocol, user, uri->authmech ? ";auth=" : "", uri->authmech ? uri->authmech : "", uri->user ? "@" : "", uri->host, uri->port); } else { uri_string = g_strdup_printf ("%s://%s%s%s%s%s/", uri->protocol, user, uri->authmech ? ";auth=" : "", uri->authmech ? uri->authmech : "", uri->user ? "@" : "", uri->host); } g_free (user); return uri_string; }
gchar * e_mail_formatter_format_address (EMailFormatter *formatter, GString *out, struct _camel_header_address *a, const gchar *field, gboolean no_links, gboolean elipsize) { CamelMimeFilterToHTMLFlags flags; gchar *name, *mailto, *addr; gint i = 0; gchar *str = NULL; gint limit = mail_config_get_address_count (); g_return_val_if_fail (E_IS_MAIL_FORMATTER (formatter), NULL); g_return_val_if_fail (out != NULL, NULL); g_return_val_if_fail (field != NULL, NULL); flags = CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES; while (a != NULL) { if (a->name) name = camel_text_to_html (a->name, flags, 0); else name = NULL; switch (a->type) { case CAMEL_HEADER_ADDRESS_NAME: if (name != NULL && *name != '\0') { gchar *real, *mailaddr; if (strchr (a->name, ',') || strchr (a->name, ';')) g_string_append_printf (out, ""%s"", name); else g_string_append (out, name); g_string_append (out, " <"); /* rfc2368 for mailto syntax and url encoding extras */ if ((real = camel_header_encode_phrase ((guchar *) a->name))) { mailaddr = g_strdup_printf ("%s <%s>", real, a->v.addr); g_free (real); mailto = camel_url_encode (mailaddr, "?=&()"); g_free (mailaddr); } else { mailto = camel_url_encode (a->v.addr, "?=&()"); } } else { mailto = camel_url_encode (a->v.addr, "?=&()"); } addr = camel_text_to_html (a->v.addr, flags, 0); if (no_links) g_string_append_printf (out, "%s", addr); else g_string_append_printf (out, "<a href=\"mailto:%s\">%s</a>", mailto, addr); g_free (mailto); g_free (addr); if (name != NULL && *name != '\0') g_string_append (out, ">"); break; case CAMEL_HEADER_ADDRESS_GROUP: g_string_append_printf (out, "%s: ", name); e_mail_formatter_format_address ( formatter, out, a->v.members, field, no_links, elipsize); g_string_append_printf (out, ";"); break; default: g_warning ("Invalid address type"); break; } g_free (name); i++; a = a->next; if (a != NULL) g_string_append (out, ", "); if (!elipsize) continue; /* Let us add a '...' if we have more addresses */ if (limit > 0 && i == limit && a != NULL) { if (strcmp (field, _("To")) == 0 || strcmp (field, _("Cc")) == 0 || strcmp (field, _("Bcc")) == 0) { g_string_append ( out, "<span id=\"__evo-moreaddr\" " "style=\"display: none;\">"); str = g_strdup_printf ( "<img src=\"evo-file://%s/plus.png\" " "id=\"__evo-moreaddr-img\" class=\"navigable\">", EVOLUTION_IMAGESDIR); } } } if (elipsize && str) { if (strcmp (field, _("To")) == 0 || strcmp (field, _("Cc")) == 0 || strcmp (field, _("Bcc")) == 0) { g_string_append ( out, "</span>" "<span class=\"navigable\" " "id=\"__evo-moreaddr-ellipsis\" " "style=\"display: inline;\">...</span>"); } } return str; }