From: Sergio Villar Senin Date: Mon, 14 Sep 2009 10:45:29 +0000 (+0200) Subject: Final fix for NB#137187, problems parsing email addresses X-Git-Tag: 3.0.17-rc54~1 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=9a4596ecf9c579c7d36dc28c9da5c4af6d1a7141;hp=2790db37ef54fd3313e70a3eed42b43b63c3b9ab Final fix for NB#137187, problems parsing email addresses --- diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 88f48e8..89dcb91 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -607,29 +607,49 @@ modest_text_utils_get_addresses_indexes (const gchar *addresses, GSList **start_ GString *str; gchar *start, *cur; + if (!addresses) + return; + + if (strlen (addresses) == 0) + return; + str = g_string_new (""); start = (gchar*) addresses; cur = (gchar*) addresses; for (cur = start; *cur != '\0'; cur = g_utf8_next_char (cur)) { if (*cur == ',' || *cur == ';') { - if (!g_utf8_strchr (start, (cur - start + 1), g_utf8_get_char ("@"))) + gint *start_index, *end_index; + gchar *next_char = g_utf8_next_char (cur); + + if (!g_utf8_strchr (start, (cur - start + 1), g_utf8_get_char ("@")) && + next_char && *next_char != '\n') continue; - { - gint *start_index, *end_index; - start_index = g_new0 (gint, 1); - end_index = g_new0 (gint, 1); - *start_index = g_utf8_pointer_to_offset (addresses, start); - *end_index = g_utf8_pointer_to_offset (addresses, cur);; - *start_indexes = g_slist_prepend (*start_indexes, start_index); - *end_indexes = g_slist_prepend (*end_indexes, end_index); - start = g_utf8_next_char (cur); - } + + start_index = g_new0 (gint, 1); + end_index = g_new0 (gint, 1); + *start_index = g_utf8_pointer_to_offset (addresses, start); + *end_index = g_utf8_pointer_to_offset (addresses, cur);; + *start_indexes = g_slist_prepend (*start_indexes, start_index); + *end_indexes = g_slist_prepend (*end_indexes, end_index); + start = g_utf8_next_char (cur); } } - *start_indexes = g_slist_reverse (*start_indexes); - *end_indexes = g_slist_reverse (*end_indexes); + if (start != cur) { + gint *start_index, *end_index; + start_index = g_new0 (gint, 1); + end_index = g_new0 (gint, 1); + *start_index = g_utf8_pointer_to_offset (addresses, start); + *end_index = g_utf8_pointer_to_offset (addresses, cur);; + *start_indexes = g_slist_prepend (*start_indexes, start_index); + *end_indexes = g_slist_prepend (*end_indexes, end_index); + } + + if (*start_indexes) + *start_indexes = g_slist_reverse (*start_indexes); + if (*end_indexes) + *end_indexes = g_slist_reverse (*end_indexes); } @@ -1692,7 +1712,7 @@ modest_text_utils_validate_recipient (const gchar *recipient, const gchar **inva } } if (last_quote) - current = last_quote; + current = g_utf8_next_char (last_quote); } else { has_error = TRUE; for (current = stripped ; *current != '\0'; current = g_utf8_next_char (current)) { @@ -2097,7 +2117,7 @@ quote_name_part (GString **str, gchar **cur, gchar **start) if (blank && (blank != *start)) { if (is_quoted (*start, blank - 1)) { *str = g_string_append_len (*str, *start, str_len); - *str = g_string_append (*str, "; "); + *str = g_string_append (*str, ";"); *start = g_utf8_next_char (*cur); } else { *str = g_string_append_c (*str, '"'); @@ -2108,12 +2128,12 @@ quote_name_part (GString **str, gchar **cur, gchar **start) *str = g_string_append_len (*str, blank, (g_utf8_pointer_to_offset (*start, *cur) - g_utf8_pointer_to_offset (*start, blank))); - *str = g_string_append (*str, "; "); + *str = g_string_append (*str, ";"); *start = g_utf8_next_char (*cur); } } else { *str = g_string_append_len (*str, *start, str_len); - *str = g_string_append (*str, "; "); + *str = g_string_append (*str, ";"); *start = g_utf8_next_char (*cur); } } diff --git a/src/widgets/modest-recpt-editor.c b/src/widgets/modest-recpt-editor.c index 3717363..6e46a13 100644 --- a/src/widgets/modest-recpt-editor.c +++ b/src/widgets/modest-recpt-editor.c @@ -232,10 +232,11 @@ modest_recpt_editor_add_resolved_recipient (ModestRecptEditor *recpt_editor, GSL gtk_text_buffer_get_bounds (buffer, &start, &end); buffer_contents = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); + g_strstrip (buffer_contents); if (!g_str_has_suffix (buffer_contents, "\n")) { if (g_str_has_suffix (buffer_contents, ";")||(g_str_has_suffix (buffer_contents, ","))) gtk_text_buffer_insert (buffer, &end, "\n", -1); - else + else gtk_text_buffer_insert (buffer, &end, ";\n", -1); } g_free (buffer_contents); @@ -249,7 +250,7 @@ modest_recpt_editor_add_resolved_recipient (ModestRecptEditor *recpt_editor, GSL if ((recipient) && (strlen (recipient) != 0)) { if (!is_first_recipient) - gtk_text_buffer_insert (buffer, &iter, "\n", -1); + gtk_text_buffer_insert (buffer, &iter, "\n", -1); gtk_text_buffer_insert (buffer, &iter, recipient, -1); gtk_text_buffer_insert (buffer, &iter, ";", -1); @@ -352,7 +353,6 @@ modest_recpt_editor_get_recipients (ModestRecptEditor *recpt_editor) ModestRecptEditorPrivate *priv; GtkTextBuffer *buffer = NULL; GtkTextIter start, end; - gchar *c; g_return_val_if_fail (MODEST_IS_RECPT_EDITOR (recpt_editor), NULL); priv = MODEST_RECPT_EDITOR_GET_PRIVATE (recpt_editor); @@ -372,11 +372,6 @@ modest_recpt_editor_get_recipients (ModestRecptEditor *recpt_editor) gtk_text_buffer_get_end_iter (buffer, &end); priv->recipients = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); - for (c = priv->recipients; *c != '\0'; c = g_utf8_next_char (c)) { - if (*c == '\n') { - *c = ' '; - } - } return priv->recipients; @@ -643,7 +638,7 @@ create_valid_text (const gchar *text, gint len) if (last_separator) { gchar *last_at = g_utf8_strrchr (str->str, -1, g_utf8_get_char ("@")); if (last_at) { - if (last_at > last_separator) + if (last_at < last_separator) str = g_string_append_c (str, '\n'); } } else { @@ -675,17 +670,20 @@ modest_recpt_editor_on_insert_text_after (GtkTextBuffer *buffer, ModestRecptEditorPrivate *priv = MODEST_RECPT_EDITOR_GET_PRIVATE (editor); prev = *location; - if (!gtk_text_iter_backward_char (&prev)) + /* We must go backwards twice as location points to the next + valid position to insert text */ + if (!gtk_text_iter_backward_chars (&prev, 2)) return; prev_char = gtk_text_iter_get_char (&prev); g_signal_handlers_block_by_func (buffer, modest_recpt_editor_on_insert_text, editor); g_signal_handlers_block_by_func (buffer, modest_recpt_editor_on_insert_text_after, editor); - if ((prev_char == ';'||prev_char == ',')&&(!quote_opened(location))) { + if ((prev_char == ';'||prev_char == ',')&&(!quote_opened(&prev))) { GtkTextMark *insert; - gtk_text_buffer_insert (buffer, location, "\n",-1); + gtk_text_iter_forward_char (&prev); + gtk_text_buffer_insert (buffer, &prev, "\n",-1); insert = gtk_text_buffer_get_insert (buffer); - gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (priv->text_view), location, 0.0,TRUE, 0.0, 1.0); + gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (priv->text_view), &prev, 0.0,TRUE, 0.0, 1.0); } g_signal_handlers_unblock_by_func (buffer, modest_recpt_editor_on_insert_text, editor); g_signal_handlers_unblock_by_func (buffer, modest_recpt_editor_on_insert_text_after, editor);