static void test_remove_contact_async (ETestServerFixture *fixture, gconstpointer user_data) { EBookClient *book_client; EContact *contact = NULL; gchar *uid; RemoveData data; book_client = E_TEST_SERVER_UTILS_SERVICE (fixture, EBookClient); if (!add_contact_from_test_case_verify (book_client, "simple-1", &contact)) g_error ("Failed to add contact"); uid = e_contact_get (contact, E_CONTACT_UID); data.uid = uid; data.loop = fixture->loop; e_book_client_remove_contact (book_client, contact, NULL, remove_contact_cb, &data); g_object_unref (contact); g_main_loop_run (fixture->loop); g_free (uid); }
static gint mergeit (EContactMergingLookup *lookup) { GtkWidget *scrolled_window, *label, *hbox, *dropdown; GtkWidget *content_area; GtkWidget *dialog; GtkTable *table; EContactField field; gchar *string = NULL, *string1 = NULL; GList *use_email_attr_list, *contact_email_attr_list, *match_email_attr_list; GList *use_tel_attr_list, *contact_tel_attr_list, *match_tel_attr_list; GList *use_im_attr_list, *contact_im_attr_list, *match_im_attr_list; GList *use_sip_attr_list, *contact_sip_attr_list, *match_sip_attr_list; gint row = -1; gint value = 0, result; dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), _("Merge Contact")); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); table = (GtkTable *) gtk_table_new (20, 2, FALSE); gtk_container_set_border_width ((GtkContainer *) table, 12); gtk_table_set_row_spacings (table, 6); gtk_table_set_col_spacings (table, 2); gtk_dialog_add_buttons ( GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Merge"), GTK_RESPONSE_OK, NULL); /*we match all the string fields of the already existing contact and the new contact.*/ for (field = E_CONTACT_FULL_NAME; field != (E_CONTACT_LAST_SIMPLE_STRING -1); field++) { dropdown_data *data = NULL; string = (gchar *) e_contact_get_const (lookup->contact, field); string1 = (gchar *) e_contact_get_const (lookup->match, field); /*the field must exist in the new as well as the duplicate contact*/ if (string && *string) { if ((field >= E_CONTACT_FIRST_EMAIL_ID && field <= E_CONTACT_LAST_EMAIL_ID) || (field >= E_CONTACT_FIRST_PHONE_ID && field <= E_CONTACT_LAST_PHONE_ID) || (field >= E_CONTACT_IM_AIM_HOME_1 && field <= E_CONTACT_IM_ICQ_WORK_3) ) { /* ignore multival attributes, they are compared after this for-loop */ continue; } if (!(string1 && *string1) || (g_ascii_strcasecmp (string, string1))) { row++; label = gtk_label_new (e_contact_pretty_name (field)); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), (GtkWidget *) label, FALSE, FALSE, 0); gtk_table_attach_defaults (table, (GtkWidget *) hbox, 0, 1, row, row + 1); data = g_new0 (dropdown_data, 1); dropdown = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (dropdown), string); if (string1 && *string1) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (dropdown), string1); else gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (dropdown), ""); data->field = field; data->match = lookup->match; g_signal_connect ( dropdown, "changed", G_CALLBACK (dropdown_changed), data); g_object_set_data_full (G_OBJECT (dropdown), "eab-contact-merging::dropdown-data", data, g_free); if (field == E_CONTACT_NICKNAME || field == E_CONTACT_GIVEN_NAME || field == E_CONTACT_FAMILY_NAME || field == E_CONTACT_FULL_NAME) gtk_combo_box_set_active (GTK_COMBO_BOX (dropdown), 1); else gtk_combo_box_set_active (GTK_COMBO_BOX (dropdown), 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), (GtkWidget *) dropdown, FALSE, FALSE, 0); gtk_table_attach_defaults (table, (GtkWidget *) hbox, 1, 2, row, row + 1); gtk_widget_show_all ((GtkWidget *) dropdown); } } } match_email_attr_list = e_contact_get_attributes (lookup->match, E_CONTACT_EMAIL); contact_email_attr_list = e_contact_get_attributes (lookup->contact, E_CONTACT_EMAIL); use_email_attr_list = NULL; create_dropdowns_for_multival_attr (match_email_attr_list, contact_email_attr_list, &use_email_attr_list, &row, table, _("Email")); match_tel_attr_list = e_contact_get_attributes (lookup->match, E_CONTACT_TEL); contact_tel_attr_list = e_contact_get_attributes (lookup->contact, E_CONTACT_TEL); use_tel_attr_list = NULL; create_dropdowns_for_multival_attr (match_tel_attr_list, contact_tel_attr_list, &use_tel_attr_list, &row, table, _("Phone")); match_sip_attr_list = e_contact_get_attributes (lookup->match, E_CONTACT_SIP); contact_sip_attr_list = e_contact_get_attributes (lookup->contact, E_CONTACT_SIP); use_sip_attr_list = NULL; create_dropdowns_for_multival_attr (match_sip_attr_list, contact_sip_attr_list, &use_sip_attr_list, &row, table, _("SIP")); match_im_attr_list = e_contact_get_attributes_set (lookup->match, im_fetch_set, G_N_ELEMENTS (im_fetch_set)); contact_im_attr_list = e_contact_get_attributes_set (lookup->contact, im_fetch_set, G_N_ELEMENTS (im_fetch_set)); use_im_attr_list = NULL; create_dropdowns_for_multival_attr (match_im_attr_list, contact_im_attr_list, &use_im_attr_list, &row, table, _("IM")); gtk_window_set_default_size (GTK_WINDOW (dialog), 420, 300); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), GTK_WIDGET (table)); gtk_box_pack_start (GTK_BOX (content_area), GTK_WIDGET (scrolled_window), TRUE, TRUE, 0); gtk_widget_show (scrolled_window); g_signal_connect ( dialog, "map-event", G_CALLBACK (dialog_map), table); gtk_widget_show_all ((GtkWidget *) table); result = gtk_dialog_run (GTK_DIALOG (dialog)); switch (result) { gint ii; GList *ll; case GTK_RESPONSE_OK: set_attributes (lookup->match, E_CONTACT_EMAIL, use_email_attr_list); set_attributes (lookup->match, E_CONTACT_TEL, use_tel_attr_list); set_attributes (lookup->match, E_CONTACT_SIP, use_sip_attr_list); for (ii = 0; ii < G_N_ELEMENTS (im_fetch_set); ii++) { e_contact_set_attributes (lookup->match, im_fetch_set[ii], NULL); } for (ll = use_im_attr_list; ll; ll = ll->next) { EVCard *vcard; vcard = E_VCARD (lookup->match); e_vcard_append_attribute (vcard, e_vcard_attribute_copy ((EVCardAttribute *) ll->data)); } g_object_unref (lookup->contact); lookup->contact = g_object_ref (lookup->match); e_book_client_remove_contact ( lookup->book_client, lookup->match, NULL, remove_contact_ready_cb, lookup); value = 1; break; case GTK_RESPONSE_CANCEL: default: value = 0; break; } gtk_widget_destroy (dialog); g_list_free_full (match_email_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free_full (contact_email_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free (use_email_attr_list); g_list_free_full (match_tel_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free_full (contact_tel_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free (use_tel_attr_list); g_list_free_full (match_im_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free_full (contact_im_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free (use_im_attr_list); g_list_free_full (match_sip_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free_full (contact_sip_attr_list, (GDestroyNotify) e_vcard_attribute_free); g_list_free (use_sip_attr_list); return value; }