}
void
-modest_address_book_add_address (const gchar *address)
+modest_address_book_add_address (const gchar *address,
+ GtkWindow *parent)
{
GtkWidget *dialog = NULL;
gchar *email_address;
}
email_address = modest_text_utils_get_email_address (address);
-
+
attribute = e_vcard_attribute_new (NULL, EVC_EMAIL);
e_vcard_attribute_add_value (attribute, email_address);
- dialog = osso_abook_temporary_contact_dialog_new (NULL, book, attribute, NULL);
+ dialog = osso_abook_temporary_contact_dialog_new (parent, book, attribute, NULL);
+
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
emailid = get_email_addr_from_user(display_name, canceled);
if (emailid) {
- e_contact_set(E_CONTACT (abook_contact), E_CONTACT_EMAIL_1, emailid);
+ list = g_list_append (list, g_strdup (emailid));
+ e_contact_set(E_CONTACT (abook_contact), E_CONTACT_EMAIL, list);
osso_abook_contact_commit (abook_contact, FALSE, NULL, NULL);
}
g_object_unref (abook_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);
- e_contact_set (contact, E_CONTACT_EMAIL_1, email_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) {
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);
-
- /* Asynchronously retrieve contacts */
- e_book_async_get_contacts (book, composite_query, async_get_contacts_cb, addresses);
-
- /* Frees. This will unref the subqueries as well */
- e_book_query_unref (composite_query);
-}
-
typedef struct _CheckNamesInfo {
GtkWidget *banner;
guint show_banner_timeout;
}
gboolean
-modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean update_addressbook)
+modest_address_book_check_names (ModestRecptEditor *recpt_editor,
+ GSList **address_list)
{
const gchar *recipients = NULL;
GSList *start_indexes = NULL, *end_indexes = NULL;
- GSList *current_start, *current_end, *to_commit_addresses;
+ GSList *current_start, *current_end;
gboolean result = TRUE;
GtkTextBuffer *buffer;
gint offset_delta = 0;
current_start = start_indexes;
current_end = end_indexes;
buffer = modest_recpt_editor_get_buffer (recpt_editor);
- to_commit_addresses = NULL;
while (current_start != NULL) {
gchar *address;
}
g_slist_free (tags);
if (!has_recipient) {
- GSList * address_list = NULL;
+ GSList * addr_list = NULL;
- address_list = g_slist_prepend (address_list, address);
+ addr_list = g_slist_prepend (addr_list, address);
modest_recpt_editor_replace_with_resolved_recipient (recpt_editor,
&start_iter, &end_iter,
- address_list,
+ addr_list,
"");
- g_slist_free (address_list);
+ g_slist_free (addr_list);
store_address = TRUE;
}
}
/* 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 && update_addressbook && store_address)
- to_commit_addresses = g_slist_prepend (to_commit_addresses, address);
+ if (result && address_list && store_address)
+ *address_list = g_slist_prepend (*address_list, address);
else
g_free (address);
current_end = g_slist_next (current_end);
}
- /* Add addresses to address-book */
- 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);
- }
+ /* 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);
return result;
}
+#ifdef HAVE_OSSO_ABOOK_CONTACT_CHOOSER_SET_VISIBLE_FUNC
static gboolean
filter_by_name (OssoABookContactChooser *chooser,
OssoABookContact *contact,
else
return FALSE;
}
+#endif
static GList *
select_contacts_for_name_dialog (const gchar *name)
{
+#ifdef HAVE_OSSO_ABOOK_CONTACT_CHOOSER_SET_VISIBLE_FUNC
GtkWidget *contact_view;
OssoABookContactChooser *contact_dialog;
+#else
+ EBookQuery *full_name_book_query = NULL;
+ EBookView *book_view = NULL;
+#endif
+
GList *result = NULL;
gchar *unquoted;
+ unquoted = unquote_string (name);
+
+#ifdef HAVE_OSSO_ABOOK_CONTACT_CHOOSER_SET_VISIBLE_FUNC
contact_dialog = (OssoABookContactChooser *)
osso_abook_contact_chooser_new_with_capabilities (NULL,
_AB("addr_ti_dia_select_contacts"),
osso_abook_contact_chooser_set_maximum_selection (contact_dialog, G_MAXUINT);
/* Set up the filtering */
- unquoted = unquote_string (name);
contact_view = osso_abook_contact_chooser_get_contact_view (contact_dialog);
osso_abook_contact_chooser_set_model (contact_dialog, contact_model);
osso_abook_contact_chooser_set_visible_func (contact_dialog, filter_by_name, unquoted, NULL);
result = osso_abook_contact_chooser_get_selection (contact_dialog);
gtk_widget_destroy ((GtkWidget *) contact_dialog);
+#else
+ full_name_book_query = e_book_query_field_test (E_CONTACT_FULL_NAME, E_BOOK_QUERY_CONTAINS, unquoted);
+ e_book_get_book_view (book, full_name_book_query, NULL, -1, &book_view, NULL);
+ e_book_query_unref (full_name_book_query);
+
+ if (book_view) {
+ GtkWidget *contact_dialog = NULL;
+ osso_abook_list_store_set_book_view (OSSO_ABOOK_LIST_STORE (contact_model), book_view);
+ e_book_view_start (book_view);
+
+ /* TODO: figure out how to make the contact chooser modal */
+ contact_dialog = osso_abook_contact_chooser_new_with_capabilities (NULL,
+ _AB("addr_ti_dia_select_contacts"),
+ OSSO_ABOOK_CAPS_EMAIL,
+ OSSO_ABOOK_CONTACT_ORDER_NAME);
+ /* Enable multiselection */
+ osso_abook_contact_chooser_set_maximum_selection (OSSO_ABOOK_CONTACT_CHOOSER (contact_dialog),
+ G_MAXUINT);
+ osso_abook_contact_chooser_set_model (OSSO_ABOOK_CONTACT_CHOOSER (contact_dialog),
+ contact_model);
+
+ if (gtk_dialog_run (GTK_DIALOG (contact_dialog)) == GTK_RESPONSE_OK)
+ result = osso_abook_contact_chooser_get_selection (OSSO_ABOOK_CONTACT_CHOOSER (contact_dialog));
+ e_book_view_stop (book_view);
+ g_object_unref (book_view);
+ gtk_widget_destroy (contact_dialog);
+ }
+#endif
g_free (unquoted);
{
open_addressbook ();
}
+
+void
+modest_address_book_add_address_list (GSList *address_list)
+{
+ EBookQuery **queries, *composite_query;
+ gint num_add, i;
+
+ g_return_if_fail (address_list);
+
+ if (!book)
+ if (!open_addressbook ())
+ g_return_if_reached ();
+
+ /* Create the list of queries */
+ num_add = g_slist_length (address_list);
+ 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 (address_list, 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);
+
+ /* Asynchronously retrieve contacts */
+ e_book_async_get_contacts (book, composite_query, async_get_contacts_cb, address_list);
+
+ /* Frees. This will unref the subqueries as well */
+ e_book_query_unref (composite_query);
+}