diff options
author | Milan Crha <mcrha@redhat.com> | 2013-01-23 00:06:53 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2013-01-23 00:06:53 +0800 |
commit | 41edc5515b6e9333b36a39bb31ebbd455e74d73d (patch) | |
tree | b47af0cc448596c20151cb482cf9b244f65a7b4d /addressbook/util | |
parent | dde7200f40a26aa9a70949a56aae0a53bbf67afd (diff) | |
download | gsoc2013-evolution-41edc5515b6e9333b36a39bb31ebbd455e74d73d.tar.gz gsoc2013-evolution-41edc5515b6e9333b36a39bb31ebbd455e74d73d.tar.zst gsoc2013-evolution-41edc5515b6e9333b36a39bb31ebbd455e74d73d.zip |
Contact's print doesn't decode QP encoded email addresses
Diffstat (limited to 'addressbook/util')
-rw-r--r-- | addressbook/util/Makefile.am | 4 | ||||
-rw-r--r-- | addressbook/util/eab-book-util.c | 56 | ||||
-rw-r--r-- | addressbook/util/eab-book-util.h | 6 |
3 files changed, 66 insertions, 0 deletions
diff --git a/addressbook/util/Makefile.am b/addressbook/util/Makefile.am index 10f3bb0b97..83bf1e7003 100644 --- a/addressbook/util/Makefile.am +++ b/addressbook/util/Makefile.am @@ -10,7 +10,9 @@ libeabutil_la_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_builddir)/shell \ -I$(top_srcdir)/shell \ + $(CAMEL_CFLAGS) \ $(EVOLUTION_DATA_SERVER_CFLAGS) \ + $(GTKHTML_CFLAGS) \ $(GNOME_PLATFORM_CFLAGS) libeabutil_la_SOURCES = \ @@ -22,7 +24,9 @@ libeabutil_la_LDFLAGS = -avoid-version $(NO_UNDEFINED) libeabutil_la_LIBADD = \ $(top_builddir)/e-util/libeutil.la \ $(top_builddir)/shell/libeshell.la \ + $(CAMEL_LIBS) \ $(EVOLUTION_DATA_SERVER_LIBS) \ + $(GTKHTML_LIBS) \ $(GNOME_PLATFORM_LIBS) dist-hook: diff --git a/addressbook/util/eab-book-util.c b/addressbook/util/eab-book-util.c index 7104c445cb..161d848ce6 100644 --- a/addressbook/util/eab-book-util.c +++ b/addressbook/util/eab-book-util.c @@ -27,6 +27,7 @@ #include <string.h> +#include "e-util/e-util.h" #include "eab-book-util.h" /* Copied from camel_strstrcase */ @@ -244,3 +245,58 @@ e_utf8_casefold_collate (const gchar *str1, { return e_utf8_casefold_collate_len (str1, str2, -1); } + +/* To parse something like... + * =?UTF-8?Q?=E0=A4=95=E0=A4=95=E0=A4=AC=E0=A5=82=E0=A5=8B=E0=A5=87?=\t\n=?UTF-8?Q?=E0=A4=B0?=\t\n<aa@aa.ccom> + * and return the decoded representation of name & email parts. */ +gboolean +eab_parse_qp_email (const gchar *string, + gchar **name, + gchar **email) +{ + struct _camel_header_address *address; + gboolean res = FALSE; + + address = camel_header_address_decode (string, "UTF-8"); + + if (!address) + return FALSE; + + /* report success only when we have filled both name and email address */ + if (address->type == CAMEL_HEADER_ADDRESS_NAME && address->name && *address->name && address->v.addr && *address->v.addr) { + *name = g_strdup (address->name); + *email = g_strdup (address->v.addr); + res = TRUE; + } + + camel_header_address_unref (address); + + return res; +} + +/* This is only wrapper to parse_qp_mail, it decodes string and if returned TRUE, + * then makes one string and returns it, otherwise returns NULL. + * Returned string is usable to place directly into GtkHtml stream. + * Returned value should be freed with g_free. */ +gchar * +eab_parse_qp_email_to_html (const gchar *string) +{ + gchar *name = NULL, *mail = NULL; + gchar *html_name, *html_mail; + gchar *value; + + if (!eab_parse_qp_email (string, &name, &mail)) + return NULL; + + html_name = e_text_to_html (name, 0); + html_mail = e_text_to_html (mail, E_TEXT_TO_HTML_CONVERT_ADDRESSES); + + value = g_strdup_printf ("%s <%s>", html_name, html_mail); + + g_free (html_name); + g_free (html_mail); + g_free (name); + g_free (mail); + + return value; +} diff --git a/addressbook/util/eab-book-util.h b/addressbook/util/eab-book-util.h index f05c9a7bbd..45602c2547 100644 --- a/addressbook/util/eab-book-util.h +++ b/addressbook/util/eab-book-util.h @@ -45,6 +45,12 @@ gint e_utf8_casefold_collate_len (const gchar *str1, gint e_utf8_casefold_collate (const gchar *str1, const gchar *str2); +/* To parse quoted printable address & return email & name fields */ +gboolean eab_parse_qp_email (const gchar *string, + gchar **name, + gchar **email); +gchar * eab_parse_qp_email_to_html (const gchar *string); + G_END_DECLS #endif /* EAB_BOOK_UTIL_H */ |