/* 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://" }, \
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);
}
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) {
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
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);
}
}
+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 *
/* 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! */
}
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)
{
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);
+
+}