+ /* Asynchronously add contacts */
+ if (to_add_contacts)
+ e_book_async_add_contacts (book, to_add_contacts, NULL, NULL);
+
+ /* Asynchronously commit contacts */
+ if (to_commit_contacts)
+ e_book_async_commit_contacts (book, to_commit_contacts, NULL, NULL);
+
+ /* Free lists */
+ g_list_free (to_add_contacts);
+ g_list_free (to_commit_contacts);
+
+ frees:
+ if (addresses) {
+ g_slist_foreach (addresses, (GFunc) g_free, NULL);
+ g_slist_free (addresses);
+ }
+ if (contacts) {
+ g_list_foreach (contacts, (GFunc) g_object_unref, NULL);
+ g_list_free (contacts);
+ }
+}
+
+
+static void
+add_to_address_book (GSList *addresses)
+{
+ EBookQuery **queries, *composite_query;
+ gint num_add, i;
+
+ g_return_if_fail (addresses);
+
+ if (!book)
+ if (!open_addressbook ())
+ g_return_if_reached ();
+
+ /* Create the list of queries */
+ num_add = g_slist_length (addresses);
+ queries = g_malloc0 (sizeof (EBookQuery *) * num_add);
+ for (i = 0; i < num_add; i++) {
+ gchar *email;
+
+ email = modest_text_utils_get_email_address (g_slist_nth_data (addresses, i));
+ queries[i] = e_book_query_field_test (E_CONTACT_EMAIL, E_BOOK_QUERY_IS, email);
+ g_free (email);
+ }
+
+ /* Create the query */
+ composite_query = e_book_query_or (num_add, queries, TRUE);