static void e_book_backend_webdav_get_contact_list (EBookBackend *backend, EDataBook *book, guint32 opid, GCancellable *cancellable, const gchar *query) { EBookBackendWebdav *webdav = E_BOOK_BACKEND_WEBDAV (backend); EBookBackendWebdavPrivate *priv = webdav->priv; GList *contact_list; GSList *vcard_list; GList *c; if (e_backend_get_online (E_BACKEND (backend))) { /* make sure the cache is up to date */ GError *error = download_contacts (webdav, NULL, NULL, cancellable); if (error) { e_data_book_respond_get_contact_list (book, opid, error, NULL); return; } } /* answer query from cache */ g_mutex_lock (&priv->cache_lock); contact_list = e_book_backend_cache_get_contacts (priv->cache, query); g_mutex_unlock (&priv->cache_lock); vcard_list = NULL; for (c = contact_list; c != NULL; c = g_list_next (c)) { EContact *contact = c->data; gchar *vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30); vcard_list = g_slist_append (vcard_list, vcard); g_object_unref (contact); } g_list_free (contact_list); e_data_book_respond_get_contact_list (book, opid, EDB_ERROR (SUCCESS), vcard_list); g_slist_foreach (vcard_list, (GFunc) g_free, NULL); g_slist_free (vcard_list); }
static void _e_book_backend_get_contact_list (EBookBackend *backend, EDataBook *book, guint32 opid, const gchar *query) { GError *error = NULL; GList *cards = NULL; e_book_backend_sync_get_contact_list (E_BOOK_BACKEND_SYNC (backend), book, opid, query, &cards, &error); e_data_book_respond_get_contact_list (book, opid, error, cards); }