- } else {
- /* it's not yet in the addressbook, add it now! */
- EContact *new_contact = e_contact_new ();
- gchar *display_address;
- display_address = g_strdup (address);
- if (display_address) {
- modest_text_utils_get_display_address (display_address);
- if ((display_address[0] != '\0') && (strlen (display_address) != strlen (address)))
- e_contact_set (new_contact, E_CONTACT_FULL_NAME, (const gpointer)display_address);
+ iter = addresses;
+ to_commit_contacts = NULL;
+ to_add_contacts = NULL;
+ while (iter) {
+ EContact *contact;
+ const gchar *address;
+
+ /* Look for a contact with such address. We perform
+ this kind of search because we assume that users
+ don't usually send emails to tons of addresses */
+ address = (const gchar *) iter->data;
+ contact = get_contact_for_address (contacts, address);
+
+ /* Add new or commit existing contact */
+ if (contact) {
+ to_commit_contacts = g_list_prepend (to_commit_contacts, contact);
+ g_debug ("----Preparing to commit contact %s", address);
+ } else {
+ gchar *email_address, *display_address;
+ GList *email_list = NULL;
+
+ /* Create new contact and add it to the list */
+ contact = e_contact_new ();
+ email_address = modest_text_utils_get_email_address (address);
+ email_list = g_list_append (email_list, email_address);
+ e_contact_set (contact, E_CONTACT_EMAIL, email_list);
+ g_free (email_address);
+ g_list_free (email_list);
+
+ display_address = g_strdup (address);
+ if (display_address) {
+ modest_text_utils_get_display_address (display_address);
+ if ((display_address[0] != '\0') && (strlen (display_address) != strlen (address)))
+ e_contact_set (contact, E_CONTACT_FULL_NAME, (const gpointer)display_address);
+ g_free (display_address);
+ }
+
+ to_add_contacts = g_list_prepend (to_add_contacts, contact);
+ g_debug ("----Preparing to add contact %s", address);