diff --git a/src/mu-msg-str.c b/src/mu-msg-str.c index 4441d63b..b5a8bbcd 100644 --- a/src/mu-msg-str.c +++ b/src/mu-msg-str.c @@ -195,3 +195,37 @@ mu_msg_str_summarize (const char* str, size_t max_lines) return summary; } + +const char* +mu_msg_str_display_contact_s (const char *str) +{ + static gchar contact[255]; + gchar *c, *c2; + + if (!str) + str = ""; + + g_strlcpy (contact, str, sizeof(contact)); + + /* strip the address, if any */ + c = g_strstr_len (contact, -1, "<"); + if (c != NULL) + *c = '\0'; + + /* replace " with space */ + for (c2 = contact; *c2; ++c2) + if (*c2 == '"') + *c2 = ' '; + + g_strstrip (contact); + + return contact; +} + +char* +mu_msg_str_display_contact (const char *str) +{ + g_return_val_if_fail (str, NULL); + + return g_strdup (mu_msg_str_display_contact_s (str)); +} diff --git a/src/mu-msg-str.h b/src/mu-msg-str.h index b79fca12..28b184af 100644 --- a/src/mu-msg-str.h +++ b/src/mu-msg-str.h @@ -61,6 +61,27 @@ char* mu_msg_str_date (const char* frm, time_t t) G_GNUC_WARN_UNUSED_RES const char* mu_msg_str_display_date_s (time_t t); +/** + * create a 'display contact' from an email header To/Cc/Bcc/From-type address + * ie., turn + * "Foo Bar" + * into + * Foo Bar + * Note that this is based on some simple heuristics. Max length is 255 bytes. + * + * mu_msg_str_display_contact_s returns a statically allocated + * buffer (ie, non-reentrant), while mu_msg_str_display_contact + * returns a newly allocated string that you must free with g_free + * when done with it. + * + * @param str a 'contact str' (ie., what is in the To/Cc/Bcc/From fields), or NULL + * + * @return a newly allocated string with a display contact + */ +const char* mu_msg_str_display_contact_s (const char *str); +char *mu_msg_str_display_contact (const char *str); + + /** * get a display size for a given size_t; uses M for sizes > * 1000*1000, k for smaller sizes. Note: this function use the