static gboolean start_tests (gpointer data) { EwsBookBackendSqliteDB *ebsdb; gboolean populated = FALSE; gchar *vcard_str = NULL, *sexp; EBookQuery *q; GSList *uids = NULL; gboolean store_vcard = FALSE; g_print ("Creating the sqlitedb \n"); op = "create sqlitedb"; ebsdb = ews_book_backend_sqlitedb_new (cache_path, email, folderid, folder_name, store_vcard, &error); if (error) goto exit; add_contacts (ebsdb); if (error) goto exit; g_print ("Getting is_populated \n"); op = "set is_populated"; ews_book_backend_sqlitedb_set_is_populated (ebsdb, folderid, TRUE, &error); if (error) goto exit; g_print ("Setting is_populated \n"); op = "set is_populated"; populated = ews_book_backend_sqlitedb_get_is_populated (ebsdb, folderid, &error); if (error) goto exit; g_print ("Populated: %d \n", populated); g_print ("Setting key value \n"); op = "set key/value"; ews_book_backend_sqlitedb_set_key_value (ebsdb, folderid, "customkey", "stored", &error); if (error) goto exit; g_print ("Get Vcard string \n"); op = "get vcard string"; vcard_str = ews_book_backend_sqlitedb_get_vcard_string (ebsdb, folderid, uid, NULL, NULL, &error); if (error) goto exit; g_print ("VCard: %s \n", vcard_str); g_free (vcard_str); q = e_book_query_field_test (E_CONTACT_FULL_NAME, E_BOOK_QUERY_CONTAINS, "test"); sexp = e_book_query_to_string (q); search_db (ebsdb, "summary query", sexp); e_book_query_unref (q); g_free (sexp); if (error) goto exit; if (store_vcard) { q = e_book_query_any_field_contains ("word"); sexp = e_book_query_to_string (q); search_db (ebsdb, "full_search query", sexp); e_book_query_unref (q); g_free (sexp); if (error) goto exit; } g_print ("Delete contact \n"); op = "delete contact"; uids = g_slist_append (uids, (gchar *) uid); ews_book_backend_sqlitedb_remove_contacts (ebsdb, folderid, uids, &error); g_slist_free (uids); if (error) goto exit; g_print ("Delete addressbook \n"); op = "delete addressbook"; ews_book_backend_sqlitedb_delete_addressbook (ebsdb, folderid, &error); exit: g_object_unref (ebsdb); quit_tests (); return FALSE; }
/* * Search for a buddy in the Evolution contacts. * * @param buddy The buddy to search for. * @param query An optional query. This function takes ownership of @a query, * so callers must e_book_query_ref() it in advance (to obtain a * second reference) if they want to reuse @a query. */ EContact * gevo_search_buddy_in_contacts(PurpleBuddy *buddy, EBookQuery *query) { ESourceList *addressbooks; GError *err = NULL; EBookQuery *full_query; GSList *groups, *g; EContact *result; EContactField protocol_field = gevo_prpl_get_field(buddy->account, buddy); if (protocol_field == 0) return NULL; if (query != NULL) { EBookQuery *queries[2]; queries[0] = query; queries[1] = e_book_query_field_test(protocol_field, E_BOOK_QUERY_IS, buddy->name); if (queries[1] == NULL) { purple_debug_error("evolution", "Error in creating protocol query\n"); e_book_query_unref(query); return NULL; } full_query = e_book_query_and(2, queries, TRUE); } else { full_query = e_book_query_field_test(protocol_field, E_BOOK_QUERY_IS, buddy->name); if (full_query == NULL) { purple_debug_error("evolution", "Error in creating protocol query\n"); return NULL; } } if (!e_book_get_addressbooks(&addressbooks, &err)) { purple_debug_error("evolution", "Unable to fetch list of address books.\n"); e_book_query_unref(full_query); if (err != NULL) g_error_free(err); return NULL; } groups = e_source_list_peek_groups(addressbooks); if (groups == NULL) { g_object_unref(addressbooks); e_book_query_unref(full_query); return NULL; } for (g = groups; g != NULL; g = g->next) { GSList *sources, *s; sources = e_source_group_peek_sources(g->data); for (s = sources; s != NULL; s = s->next) { result = gevo_run_query_in_uri(e_source_get_uri(E_SOURCE(s->data)), full_query); if (result != NULL) { g_object_unref(addressbooks); e_book_query_unref(full_query); return result; } } } g_object_unref(addressbooks); e_book_query_unref(full_query); return NULL; }
void bbdb_sync_buddy_list (void) { GList *blist, *l; EBook *book = NULL; /* Get the Gaim buddy list */ blist = bbdb_get_gaim_buddy_list (); if (blist == NULL) return; /* Open the addressbook */ book = bbdb_open_addressbook (GAIM_ADDRESSBOOK); if (book == NULL) { free_buddy_list (blist); return; } printf ("bbdb: Synchronizing buddy list to contacts...\n"); /* Walk the buddy list */ for (l = blist; l != NULL; l = l->next) { GaimBuddy *b = l->data; EBookQuery *query; GList *contacts; GError *error = NULL; EContact *c; if (b->alias == NULL || strlen (b->alias) == 0) b->alias = b->account_name; /* Look for an exact match full name == buddy alias */ query = e_book_query_field_test (E_CONTACT_FULL_NAME, E_BOOK_QUERY_IS, b->alias); e_book_get_contacts (book, query, &contacts, NULL); e_book_query_unref (query); if (contacts != NULL) { /* FIXME: If there's more than one contact with this name, just give up; we're not smart enough for this. */ if (contacts->next != NULL) continue; c = E_CONTACT (contacts->data); if (! bbdb_merge_buddy_to_contact (book, b, c)) continue; /* Write it out to the addressbook */ if (! e_book_commit_contact (book, c, &error)) { g_warning ("bbdb: Could not modify contact: %s\n", error->message); g_error_free (error); } continue; } /* Otherwise, create a new contact. */ c = e_contact_new (); e_contact_set (c, E_CONTACT_FULL_NAME, (gpointer) b->alias); if (! bbdb_merge_buddy_to_contact (book, b, c)) { g_object_unref (G_OBJECT (c)); continue; } if (! e_book_add_contact (book, c, &error)) { g_warning ("bbdb: Failed to add new contact: %s\n", error->message); g_error_free (error); return; } g_object_unref (G_OBJECT (c)); } /* Update the last-sync'd time */ { GConfClient *gconf; time_t last_sync; char *last_sync_str; gconf = gconf_client_get_default (); time (&last_sync); last_sync_str = g_strdup_printf ("%ld", (glong) last_sync); gconf_client_set_string (gconf, GCONF_KEY_GAIM_LAST_SYNC, last_sync_str, NULL); g_free (last_sync_str); g_object_unref (G_OBJECT (gconf)); } printf ("bbdb: Done syncing buddy list to contacts.\n"); }