static void moko_contacts_init (MokoContacts *contacts) { MokoContactsPrivate *priv; EBook *book; EBookView *view; EBookQuery *query; GList *contact, *c; priv = contacts->priv = MOKO_CONTACTS_GET_PRIVATE (contacts); priv->contacts = NULL; priv->entries = NULL; priv->start = NULL; priv->prefixes = g_hash_table_new ((GHashFunc)g_str_hash, (GEqualFunc)g_str_equal); priv->uids = g_hash_table_new ((GHashFunc)g_str_hash, (GEqualFunc)g_str_equal); query = e_book_query_any_field_contains (""); /* Open the system book and check that it is valid */ book = priv->book = e_book_new_system_addressbook (NULL); if (!book) { g_warning ("Failed to create system book\n"); return; } if (!e_book_open (book, FALSE, NULL)) { g_warning ("Failed to open system book\n"); return; } if (!e_book_get_contacts (book, query, &contact, NULL)) { g_warning ("Failed to get contacts from system book\n"); return; } /* Go through the contacts, creating the contact structs, and entry structs*/ for (c = contact; c != NULL; c = c->next) { moko_contacts_add_contact (contacts, E_CONTACT (c->data)); } /* Connect to the ebookviews signals */ if (e_book_get_book_view (book, query, NULL, 0, &view, NULL)) { g_signal_connect (G_OBJECT (view), "contacts-added", G_CALLBACK (on_ebook_contacts_added), (gpointer)contacts); g_signal_connect (G_OBJECT (view), "contacts-changed", G_CALLBACK (on_ebook_contacts_changed), (gpointer)contacts); g_signal_connect (G_OBJECT (view), "contacts-removed", G_CALLBACK (on_ebook_contacts_removed), (gpointer)contacts); e_book_view_start (view); } e_book_query_unref(query); }
static void print_all_emails (EBook *book) { EBookQuery *query; gboolean status; GList *cards, *c; query = e_book_query_field_exists (E_CONTACT_FULL_NAME); status = e_book_get_contacts (book, query, &cards, NULL); e_book_query_unref (query); if (status == FALSE) { printf ("error %d getting card list\n", status); exit (0); } for (c = cards; c; c = c->next) { EContact *contact = E_CONTACT (c->data); print_email (contact); g_object_unref (contact); } g_list_free (cards); }
gint main (gint argc, gchar **argv) { #if 0 /* ACCOUNT_MGMT */ EBook *book; gboolean status; EBookQuery *query; GList *c, *contacts; g_type_init (); if (argc < 3) { printf ("usage: test-search <addressbook uri> <query>\n"); exit (0); } query = e_book_query_from_string (argv[2]); if (!query) { printf ("failed to parse query string '%s'\n", argv[2]); exit (0); } book = e_book_new_system_addressbook (NULL); if (!book) { printf ("failed to create ebook\n"); exit (0); } status = e_book_open (book, TRUE, NULL); if (status == FALSE) { printf ("failed to open addressbook\n"); exit (0); } status = e_book_get_contacts (book, query, &contacts, NULL); if (status == FALSE) { printf ("failed to get contacts\n"); exit (0); } for (c = contacts; c; c = c->next) { EContact *contact = E_CONTACT (c->data); printf ("%s\n", e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30)); g_object_unref (contact); } g_list_free (contacts); g_object_unref (book); #endif /* ACCOUNT_MGMT */ return 0; }
/* retrieve a list of contacts from the address book */ static int addrbook_libebook_retrieve(ship_list_t *list) { int ret = -1; contact_t *ct = 0; GError *error = 0; GList *contacts = 0, *loop; EBookQuery *query = 0; ship_lock(addrbook_lock); ASSERT_TRUE(query = e_book_query_any_field_contains(""), err); ASSERT_TRUE(e_book_get_contacts(book, query, &contacts, &error), err); ASSERT_ZERO(error, err); for (loop = contacts; loop; loop = g_list_next(loop)) { EContact *c = loop->data; char *name = 0; name = e_contact_get(c, E_CONTACT_OSSO_CONTACT_STATE); if (!name || strcmp(name, "DELETED")) { char **arrs = 0; ASSERT_TRUE(ct = ident_contact_new(), cerr); ASSERT_TRUE(ct->name = e_contact_get(c, E_CONTACT_FULL_NAME), cerr); ASSERT_TRUE(arrs = e_contact_get(c, E_CONTACT_SIP), cerr); ASSERT_TRUE(ct->sip_aor = addrbook_normalize_aor(arrs[0]), cerr); /* apparently arrs doesn't need to be free'd afterwards */ g_list_foreach((GList*)arrs, (GFunc)g_free, NULL); ship_list_add(list, ct); ct = 0; cerr: ident_contact_free(ct); } if (name) g_free(name); } ret = 0; err: if (contacts) { g_list_free(contacts); } if (query) { e_book_query_unref(query); } if (error) { LOG_ERROR("Error getting contacts: %s\n", error->message); g_error_free(error); } ship_unlock(addrbook_lock); return ret; }
static EContact * gevo_run_query_in_uri(const gchar *uri, EBookQuery *query) { EBook *book; gboolean status; GList *cards; GError *err = NULL; if (!gevo_load_addressbook(uri, &book, &err)) { purple_debug_error("evolution", "Error retrieving addressbook: %s\n", err->message); g_error_free(err); return NULL; } status = e_book_get_contacts(book, query, &cards, NULL); if (!status) { purple_debug_error("evolution", "Error %d in getting card list\n", status); g_object_unref(book); return NULL; } g_object_unref(book); if (cards != NULL) { EContact *contact = E_CONTACT(cards->data); GList *cards2 = cards->next; if (cards2 != NULL) { /* Break off the first contact and free the rest. */ cards->next = NULL; cards2->prev = NULL; g_list_foreach(cards2, (GFunc)g_object_unref, NULL); } /* Free the whole list. */ g_list_free(cards); return contact; } return NULL; }
static void populate_treeview(GevoAddBuddyDialog *dialog, const gchar *uri) { EBookQuery *query; EBook *book; gboolean status; GList *cards, *c; GError *err = NULL; if (dialog->book != NULL) { g_object_unref(dialog->book); dialog->book = NULL; } if (dialog->contacts != NULL) { g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); g_list_free(dialog->contacts); dialog->contacts = NULL; } gtk_list_store_clear(dialog->model); if (!gevo_load_addressbook(uri, &book, &err)) { purple_debug_error("evolution", "Error retrieving default addressbook: %s\n", err->message); g_error_free(err); return; } query = e_book_query_field_exists(E_CONTACT_FULL_NAME); if (query == NULL) { purple_debug_error("evolution", "Error in creating query\n"); g_object_unref(book); return; } status = e_book_get_contacts(book, query, &cards, NULL); e_book_query_unref(query); if (!status) { purple_debug_error("evolution", "Error %d in getting card list\n", status); g_object_unref(book); return; } for (c = cards; c != NULL; c = c->next) { EContact *contact = E_CONTACT(c->data); const char *name; GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells; name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); aims = e_contact_get(contact, E_CONTACT_IM_AIM); jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER); yahoos = e_contact_get(contact, E_CONTACT_IM_YAHOO); msns = e_contact_get(contact, E_CONTACT_IM_MSN); icqs = e_contact_get(contact, E_CONTACT_IM_ICQ); novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE); if (aims == NULL && jabbers == NULL && yahoos == NULL && msns == NULL && icqs == NULL && novells == NULL) { GtkTreeIter iter; gtk_list_store_append(dialog->model, &iter); gtk_list_store_set(dialog->model, &iter, COLUMN_NAME, name, COLUMN_DATA, contact, -1); } else { add_ims(dialog, contact, name, aims, "prpl-aim"); add_ims(dialog, contact, name, jabbers, "prpl-jabber"); add_ims(dialog, contact, name, yahoos, "prpl-yahoo"); add_ims(dialog, contact, name, msns, "prpl-msn"); add_ims(dialog, contact, name, icqs, "prpl-icq"); add_ims(dialog, contact, name, novells, "prpl-novell"); } } dialog->contacts = cards; dialog->book = book; }
/* Pilot syncing callbacks */ static gint pre_sync (GnomePilotConduit *conduit, GnomePilotDBInfo *dbi, EAddrConduitContext *ctxt) { GnomePilotConduitSyncAbs *abs_conduit; EBookQuery *query; GList *l; int len; char *filename; char *change_id; char *auth; gint num_records, add_records = 0, mod_records = 0, del_records = 0; #ifdef PILOT_LINK_0_12 pi_buffer_t *buffer; #else unsigned char *buf; #endif abs_conduit = GNOME_PILOT_CONDUIT_SYNC_ABS (conduit); LOG (g_message ( "---------------------------------------------------------\n" )); LOG (g_message ( "pre_sync: Addressbook Conduit v.%s", CONDUIT_VERSION )); /* g_message ("Addressbook Conduit v.%s", CONDUIT_VERSION); */ ctxt->dbi = dbi; if (ctxt->cfg->source) { ctxt->ebook = e_book_new (ctxt->cfg->source, NULL); } else { ctxt->ebook = e_book_new_default_addressbook (NULL); } auth = (gchar *)e_source_get_property (ctxt->cfg->source, "auth"); if (auth) { LOG (g_message ("contacts needs authentication\n")); g_signal_connect (ctxt->ebook, "auth_required", G_CALLBACK (addressbook_authenticate), ctxt->cfg->source); } if (!ctxt->ebook || !e_book_open (ctxt->ebook, TRUE, NULL)) { WARN(_("Could not load addressbook")); gnome_pilot_conduit_error (conduit, _("Could not load addressbook")); return -1; } /* Load the uid <--> pilot id mappings */ filename = map_name (ctxt); e_pilot_map_read (filename, &ctxt->map); g_free (filename); /* Get a list of all contacts */ if (!(query = e_book_query_any_field_contains (""))) { LOG (g_warning ("Failed to get EBookQuery")); return -1; } if (!e_book_get_contacts (ctxt->ebook, query, &ctxt->cards, NULL)) { LOG (g_warning ("Failed to get Contacts")); e_book_query_unref (query); return -1; } e_book_query_unref (query); /* Count and hash the changes */ change_id = g_strdup_printf ("pilot-sync-evolution-addressbook-%d", ctxt->cfg->pilot_id); if (!e_book_get_changes (ctxt->ebook, change_id, &ctxt->changed, NULL)) return -1; ctxt->changed_hash = g_hash_table_new (g_str_hash, g_str_equal); g_free (change_id); for (l = ctxt->changed; l != NULL; l = l->next) { EBookChange *ebc = l->data; const char *uid; uid = e_contact_get_const (ebc->contact, E_CONTACT_UID); if (!e_pilot_map_uid_is_archived (ctxt->map, uid)) { g_hash_table_insert (ctxt->changed_hash, g_strdup (uid), ebc); switch (ebc->change_type) { case E_BOOK_CHANGE_CARD_ADDED: add_records++; break; case E_BOOK_CHANGE_CARD_MODIFIED: mod_records++; break; case E_BOOK_CHANGE_CARD_DELETED: del_records++; break; } } else if (ebc->change_type == E_BOOK_CHANGE_CARD_DELETED) { e_pilot_map_remove_by_uid (ctxt->map, uid); } } /* Set the count information */ num_records = g_list_length (ctxt->cards); gnome_pilot_conduit_sync_abs_set_num_local_records(abs_conduit, num_records); gnome_pilot_conduit_sync_abs_set_num_new_local_records (abs_conduit, add_records); gnome_pilot_conduit_sync_abs_set_num_updated_local_records (abs_conduit, mod_records); gnome_pilot_conduit_sync_abs_set_num_deleted_local_records(abs_conduit, del_records); #ifdef PILOT_LINK_0_12 buffer = pi_buffer_new(DLP_BUF_SIZE); if(buffer == NULL){ return pi_set_error(dbi->pilot_socket, PI_ERR_GENERIC_MEMORY); } len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0, DLP_BUF_SIZE, buffer); #else buf = (unsigned char*)g_malloc (0xffff); len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0, (unsigned char *)buf, 0xffff); #endif if (len < 0) { WARN (_("Could not read pilot's Address application block")); WARN ("dlp_ReadAppBlock(...) = %d", len); gnome_pilot_conduit_error (conduit, _("Could not read pilot's Address application block")); return -1; } #ifdef PILOT_LINK_0_12 unpack_AddressAppInfo (&(ctxt->ai), buffer->data, len); pi_buffer_free (buffer); #else unpack_AddressAppInfo (&(ctxt->ai), buf, len); g_free (buf); #endif check_for_slow_setting (conduit, ctxt); if (ctxt->cfg->sync_type == GnomePilotConduitSyncTypeCopyToPilot || ctxt->cfg->sync_type == GnomePilotConduitSyncTypeCopyFromPilot) ctxt->map->write_touched_only = TRUE; return 0; }
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"); }