- EBookQuery *query;
- GList *contacts = NULL;
- GError *err = NULL;
- gchar *email;
-
- g_return_val_if_fail (address, FALSE);
-
- if (!book) {
- if (!open_addressbook ()) {
- g_return_val_if_reached (FALSE);
+ GSList *addresses, *iter;
+ GList *to_commit_contacts, *to_add_contacts;
+
+ addresses = (GSList *) closure;
+
+ /* Check errors */
+ if (status != E_BOOK_ERROR_OK)
+ goto frees;
+
+ 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 {
+ to_add_contacts = g_list_prepend (to_add_contacts, contact);
+ g_debug ("Preparing to add contact %s", address);