From a3fa613b8f9ff7a21d9dda408086f2145bf54c94 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Thu, 25 Jun 2009 12:02:17 +0200 Subject: [PATCH] Fixes NB#124742, duplicate entries inserted in addressbook when same address is in To, Cc, Bcc... Updated check_names() calls to the new API Updated Diablo version to the new addressbook API --- src/hildon2/modest-address-book.c | 2 -- src/hildon2/modest-msg-edit-window.c | 17 ++++++++++------- src/maemo/modest-address-book.c | 11 ++++++++--- src/maemo/modest-msg-edit-window.c | 22 +++++++++++++++------- 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/hildon2/modest-address-book.c b/src/hildon2/modest-address-book.c index 30ccccb..f3e8fe4 100644 --- a/src/hildon2/modest-address-book.c +++ b/src/hildon2/modest-address-book.c @@ -740,8 +740,6 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, current_start = start_indexes; current_end = end_indexes; buffer = modest_recpt_editor_get_buffer (recpt_editor); - if (address_list) - *address_list = NULL; while (current_start != NULL) { gchar *address; diff --git a/src/hildon2/modest-msg-edit-window.c b/src/hildon2/modest-msg-edit-window.c index d77a975..58325e6 100644 --- a/src/hildon2/modest-msg-edit-window.c +++ b/src/hildon2/modest-msg-edit-window.c @@ -3423,7 +3423,8 @@ gboolean modest_msg_edit_window_check_names (ModestMsgEditWindow *window, gboolean add_to_addressbook) { ModestMsgEditWindowPrivate *priv = NULL; - + GSList *address_list = NULL; + g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window), FALSE); priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); @@ -3436,26 +3437,28 @@ modest_msg_edit_window_check_names (ModestMsgEditWindow *window, gboolean add_to return FALSE; } + /* Check names */ g_object_ref (window); -/* if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->to_field), add_to_addressbook)) { */ - if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->to_field), NULL)) { + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->to_field), &address_list)) { modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->to_field)); g_object_unref (window); return FALSE; } -/* if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->cc_field), add_to_addressbook)) { */ - if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->cc_field), NULL)) { + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->cc_field), &address_list)) { modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->cc_field)); g_object_unref (window); return FALSE; } -/* if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->bcc_field), add_to_addressbook)) { */ - if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->bcc_field), NULL)) { + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->bcc_field), &address_list)) { modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->bcc_field)); g_object_unref (window); return FALSE; } + /* Add contacts to address book */ + if (address_list) + modest_address_book_add_address_list (address_list); + if (!modest_recpt_editor_has_focus (MODEST_RECPT_EDITOR (priv->cc_field)) && !modest_recpt_editor_has_focus (MODEST_RECPT_EDITOR (priv->bcc_field))) modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->to_field)); diff --git a/src/maemo/modest-address-book.c b/src/maemo/modest-address-book.c index a34123b..2bf3808 100644 --- a/src/maemo/modest-address-book.c +++ b/src/maemo/modest-address-book.c @@ -817,10 +817,11 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, /* so, it seems a valid address */ /* note: adding it the to the addressbook if it did not exist yet, * and adding it to the recent_list */ - if (result && store_address) - add_to_address_book (address); + if (result && address_list && store_address) + *address_list = g_slist_prepend (*address_list, address); + else + g_free (address); - g_free (address); if (result == FALSE) break; @@ -828,6 +829,10 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, current_end = g_slist_next (current_end); } + /* Remove dup's */ + if (address_list && *address_list) + *address_list = modest_text_utils_remove_duplicate_addresses_list (*address_list); + if (current_start == NULL) { gtk_text_buffer_get_end_iter (buffer, &end_iter); gtk_text_buffer_place_cursor (buffer, &end_iter); diff --git a/src/maemo/modest-msg-edit-window.c b/src/maemo/modest-msg-edit-window.c index 6e7907e..7f15f1e 100644 --- a/src/maemo/modest-msg-edit-window.c +++ b/src/maemo/modest-msg-edit-window.c @@ -3178,7 +3178,8 @@ gboolean modest_msg_edit_window_check_names (ModestMsgEditWindow *window, gboolean add_to_addressbook) { ModestMsgEditWindowPrivate *priv = NULL; - + GSList *address_list = NULL; + g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window), FALSE); priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); @@ -3191,25 +3192,32 @@ modest_msg_edit_window_check_names (ModestMsgEditWindow *window, gboolean add_to return FALSE; } -/* if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->to_field), add_to_addressbook)) { */ - if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->to_field), NULL)) { + /* Check names */ + g_object_ref (window); + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->to_field), &address_list)) { modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->to_field)); + g_object_unref (window); return FALSE; } -/* if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->cc_field), add_to_addressbook)) { */ - if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->cc_field), NULL)) { + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->cc_field), &address_list)) { modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->cc_field)); + g_object_unref (window); return FALSE; } -/* if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->bcc_field), add_to_addressbook)) { */ - if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->bcc_field), NULL)) { + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->bcc_field), &address_list)) { modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->bcc_field)); + g_object_unref (window); return FALSE; } + /* Add contacts to address book */ + if (address_list) + modest_address_book_add_address_list (address_list); + if (!modest_recpt_editor_has_focus (MODEST_RECPT_EDITOR (priv->cc_field)) && !modest_recpt_editor_has_focus (MODEST_RECPT_EDITOR (priv->bcc_field))) modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->to_field)); + g_object_unref (window); return TRUE; -- 1.7.9.5