Fixes NB#123812, duplicate contacts created when inserting the same email address...
[modest] / src / hildon2 / modest-address-book.c
index 33c6fb5..160bd89 100644 (file)
@@ -615,10 +615,8 @@ async_get_contacts_cb (EBook *book,
                g_slist_foreach (addresses, (GFunc) g_free, NULL);
                g_slist_free (addresses);
        }
-       if (contacts) {
-               g_list_foreach (contacts, (GFunc) g_object_unref, NULL);
+       if (contacts)
                g_list_free (contacts);
-       }
 }
 
 
@@ -786,7 +784,7 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean updat
 
                start_pos = (*((gint*) current_start->data)) + offset_delta;
                end_pos = (*((gint*) current_end->data)) + offset_delta;
-              
+
                start_ptr = g_utf8_offset_to_pointer (recipients, start_pos);
                end_ptr = g_utf8_offset_to_pointer (recipients, end_pos);
 
@@ -892,8 +890,11 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean updat
        }
 
        /* Add addresses to address-book */
-       if (to_commit_addresses)
-               add_to_address_book (to_commit_addresses);
+       if (to_commit_addresses) {
+               to_commit_addresses = modest_text_utils_remove_duplicate_addresses_list (to_commit_addresses);
+               if (to_commit_addresses)
+                       add_to_address_book (to_commit_addresses);
+       }
 
        if (current_start == NULL) {
                gtk_text_buffer_get_end_iter (buffer, &end_iter);
@@ -1023,8 +1024,8 @@ resolve_address (const gchar *address,
        *canceled = FALSE;
        info = g_slice_new0 (CheckNamesInfo);
        show_check_names_banner (info);
-       
-       contact_model = osso_abook_contact_model_new ();
+
+       contact_model = osso_abook_contact_model_get_default ();
        if (!open_addressbook ()) {
                hide_check_names_banner (info);
                if (contact_model) {
@@ -1071,7 +1072,6 @@ resolve_address (const gchar *address,
                        }
                }
 
-               g_list_foreach (resolved_contacts, (GFunc)g_object_unref, NULL);
                g_list_free (resolved_contacts);
                clean_check_names_banner (info);
 
@@ -1139,18 +1139,15 @@ modest_address_book_has_address (const gchar *address)
        roster = (OssoABookAggregator *) osso_abook_aggregator_get_default (NULL);
        contacts = osso_abook_aggregator_find_contacts_for_email_address (roster, email);
        if (!contacts) {
-               g_printerr ("modest: failed to get contacts: %s",
-                           err ? err->message : "<unknown>");
                if (err)
                        g_error_free (err);
                g_free (email);
                return FALSE;
        }
 
-       result = (contacts != NULL);
        if (contacts) {
-               g_list_foreach (contacts, (GFunc)g_object_unref, NULL);
                g_list_free (contacts);
+               result = TRUE;
        }
 
        g_free (email);
@@ -1171,3 +1168,9 @@ modest_address_book_get_my_name ()
        else
                return NULL;
 }
+
+void
+modest_address_book_init (void)
+{
+       open_addressbook ();
+}