X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-text-utils.c;h=5426b0b173eb0a4482666c7ef3e047185d0d3aba;hp=59f5cac3c0121ef33896849f6bf78c17503d1717;hb=4927d2ba3643bba250d1c0e12a8c732db905fad3;hpb=0fbbf474b218d00f517fae83561a05f6919679e7 diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 59f5cac..5426b0b 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -109,8 +109,8 @@ struct _url_match_t { /* note: match MARK_AMP_URI_STR as well, because after txt->html, a '&' will look like $(MARK_AMP_URI_STR)"amp;" */ #define MAIL_VIEWER_URL_MATCH_PATTERNS { \ - { "(file|rtsp|http|ftp|https|mms|mmsh|webcal|feed|rtsp|rdp|lastfm)://[-a-z0-9_$.+!*(),;:@%=?/~#" MARK_AMP_URI_STR \ - "]+[-a-z0-9_$%" MARK_AMP_URI_STR "=?/~#]", \ + { "(feed:|)(file|rtsp|http|ftp|https|mms|mmsh|webcal|feed|rtsp|rdp|lastfm|sip)://[-a-z0-9_$.+!*(),;:@%=\?/~#&" MARK_AMP_URI_STR \ + "]+[-a-z0-9_$%&" MARK_AMP_URI_STR "=?/~#]", \ NULL, NULL },\ { "www\\.[-a-z0-9_$.+!*(),;:@%=?/~#" MARK_AMP_URI_STR "]+[-a-z0-9_$%" MARK_AMP_URI_STR "=?/~#]",\ NULL, "http://" }, \ @@ -286,6 +286,8 @@ modest_text_utils_strftime(char *s, gsize max, const char *fmt, time_t timet) garbage in the s variable */ if (s) s[0] = '\0'; + else + return 0; /* does not work on old maemo glib: * g_date_set_time_t (&date, timet); @@ -1016,7 +1018,7 @@ modest_text_utils_quote_html (const gchar *text, } quote_html_add_to_gstring (result_string, cite); quoted_text = g_string_new (""); - quoted_text = modest_text_utils_quote_body (quoted_text, text, ">", limit); + quoted_text = modest_text_utils_quote_body (quoted_text, (text) ? text : "", ">", limit); quote_html_add_to_gstring (result_string, quoted_text->str); g_string_free (quoted_text, TRUE); if (attachments) { @@ -1040,6 +1042,7 @@ cmp_offsets_reverse (const url_match_t *match1, const url_match_t *match2) static gint url_matches_block = 0; static url_match_pattern_t patterns[] = MAIL_VIEWER_URL_MATCH_PATTERNS; +static GMutex *url_patterns_mutex = NULL; static gboolean @@ -1074,17 +1077,25 @@ free_patterns () void modest_text_utils_hyperlinkify_begin (void) { + + if (url_patterns_mutex == NULL) { + url_patterns_mutex = g_mutex_new (); + } + g_mutex_lock (url_patterns_mutex); if (url_matches_block == 0) compile_patterns (); url_matches_block ++; + g_mutex_unlock (url_patterns_mutex); } void modest_text_utils_hyperlinkify_end (void) { + g_mutex_lock (url_patterns_mutex); url_matches_block--; if (url_matches_block <= 0) free_patterns (); + g_mutex_unlock (url_patterns_mutex); } @@ -1263,7 +1274,37 @@ modest_text_utils_get_display_address (gchar *address) } +gchar * +modest_text_utils_get_display_addresses (const gchar *recipients) +{ + gchar *addresses; + GSList *recipient_list; + + addresses = NULL; + recipient_list = modest_text_utils_split_addresses_list (recipients); + if (recipient_list) { + GString *add_string = g_string_sized_new (strlen (recipients)); + GSList *iter = recipient_list; + gboolean first = TRUE; + + while (iter) { + /* Strings are changed in place */ + modest_text_utils_get_display_address ((gchar *) iter->data); + if (G_UNLIKELY (first)) { + g_string_append_printf (add_string, "%s", (gchar *) iter->data); + first = FALSE; + } else { + g_string_append_printf (add_string, ", %s", (gchar *) iter->data); + } + iter = g_slist_next (iter); + } + g_slist_foreach (recipient_list, (GFunc) g_free, NULL); + g_slist_free (recipient_list); + addresses = g_string_free (add_string, FALSE); + } + return addresses; +} gchar * @@ -1392,10 +1433,17 @@ modest_text_utils_get_display_date (time_t date) /* if it's today, show the time, if it's not today, show the date instead */ /* TODO: take into account the system config for 24/12h */ +#ifdef MODEST_TOOLKIT_HILDON2 if (day == date_day) /* is the date today? */ modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, _HL("wdgt_va_24h_time"), date); else modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, _HL("wdgt_va_date"), date); +#else + if (day == date_day) /* is the date today? */ + modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%X", date); + else + modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%x", date); +#endif return date_buf; /* this is a static buffer, don't free! */ } @@ -1826,6 +1874,17 @@ modest_text_utils_buffer_selection_is_valid (GtkTextBuffer *buffer) return result; } +static void +remove_quotes (gchar **quotes) +{ + if (g_str_has_prefix (*quotes, "\"") && g_str_has_suffix (*quotes, "\"")) { + gchar *result; + result = g_strndup ((*quotes)+1, strlen (*quotes) - 2); + g_free (*quotes); + *quotes = result; + } +} + gchar * modest_text_utils_escape_mnemonics (const gchar *text) { @@ -1845,3 +1904,53 @@ modest_text_utils_escape_mnemonics (const gchar *text) return g_string_free (result, FALSE); } + +gchar * +modest_text_utils_simplify_recipients (const gchar *recipients) +{ + GSList *addresses, *node; + GString *result; + gboolean is_first = TRUE; + + if (recipients == NULL) + return g_strdup (""); + + addresses = modest_text_utils_split_addresses_list (recipients); + result = g_string_new (""); + + for (node = addresses; node != NULL; node = g_slist_next (node)) { + const gchar *address = (const gchar *) node->data; + gchar *left_limit, *right_limit; + left_limit = strstr (address, "<"); + right_limit = g_strrstr (address, ">"); + + if (is_first) + is_first = FALSE; + else + result = g_string_append (result, ", "); + + if ((left_limit == NULL)||(right_limit == NULL)|| (left_limit > right_limit)) { + result = g_string_append (result, address); + } else { + gchar *name_side; + gchar *email_side; + name_side = g_strndup (address, left_limit - address); + name_side = g_strstrip (name_side); + remove_quotes (&name_side); + email_side = get_email_from_address (address); + if (name_side && email_side && !strcmp (name_side, email_side)) { + result = g_string_append (result, email_side); + } else { + result = g_string_append (result, address); + } + g_free (name_side); + g_free (email_side); + } + + } + g_slist_foreach (addresses, (GFunc)g_free, NULL); + g_slist_free (addresses); + + return g_string_free (result, FALSE); + +}