[evolution-data-server/account-mgmt: 6/26] Adapt libebook to the new ESource API.



commit 7fca026a4c75d35adceaddf9dcfd8a771ce968a3
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Nov 12 15:46:18 2010 -0500

    Adapt libebook to the new ESource API.

 addressbook/libebook/e-book.c                      |  468 ++------------------
 addressbook/libebook/e-book.h                      |   16 -
 addressbook/libebook/e-destination.c               |    7 +-
 addressbook/tests/ebook/ebook-test-utils.c         |  156 +++----
 addressbook/tests/ebook/ebook-test-utils.h         |    7 -
 addressbook/tests/ebook/test-changes.c             |    1 -
 addressbook/tests/ebook/test-ebook-add-contact.c   |    3 -
 .../tests/ebook/test-ebook-commit-contact.c        |    3 -
 addressbook/tests/ebook/test-ebook-get-book-view.c |    2 -
 addressbook/tests/ebook/test-ebook-get-contact.c   |    2 -
 .../tests/ebook/test-ebook-get-required-fields.c   |    2 -
 .../ebook/test-ebook-get-static-capabilities.c     |    2 -
 .../ebook/test-ebook-get-supported-auth-methods.c  |    2 -
 .../tests/ebook/test-ebook-get-supported-fields.c  |    2 -
 .../tests/ebook/test-ebook-remove-contact-by-id.c  |    1 -
 .../tests/ebook/test-ebook-remove-contact.c        |    2 -
 .../tests/ebook/test-ebook-remove-contacts.c       |    2 -
 addressbook/tests/ebook/test-ebook-remove.c        |    1 -
 .../tests/ebook/test-ebook-stress-factory--fifo.c  |    4 -
 .../ebook/test-ebook-stress-factory--serial.c      |    1 -
 .../ebook/test-ebook-stress-factory--single-book.c |    3 -
 addressbook/tests/ebook/test-nonexistent-id.c      |    1 +
 .../addressbook/libebook/libebook-sections.txt     |    6 -
 .../addressbook/libebook/tmpl/e-book.sgml          |   51 ---
 .../addressbook/libebook/tmpl/libebook-unused.sgml |   46 ++
 25 files changed, 156 insertions(+), 635 deletions(-)
---
diff --git a/addressbook/libebook/e-book.c b/addressbook/libebook/e-book.c
index fb3adb6..4b76fe2 100644
--- a/addressbook/libebook/e-book.c
+++ b/addressbook/libebook/e-book.c
@@ -35,6 +35,8 @@
 #include <string.h>
 #include <glib-object.h>
 #include <glib/gi18n-lib.h>
+#include <gconf/gconf-client.h>
+#include <libedataserver/e-source-registry.h>
 #include <libedataserver/e-data-server-util.h>
 #include "e-book.h"
 #include "e-error.h"
@@ -73,7 +75,6 @@ struct _EBookPrivate {
 	guint gone_signal_id;
 
 	ESource *source;
-	gchar *uri;
 	gboolean loaded;
 	gboolean writable;
 	gboolean connected;
@@ -186,9 +187,6 @@ e_book_finalize (GObject *object)
 {
 	EBook *book = E_BOOK (object);
 
-	if (book->priv->uri)
-		g_free (book->priv->uri);
-
 	if (book->priv->cap)
 		g_free (book->priv->cap);
 
@@ -263,7 +261,6 @@ e_book_init (EBook *book)
 
 	priv->gdbus_book = NULL;
 	priv->source = NULL;
-	priv->uri = NULL;
 	priv->loaded = FALSE;
 	priv->writable = FALSE;
 	priv->connected = FALSE;
@@ -2592,142 +2589,6 @@ e_book_open_async (EBook              *book,
 }
 
 /**
- * e_book_remove:
- * @book: an #EBook
- * @error: a #GError to set on failure
- *
- * Removes the backing data for this #EBook. For example, with the file backend this
- * deletes the database file. You cannot get it back!
- *
- * Returns: %TRUE on success, %FALSE on failure.
- */
-gboolean
-e_book_remove (EBook   *book,
-	       GError **error)
-{
-	GError *err = NULL;
-
-	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
-
-	e_gdbus_book_call_remove_sync (book->priv->gdbus_book, NULL, &err);
-
-	return unwrap_gerror (err, error);
-}
-
-static void
-remove_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
-{
-	GError *err = NULL, *error = NULL;
-	AsyncData *data = user_data;
-	EBookAsyncCallback excb = data->excallback;
-	#ifndef E_BOOK_DISABLE_DEPRECATED
-	EBookCallback cb = data->callback;
-	#endif
-
-	e_gdbus_book_call_remove_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
-
-	unwrap_gerror (error, &err);
-
-	#ifndef E_BOOK_DISABLE_DEPRECATED
-	if (cb)
-		cb (data->book, err ? err->code : E_BOOK_ERROR_OK, data->closure);
-	#endif
-	if (excb)
-		excb (data->book, err, data->closure);
-
-	if (err)
-		g_error_free (err);
-
-	g_object_unref (data->book);
-	g_slice_free (AsyncData, data);
-}
-
-#ifndef E_BOOK_DISABLE_DEPRECATED
-/**
- * e_book_async_remove:
- * @book: an #EBook
- * @cb: a function to call when the operation finishes
- * @closure: data to pass to callback function
- *
- * Remove the backing data for this #EBook. For example, with the file backend this
- * deletes the database file. You cannot get it back!
- *
- * Returns: %FALSE if successful, %TRUE otherwise.
- *
- * Deprecated: 3.0: Use e_book_remove_async() instead.
- **/
-guint
-e_book_async_remove (EBook   *book,
-		     EBookCallback cb,
-		     gpointer closure)
-{
-	AsyncData *data;
-
-	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
-
-	data = g_slice_new0 (AsyncData);
-	data->book = g_object_ref (book);
-	data->callback = cb;
-	data->closure = closure;
-
-	e_gdbus_book_call_remove (book->priv->gdbus_book, NULL, remove_reply, data);
-
-	return 0;
-}
-#endif
-
-/**
- * e_book_remove_async:
- * @book: an #EBook
- * @cb: a function to call when the operation finishes
- * @closure: data to pass to callback function
- *
- * Remove the backing data for this #EBook. For example, with the file backend this
- * deletes the database file. You cannot get it back!
- *
- * Returns: %FALSE if successful, %TRUE otherwise.
- *
- * Since: 2.32
- **/
-gboolean
-e_book_remove_async (EBook              *book,
-		     EBookAsyncCallback  cb,
-		     gpointer            closure)
-{
-	AsyncData *data;
-
-	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
-
-	data = g_slice_new0 (AsyncData);
-	data->book = g_object_ref (book);
-	data->excallback = cb;
-	data->closure = closure;
-
-	e_gdbus_book_call_remove (book->priv->gdbus_book, NULL, remove_reply, data);
-
-	return TRUE;
-}
-
-/**
- * e_book_get_uri:
- * @book: an #EBook
- *
- * Get the URI that this book has loaded. This string should not be freed.
- *
- * Returns: The URI.
- */
-const gchar *
-e_book_get_uri (EBook *book)
-{
-	g_return_val_if_fail (E_IS_BOOK (book), NULL);
-
-	return book->priv->uri;
-}
-
-/**
  * e_book_get_source:
  * @book: an #EBook
  *
@@ -3036,110 +2897,48 @@ e_book_set_default_addressbook (EBook *book, GError **error)
 
 /**
  * e_book_set_default_source:
- * @source: An #ESource pointer
- * @error: A #GError pointer
+ * @source: an #ESource
+ * @error: return location for a #GError, or %NULL
  *
- * sets @source as the "default" addressbook.  This is the source that
- * will be loaded in the e_book_get_default_addressbook call.
+ * Sets @source as the default address book.
  *
- * Returns: %TRUE if the setting was stored in libebook's ESourceList, otherwise %FALSE.
- */
-gboolean
-e_book_set_default_source (ESource *source, GError **error)
-{
-	ESourceList *sources;
-	const gchar *uid;
-	GError *err = NULL;
-	GSList *g;
-
-	e_return_error_if_fail (source && E_IS_SOURCE (source), E_BOOK_ERROR_INVALID_ARG);
-
-	uid = e_source_peek_uid (source);
-
-	if (!e_book_get_addressbooks (&sources, &err)) {
-		if (error)
-			g_propagate_error (error, err);
-		return FALSE;
-	}
-
-	/* make sure the source is actually in the ESourceList.  if
-	   it's not we don't bother adding it, just return an error */
-	source = e_source_list_peek_source_by_uid (sources, uid);
-	if (!source) {
-		g_set_error (error, E_BOOK_ERROR, E_BOOK_ERROR_NO_SUCH_SOURCE,
-			     _("%s: there was no source for UID '%s' stored in GConf."), "e_book_set_default_source", uid);
-		g_object_unref (sources);
-		return FALSE;
-	}
-
-	/* loop over all the sources clearing out any "default"
-	   properties we find */
-	for (g = e_source_list_peek_groups (sources); g; g = g->next) {
-		GSList *s;
-		for (s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data));
-		     s; s = s->next) {
-			e_source_set_property (E_SOURCE (s->data), "default", NULL);
-		}
-	}
-
-	/* set the "default" property on the source */
-	e_source_set_property (source, "default", "true");
-
-	if (!e_source_list_sync (sources, &err)) {
-		if (error)
-			g_propagate_error (error, err);
-
-		g_object_unref (sources);
-
-		return FALSE;
-	}
-
-	g_object_unref (sources);
-
-	return TRUE;
-}
-
-/**
- * e_book_get_addressbooks:
- * @addressbook_sources: A pointer to a ESourceList* to set
- * @error: A pointer to a GError* to set on error
- *
- * Populate *addressbook_sources with the list of all sources which have been
- * added to Evolution.
+ * The @error parameter is only for backward-compatibility.
+ * This function never fails, so you can safely pass %NULL.
  *
- * Returns: %TRUE if @addressbook_sources was set, otherwise %FALSE.
+ * Returns: %TRUE always
  */
 gboolean
-e_book_get_addressbooks (ESourceList **addressbook_sources, GError **error)
+e_book_set_default_source (ESource *source,
+                           GError **error)
 {
-	GConfClient *gconf;
+	ESourceRegistry *registry;
 
-	e_return_error_if_fail (addressbook_sources, E_BOOK_ERROR_INVALID_ARG);
+	g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
-	gconf = gconf_client_get_default ();
-	*addressbook_sources = e_source_list_new_for_gconf (gconf, "/apps/evolution/addressbook/sources");
-	g_object_unref (gconf);
+	registry = e_source_registry_get_default ();
+	e_source_registry_set_default_address_book (registry, source);
 
 	return TRUE;
 }
 
 /**
  * e_book_new:
- * @source: An #ESource pointer
- * @error: A #GError pointer
+ * @source: an #ESource
+ * @error: return location for a #GError, or %NULL
  *
- * Creates a new #EBook corresponding to the given source.  There are
- * only two operations that are valid on this book at this point:
- * e_book_open(), and e_book_remove().
+ * Creates a new #EBook corresponding to the given @source.
+ * You must call e_book_open() before the #EBook can be used.
  *
  * Returns: a new but unopened #EBook.
  */
 EBook*
-e_book_new (ESource *source, GError **error)
+e_book_new (ESource *source,
+            GError **error)
 {
 	GError *err = NULL;
 	EBook *book;
-	gchar *path = NULL, *xml, *gdbus_xml = NULL;
+	gchar *path;
+	const gchar *uid;
 	GDBusConnection *connection;
 
 	e_return_error_if_fail (E_IS_SOURCE (source), E_BOOK_ERROR_INVALID_ARG);
@@ -3155,14 +2954,12 @@ e_book_new (ESource *source, GError **error)
 	book = g_object_new (E_TYPE_BOOK, NULL);
 
 	book->priv->source = g_object_ref (source);
-	book->priv->uri = e_source_get_uri (source);
 
-	xml = e_source_to_standalone_xml (source);
+	uid = e_source_get_uid (source);
 
-	if (!e_gdbus_book_factory_call_get_book_sync (book_factory_proxy, e_util_ensure_gdbus_string (xml, &gdbus_xml), &path, NULL, &err)) {
+	if (!e_gdbus_book_factory_call_get_book_sync (
+		book_factory_proxy, uid, &path, NULL, &err)) {
 		unwrap_gerror (err, &err);
-		g_free (xml);
-		g_free (gdbus_xml);
 		g_warning (G_STRLOC ": cannot get book from factory: %s", err ? err->message : "[no error]");
 		if (err)
 			g_propagate_error (error, err);
@@ -3170,8 +2967,6 @@ e_book_new (ESource *source, GError **error)
 
 		return NULL;
 	}
-	g_free (xml);
-	g_free (gdbus_xml);
 
 	book->priv->gdbus_book = e_gdbus_book_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (book_factory_proxy)),
 						      G_DBUS_PROXY_FLAGS_NONE,
@@ -3210,229 +3005,54 @@ e_book_new (ESource *source, GError **error)
 	return book;
 }
 
-/* for each known source calls check_func, which should return TRUE if the required
-   source have been found. Function returns NULL or the source on which was returned
-   TRUE by the check_func. Non-NULL pointer should be unreffed by g_object_unref. */
-static ESource *
-search_known_sources (gboolean (*check_func)(ESource *source, gpointer user_data), gpointer user_data, ESourceList **sources, GError **error)
-{
-	ESource *res = NULL;
-	GSList *g;
-	GError *err = NULL;
-
-	g_return_val_if_fail (check_func != NULL, NULL);
-	g_return_val_if_fail (sources != NULL, NULL);
-
-	if (!e_book_get_addressbooks (sources, &err)) {
-		g_propagate_error (error, err);
-		return NULL;
-	}
-
-	for (g = e_source_list_peek_groups (*sources); g; g = g->next) {
-		ESourceGroup *group = E_SOURCE_GROUP (g->data);
-		GSList *s;
-
-		for (s = e_source_group_peek_sources (group); s; s = s->next) {
-			ESource *source = E_SOURCE (s->data);
-
-			if (check_func (source, user_data)) {
-				res = g_object_ref (source);
-				break;
-			}
-		}
-
-		if (res)
-			break;
-	}
-
-	return res;
-}
-
-static gboolean
-check_uri (ESource *source, gpointer uri)
-{
-	const gchar *suri;
-
-	g_return_val_if_fail (source != NULL, FALSE);
-	g_return_val_if_fail (uri != NULL, FALSE);
-
-	suri = e_source_peek_absolute_uri (source);
-
-	if (suri && g_ascii_strcasecmp (suri, uri) == 0)
-		return TRUE;
-
-	if (!suri && e_source_peek_group (source)) {
-		gboolean res = FALSE;
-		gchar *my_uri = g_strconcat (
-			e_source_group_peek_base_uri (e_source_peek_group (source)),
-			e_source_peek_relative_uri (source),
-			NULL);
-
-		res = my_uri && g_ascii_strcasecmp (my_uri, uri) == 0;
-
-		g_free (my_uri);
-
-		return res;
-	}
-
-	return FALSE;
-}
-
-/**
- * e_book_new_from_uri:
- * @uri: the URI to load
- * @error: A #GError pointer
- *
- * Creates a new #EBook corresponding to the given uri.  See the
- * documentation for e_book_new for further information.
- *
- * Returns: a new but unopened #EBook.
- */
-EBook*
-e_book_new_from_uri (const gchar *uri, GError **error)
-{
-	ESourceList *sources = NULL;
-	ESource *source;
-	EBook *book;
-	GError *err = NULL;
-
-	e_return_error_if_fail (uri, E_BOOK_ERROR_INVALID_ARG);
-
-	source = search_known_sources (check_uri, (gpointer) uri, &sources, &err);
-	if (err) {
-		g_propagate_error (error, err);
-		if (sources)
-			g_object_unref (sources);
-		return NULL;
-	}
-
-	if (!source)
-		source = e_source_new_with_absolute_uri ("", uri);
-
-	book = e_book_new (source, &err);
-	if (err)
-		g_propagate_error (error, err);
-
-	g_object_unref (source);
-	if (sources)
-		g_object_unref (sources);
-
-	return book;
-}
-
-struct check_system_data
-{
-	const gchar *uri;
-	ESource *uri_source;
-};
-
-static gboolean
-check_system (ESource *source, gpointer data)
-{
-	struct check_system_data *csd = data;
-
-	g_return_val_if_fail (source != NULL, FALSE);
-	g_return_val_if_fail (data != NULL, FALSE);
-
-	if (e_source_get_property (source, "system")) {
-		return TRUE;
-	}
-
-	if (check_uri (source, (gpointer) csd->uri)) {
-		if (csd->uri_source)
-			g_object_unref (csd->uri_source);
-		csd->uri_source = g_object_ref (source);
-	}
-
-	return FALSE;
-}
-
 /**
  * e_book_new_system_addressbook:
  * @error: A #GError pointer
  *
- * Creates a new #EBook corresponding to the user's system
- * addressbook.  See the documentation for e_book_new for further
- * information.
+ * Creates a new #EBook corresponding to the user's system address book.
+ * See the documentation for e_book_new() for further information.
  *
  * Returns: a new but unopened #EBook.
  */
-EBook*
+EBook *
 e_book_new_system_addressbook (GError **error)
 {
-	GError *err = NULL;
-	ESourceList *sources = NULL;
-	ESource *system_source = NULL;
-	EBook *book;
-	struct check_system_data csd;
+	ESourceRegistry *registry;
+	ESource *source;
 
-	csd.uri = "local:system";
-	csd.uri_source = NULL;
+	registry = e_source_registry_get_default ();
+	source = e_source_registry_lookup_by_uid (registry, "system");
 
-	system_source = search_known_sources (check_system, &csd, &sources, &err);
-	if (err) {
-		g_propagate_error (error, err);
-		if (sources)
-			g_object_unref (sources);
+	if (!E_IS_SOURCE (source)) {
+		g_set_error_literal (
+			error, E_BOOK_ERROR,
+			E_BOOK_ERROR_NO_SUCH_BOOK,
+			_("No system source found"));
 		return NULL;
 	}
 
-	if (!system_source) {
-		system_source = csd.uri_source;
-		csd.uri_source = NULL;
-	}
-
-	if (system_source) {
-		book = e_book_new (system_source, &err);
-		g_object_unref (system_source);
-	} else {
-		book = e_book_new_from_uri (csd.uri, &err);
-	}
-
-	if (csd.uri_source)
-		g_object_unref (csd.uri_source);
-	if (sources)
-		g_object_unref (sources);
-
-	if (err)
-		g_propagate_error (error, err);
-
-	return book;
+	return e_book_new (source, error);
 }
 
 /**
  * e_book_new_default_addressbook:
  * @error: return location for a #GError, or %NULL
  *
- * Creates a new #EBook corresponding to the user's default
- * address book.  See the documentation for e_book_new() for
- * further information.
+ * Creates a new #EBook corresponding to the user's default address book.
+ * See the documentation for e_book_new() for further information.
  *
  * Returns: a new but unopened #EBook
  */
 EBook *
 e_book_new_default_addressbook (GError **error)
 {
-	ESourceList *source_list;
+	ESourceRegistry *registry;
 	ESource *source;
-	EBook *book;
 
-	if (!e_book_get_addressbooks (&source_list, error))
-		return NULL;
-
-	source = e_source_list_peek_default_source (source_list);
-	if (!source) {
-		g_set_error_literal (error, E_BOOK_ERROR, E_BOOK_ERROR_NO_SUCH_BOOK,
-			     _("Address book does not exist"));
-		g_object_unref (source_list);
-		return NULL;
-	}
+	registry = e_source_registry_get_default ();
+	source = e_source_registry_get_default_address_book (registry);
 
-	book = e_book_new (source, error);
-
-	g_object_unref (source_list);
-
-	return book;
+	return e_book_new (source, error);
 }
 
 /**
diff --git a/addressbook/libebook/e-book.h b/addressbook/libebook/e-book.h
index 46e4971..3ba083c 100644
--- a/addressbook/libebook/e-book.h
+++ b/addressbook/libebook/e-book.h
@@ -16,7 +16,6 @@
 
 #include "libedataserver/e-list.h"
 #include "libedataserver/e-source.h"
-#include "libedataserver/e-source-list.h"
 #include <libebook/e-contact.h>
 #include <libebook/e-book-query.h>
 #include <libebook/e-book-view.h>
@@ -125,7 +124,6 @@ struct _EBookClass {
 
 /* Creating a new addressbook. */
 EBook    *e_book_new                       (ESource *source, GError **error);
-EBook    *e_book_new_from_uri              (const gchar *uri, GError **error);
 EBook    *e_book_new_system_addressbook    (GError **error);
 EBook    *e_book_new_default_addressbook   (GError **error);
 
@@ -146,18 +144,6 @@ gboolean e_book_open_async                 (EBook              *book,
 					    EBookAsyncCallback  open_response,
 					    gpointer            closure);
 
-gboolean e_book_remove                     (EBook       *book,
-					    GError     **error);
-#ifndef E_BOOK_DISABLE_DEPRECATED
-guint    e_book_async_remove               (EBook   *book,
-					    EBookCallback cb,
-					    gpointer closure);
-#endif
-
-gboolean e_book_remove_async               (EBook             *book,
-					    EBookAsyncCallback cb,
-					    gpointer           closure);
-
 gboolean e_book_get_required_fields       (EBook       *book,
 					    GList      **fields,
 					    GError     **error);
@@ -378,7 +364,6 @@ gboolean e_book_get_changes_async       (EBook                 *book,
 
 void     e_book_free_change_list           (GList       *change_list);
 
-const gchar *e_book_get_uri                 (EBook       *book);
 ESource    *e_book_get_source              (EBook       *book);
 
 const gchar *e_book_get_static_capabilities (EBook    *book,
@@ -405,7 +390,6 @@ gboolean    e_book_is_self                 (EContact *contact);
 /* Addressbook Discovery */
 gboolean    e_book_set_default_addressbook (EBook  *book, GError **error);
 gboolean    e_book_set_default_source      (ESource *source, GError **error);
-gboolean    e_book_get_addressbooks        (ESourceList** addressbook_sources, GError **error);
 
 GType        e_book_get_type                  (void);
 
diff --git a/addressbook/libebook/e-destination.c b/addressbook/libebook/e-destination.c
index 06190c1..e351772 100644
--- a/addressbook/libebook/e-destination.c
+++ b/addressbook/libebook/e-destination.c
@@ -456,15 +456,18 @@ void
 e_destination_set_book (EDestination *dest, EBook *book)
 {
 	ESource *source;
+	const gchar *uid;
 
 	g_return_if_fail (dest && E_IS_DESTINATION (dest));
 	g_return_if_fail (book && E_IS_BOOK (book));
 
 	source = e_book_get_source (book);
+	uid = e_source_get_uid (source);
+	g_return_if_fail (uid != NULL);
 
-	if (!dest->priv->source_uid || strcmp (e_source_peek_uid (source), dest->priv->source_uid)) {
+	if (!dest->priv->source_uid || strcmp (uid, dest->priv->source_uid)) {
 		e_destination_clear (dest);
-		dest->priv->source_uid = g_strdup (e_source_peek_uid (source));
+		dest->priv->source_uid = g_strdup (uid);
 
 		g_signal_emit (dest, signals[CHANGED], 0);
 	}
diff --git a/addressbook/tests/ebook/ebook-test-utils.c b/addressbook/tests/ebook/ebook-test-utils.c
index 2566912..de29835 100644
--- a/addressbook/tests/ebook/ebook-test-utils.c
+++ b/addressbook/tests/ebook/ebook-test-utils.c
@@ -118,11 +118,13 @@ ebook_test_utils_book_add_contact (EBook    *book,
         GError *error = NULL;
 
         if (!e_book_add_contact (book, contact, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to add contact to addressbook: `%s': %s",
-                                uri, error->message);
+                                name, error->message);
                 exit (1);
         }
 
@@ -174,13 +176,16 @@ ebook_test_utils_book_commit_contact (EBook    *book,
         GError *error = NULL;
 
         if (!e_book_commit_contact (book, contact, &error)) {
+                ESource *source;
+                const gchar *name;
                 const gchar *uid;
-                const gchar *uri;
 
                 uid = (const gchar *) e_contact_get_const (contact, E_CONTACT_UID);
-                uri = e_book_get_uri (book);
+
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to commit changes to contact '%s' to addressbook: `%s': %s",
-                                uid, uri, error->message);
+                                uid, name, error->message);
                 exit (1);
         }
 }
@@ -230,11 +235,13 @@ ebook_test_utils_book_get_contact (EBook      *book,
         GError *error = NULL;
 
         if (!e_book_get_contact (book, uid, &contact, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to get contact '%s' in addressbook: `%s': "
-                                "%s", uid, uri, error->message);
+                                "%s", uid, name, error->message);
                 exit (1);
         }
 
@@ -291,11 +298,13 @@ ebook_test_utils_book_get_required_fields (EBook *book)
         GError *error = NULL;
 
         if (!e_book_get_required_fields (book, &fields, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to get required fields for addressbook "
-                                "`%s': %s", uri, error->message);
+                                "`%s': %s", name, error->message);
                 exit (1);
         }
 
@@ -349,11 +358,13 @@ ebook_test_utils_book_get_static_capabilities (EBook *book)
         const gchar *caps;
 
         if (!(caps = e_book_get_static_capabilities (book, &error))) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to get capabilities for addressbook: `%s': "
-                                "%s", uri, error->message);
+                                "%s", name, error->message);
                 exit (1);
         }
 
@@ -367,11 +378,13 @@ ebook_test_utils_book_get_supported_auth_methods (EBook *book)
         GError *error = NULL;
 
         if (!e_book_get_supported_auth_methods (book, &fields, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to get supported auth methods for "
-                                "addressbook `%s': %s", uri, error->message);
+                                "addressbook `%s': %s", name, error->message);
                 exit (1);
         }
 
@@ -426,11 +439,13 @@ ebook_test_utils_book_get_supported_fields (EBook *book)
         GError *error = NULL;
 
         if (!e_book_get_supported_fields (book, &fields, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to get supported fields for addressbook "
-                                "`%s': %s", uri, error->message);
+                                "`%s': %s", name, error->message);
                 exit (1);
         }
 
@@ -484,11 +499,13 @@ ebook_test_utils_book_remove_contact (EBook      *book,
         GError *error = NULL;
 
         if (!e_book_remove_contact (book, uid, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to remove contact '%s' from addressbook: `%s': %s",
-                                uid, uri, error->message);
+                                uid, name, error->message);
                 exit (1);
         }
 }
@@ -576,11 +593,13 @@ ebook_test_utils_book_remove_contacts (EBook *book,
         GError *error = NULL;
 
         if (!e_book_remove_contacts (book, ids, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
                 g_warning ("failed to remove contacts from addressbook: `%s': %s",
-                                uri, error->message);
+                                name, error->message);
                 exit (1);
         }
 }
@@ -624,22 +643,6 @@ ebook_test_utils_book_async_remove_contacts (EBook       *book,
 }
 
 EBook*
-ebook_test_utils_book_new_from_uri (const gchar *uri)
-{
-        EBook *book;
-	GError *error = NULL;
-
-	test_print ("loading addressbook\n");
-	book = e_book_new_from_uri (uri, &error);
-	if (!book) {
-                g_error ("failed to create addressbook: `%s': %s", uri,
-                                error->message);
-	}
-
-	return book;
-}
-
-EBook*
 ebook_test_utils_book_new_temp (gchar **uri)
 {
         EBook *book;
@@ -657,7 +660,9 @@ ebook_test_utils_book_new_temp (gchar **uri)
 	}
 	g_free (file_template);
 
-	book = ebook_test_utils_book_new_from_uri (uri_result);
+	/* FIXME We don't build EBooks from URIs anymore. */
+	/* book = ebook_test_utils_book_new_from_uri (uri_result); */
+	book = NULL;
 
         if (uri)
                 *uri = g_strdup (uri_result);
@@ -674,62 +679,19 @@ ebook_test_utils_book_open (EBook    *book,
         GError *error = NULL;
 
         if (!e_book_open (book, only_if_exists, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
 
-                g_warning ("failed to open addressbook: `%s': %s", uri,
+                g_warning ("failed to open addressbook: `%s': %s", name,
                                 error->message);
                 exit (1);
         }
 }
 
 void
-ebook_test_utils_book_remove (EBook *book)
-{
-        GError *error = NULL;
-
-        if (!e_book_remove (book, &error)) {
-                g_warning ("failed to remove book; %s\n", error->message);
-                exit (1);
-        }
-        test_print ("successfully removed the temporary addressbook\n");
-
-        g_object_unref (book);
-}
-
-static void
-remove_cb (EBook *book, const GError *error, EBookTestClosure *closure)
-{
-        if (error) {
-                g_warning ("failed to asynchronously remove the book: "
-                                "status %d (%s)", error->code, error->message);
-                exit (1);
-        }
-
-        test_print ("successfully asynchronously removed the temporary "
-                        "addressbook\n");
-        if (closure)
-                (*closure->cb) (closure);
-}
-
-void
-ebook_test_utils_book_async_remove (EBook       *book,
-                                    GSourceFunc  callback,
-                                    gpointer     user_data)
-{
-        EBookTestClosure *closure;
-
-        closure = g_new0 (EBookTestClosure, 1);
-        closure->cb = callback;
-        closure->user_data = user_data;
-        if (!e_book_remove_async (book, (EBookAsyncCallback) remove_cb, closure)) {
-                g_warning ("failed to set up book removal");
-                exit (1);
-        }
-}
-
-void
 ebook_test_utils_book_get_book_view (EBook       *book,
                                      EBookQuery  *query,
                                      EBookView  **view)
@@ -737,12 +699,14 @@ ebook_test_utils_book_get_book_view (EBook       *book,
         GError *error = NULL;
 
         if (!e_book_get_book_view (book, query, NULL, -1, view, &error)) {
-                const gchar *uri;
+                ESource *source;
+                const gchar *name;
 
-                uri = e_book_get_uri (book);
+                source = e_book_get_source (book);
+                name = e_source_get_display_name (source);
 
-                g_warning ("failed to get view for addressbook: `%s': %s", uri,
-                                error->message);
+                g_warning ("failed to get view for addressbook: `%s': %s",
+                                name, error->message);
                 exit (1);
         }
 }
diff --git a/addressbook/tests/ebook/ebook-test-utils.h b/addressbook/tests/ebook/ebook-test-utils.h
index 789e21d..326eea1 100644
--- a/addressbook/tests/ebook/ebook-test-utils.h
+++ b/addressbook/tests/ebook/ebook-test-utils.h
@@ -139,13 +139,6 @@ ebook_test_utils_book_open (EBook    *book,
                             gboolean  only_if_exists);
 
 void
-ebook_test_utils_book_remove (EBook *book);
-void
-ebook_test_utils_book_async_remove (EBook          *book,
-                                    GSourceFunc     callback,
-                                    gpointer        user_data);
-
-void
 ebook_test_utils_book_get_book_view (EBook       *book,
                                      EBookQuery  *query,
                                      EBookView  **view);
diff --git a/addressbook/tests/ebook/test-changes.c b/addressbook/tests/ebook/test-changes.c
index 1e0dc9e..5a9a786 100644
--- a/addressbook/tests/ebook/test-changes.c
+++ b/addressbook/tests/ebook/test-changes.c
@@ -60,7 +60,6 @@ main (gint argc, gchar **argv)
 	e_book_free_change_list (changes);
 
 	g_object_unref (contact);
-	ebook_test_utils_book_remove (book);
 
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-add-contact.c b/addressbook/tests/ebook/test-ebook-add-contact.c
index 7fb19ab..541e671 100644
--- a/addressbook/tests/ebook/test-ebook-add-contact.c
+++ b/addressbook/tests/ebook/test-ebook-add-contact.c
@@ -31,8 +31,6 @@ main (gint argc, gchar **argv)
 	test_print ("successfully added and retrieved contact '%s'\n", uid);
 	g_object_unref (contact_final);
 
-	ebook_test_utils_book_remove (book);
-
 	/*
 	 * Async version
 	 */
@@ -48,7 +46,6 @@ main (gint argc, gchar **argv)
 	g_free (uid);
 	g_main_loop_run (loop);
 
-	ebook_test_utils_book_remove (book);
 	g_free (vcard);
 
 	return 0;
diff --git a/addressbook/tests/ebook/test-ebook-commit-contact.c b/addressbook/tests/ebook/test-ebook-commit-contact.c
index 4f93fe7..cb01a28 100644
--- a/addressbook/tests/ebook/test-ebook-commit-contact.c
+++ b/addressbook/tests/ebook/test-ebook-commit-contact.c
@@ -73,8 +73,6 @@ main (gint argc, gchar **argv)
 	g_object_unref (contact);
 	g_free (uid);
 
-	ebook_test_utils_book_remove (book);
-
 	/*
 	 * Async version
 	 */
@@ -91,7 +89,6 @@ main (gint argc, gchar **argv)
 	g_main_loop_run (loop);
 
 	g_free (uid);
-	ebook_test_utils_book_remove (book);
 
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-get-book-view.c b/addressbook/tests/ebook/test-ebook-get-book-view.c
index e4a3277..dd54eb1 100644
--- a/addressbook/tests/ebook/test-ebook-get-book-view.c
+++ b/addressbook/tests/ebook/test-ebook-get-book-view.c
@@ -110,7 +110,6 @@ main (gint argc, gchar **argv)
 	g_main_loop_run (loop);
 
         e_book_query_unref (query);
-	ebook_test_utils_book_remove (book);
 
 	/*
 	 * Async version
@@ -125,7 +124,6 @@ main (gint argc, gchar **argv)
 	g_main_loop_run (loop);
 
         e_book_query_unref (query);
-	ebook_test_utils_book_remove (book);
 
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-get-contact.c b/addressbook/tests/ebook/test-ebook-get-contact.c
index 72c5961..3acd85c 100644
--- a/addressbook/tests/ebook/test-ebook-get-contact.c
+++ b/addressbook/tests/ebook/test-ebook-get-contact.c
@@ -38,7 +38,5 @@ main (gint argc, gchar **argv)
 
 	g_main_loop_run (loop);
 
-	ebook_test_utils_book_remove (book);
-
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-get-required-fields.c b/addressbook/tests/ebook/test-ebook-get-required-fields.c
index d6fff7c..6118051 100644
--- a/addressbook/tests/ebook/test-ebook-get-required-fields.c
+++ b/addressbook/tests/ebook/test-ebook-get-required-fields.c
@@ -70,7 +70,5 @@ main (gint argc, gchar **argv)
 
 	g_main_loop_run (loop);
 
-	ebook_test_utils_book_remove (book);
-
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-get-static-capabilities.c b/addressbook/tests/ebook/test-ebook-get-static-capabilities.c
index d225e04..6dab878 100644
--- a/addressbook/tests/ebook/test-ebook-get-static-capabilities.c
+++ b/addressbook/tests/ebook/test-ebook-get-static-capabilities.c
@@ -26,7 +26,5 @@ main (gint argc, gchar **argv)
 
 	test_print ("successfully retrieved static capabilities: '%s'\n", caps);
 
-	ebook_test_utils_book_remove (book);
-
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-get-supported-auth-methods.c b/addressbook/tests/ebook/test-ebook-get-supported-auth-methods.c
index 5f4e6f1..16fd947 100644
--- a/addressbook/tests/ebook/test-ebook-get-supported-auth-methods.c
+++ b/addressbook/tests/ebook/test-ebook-get-supported-auth-methods.c
@@ -70,7 +70,5 @@ main (gint argc, gchar **argv)
 
 	g_main_loop_run (loop);
 
-	ebook_test_utils_book_remove (book);
-
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-get-supported-fields.c b/addressbook/tests/ebook/test-ebook-get-supported-fields.c
index 9df99dc..3c2c5df 100644
--- a/addressbook/tests/ebook/test-ebook-get-supported-fields.c
+++ b/addressbook/tests/ebook/test-ebook-get-supported-fields.c
@@ -70,7 +70,5 @@ main (gint argc, gchar **argv)
 
 	g_main_loop_run (loop);
 
-	ebook_test_utils_book_remove (book);
-
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-remove-contact-by-id.c b/addressbook/tests/ebook/test-ebook-remove-contact-by-id.c
index 004b1a7..12c579f 100644
--- a/addressbook/tests/ebook/test-ebook-remove-contact-by-id.c
+++ b/addressbook/tests/ebook/test-ebook-remove-contact-by-id.c
@@ -27,7 +27,6 @@ main (gint argc, gchar **argv)
 
         g_main_loop_run (loop);
 
-        ebook_test_utils_book_remove (book);
 	g_free (uid);
 
         return 0;
diff --git a/addressbook/tests/ebook/test-ebook-remove-contact.c b/addressbook/tests/ebook/test-ebook-remove-contact.c
index 5767f49..29eb31a 100644
--- a/addressbook/tests/ebook/test-ebook-remove-contact.c
+++ b/addressbook/tests/ebook/test-ebook-remove-contact.c
@@ -31,7 +31,6 @@ main (gint argc, gchar **argv)
         g_assert (contact_final == NULL);
         test_print ("successfully added and removed contact '%s'\n", uid);
 
-        ebook_test_utils_book_remove (book);
         g_free (uid);
 
         /*
@@ -51,7 +50,6 @@ main (gint argc, gchar **argv)
 
         g_main_loop_run (loop);
 
-        ebook_test_utils_book_remove (book);
 	g_object_unref (contact_final);
 	g_free (uid);
 
diff --git a/addressbook/tests/ebook/test-ebook-remove-contacts.c b/addressbook/tests/ebook/test-ebook-remove-contacts.c
index 11f5b2d..1f7983c 100644
--- a/addressbook/tests/ebook/test-ebook-remove-contacts.c
+++ b/addressbook/tests/ebook/test-ebook-remove-contacts.c
@@ -39,7 +39,6 @@ main (gint argc, gchar **argv)
 
         test_print ("successfully added and removed contacts\n");
 
-        ebook_test_utils_book_remove (book);
         g_free (uid_1);
         g_free (uid_2);
 	g_list_free (uids);
@@ -62,7 +61,6 @@ main (gint argc, gchar **argv)
 
         g_main_loop_run (loop);
 
-        ebook_test_utils_book_remove (book);
         g_free (uid_1);
         g_free (uid_2);
 	g_list_free (uids);
diff --git a/addressbook/tests/ebook/test-ebook-remove.c b/addressbook/tests/ebook/test-ebook-remove.c
index c3d4671..ce270db 100644
--- a/addressbook/tests/ebook/test-ebook-remove.c
+++ b/addressbook/tests/ebook/test-ebook-remove.c
@@ -17,7 +17,6 @@ main (gint argc, gchar **argv)
 	/* Sync version */
 	book = ebook_test_utils_book_new_temp (&uri);
 	ebook_test_utils_book_open (book, FALSE);
-	ebook_test_utils_book_remove (book);
 
 	/* Async version */
 	book = ebook_test_utils_book_new_temp (&uri);
diff --git a/addressbook/tests/ebook/test-ebook-stress-factory--fifo.c b/addressbook/tests/ebook/test-ebook-stress-factory--fifo.c
index 6483fdb..d8f1872 100644
--- a/addressbook/tests/ebook/test-ebook-stress-factory--fifo.c
+++ b/addressbook/tests/ebook/test-ebook-stress-factory--fifo.c
@@ -25,9 +25,5 @@ main (gint argc, gchar **argv)
 		g_free (uri);
 	}
 
-	for (i = 0; i < NUM_BOOKS; i++) {
-		ebook_test_utils_book_remove (books[i]);
-	}
-
 	return 0;
 }
diff --git a/addressbook/tests/ebook/test-ebook-stress-factory--serial.c b/addressbook/tests/ebook/test-ebook-stress-factory--serial.c
index 8c19bb7..fafd552 100644
--- a/addressbook/tests/ebook/test-ebook-stress-factory--serial.c
+++ b/addressbook/tests/ebook/test-ebook-stress-factory--serial.c
@@ -20,7 +20,6 @@ main (gint argc, gchar **argv)
 
 		book = ebook_test_utils_book_new_temp (&uri);
 		ebook_test_utils_book_open (book, FALSE);
-		ebook_test_utils_book_remove (book);
 
 		g_free (uri);
 	}
diff --git a/addressbook/tests/ebook/test-ebook-stress-factory--single-book.c b/addressbook/tests/ebook/test-ebook-stress-factory--single-book.c
index 53848b3..69a4a2d 100644
--- a/addressbook/tests/ebook/test-ebook-stress-factory--single-book.c
+++ b/addressbook/tests/ebook/test-ebook-stress-factory--single-book.c
@@ -26,9 +26,6 @@ main (gint argc, gchar **argv)
 		g_object_unref (book);
 	}
 
-	book = ebook_test_utils_book_new_from_uri (uri);
-	ebook_test_utils_book_remove (book);
-
 	g_free (uri);
 
 	return 0;
diff --git a/addressbook/tests/ebook/test-nonexistent-id.c b/addressbook/tests/ebook/test-nonexistent-id.c
index 821fb5c..24fbab4 100644
--- a/addressbook/tests/ebook/test-nonexistent-id.c
+++ b/addressbook/tests/ebook/test-nonexistent-id.c
@@ -1,3 +1,4 @@
+#include <stdlib.h>
 #include <libebook/e-book.h>
 
 gint main (gint argc, gchar **argv)
diff --git a/docs/reference/addressbook/libebook/libebook-sections.txt b/docs/reference/addressbook/libebook/libebook-sections.txt
index 7352302..078e19f 100644
--- a/docs/reference/addressbook/libebook/libebook-sections.txt
+++ b/docs/reference/addressbook/libebook/libebook-sections.txt
@@ -24,11 +24,9 @@ EBookViewPrivate
 EBook
 e_book_new
 e_book_new_default_addressbook
-e_book_new_from_uri
 e_book_new_system_addressbook
 e_book_set_default_addressbook
 e_book_set_default_source
-e_book_remove
 e_book_open
 e_book_get_supported_fields
 e_book_get_supported_auth_methods
@@ -46,7 +44,6 @@ e_book_get_book_view
 e_book_get_contacts
 e_book_get_changes
 e_book_free_change_list
-e_book_get_uri
 e_book_get_static_capabilities
 e_book_check_static_capability
 e_book_is_writable
@@ -55,7 +52,6 @@ e_book_cancel_async_op
 e_book_get_self
 e_book_set_self
 e_book_is_self
-e_book_get_addressbooks
 e_return_error_if_fail
 e_return_async_error_if_fail
 e_return_ex_async_error_val_if_fail
@@ -74,7 +70,6 @@ EBookListCallback
 EBookContactCallback
 EBookBookViewCallback
 e_book_open_async
-e_book_remove_async
 e_book_get_supported_fields_async
 e_book_get_supported_auth_methods_async
 e_book_authenticate_user_async
@@ -89,7 +84,6 @@ e_book_get_book_view_async
 e_book_get_changes_async
 e_book_get_required_fields_async
 e_book_async_open
-e_book_async_remove
 e_book_async_get_supported_fields
 e_book_async_get_supported_auth_methods
 e_book_async_authenticate_user
diff --git a/docs/reference/addressbook/libebook/tmpl/e-book.sgml b/docs/reference/addressbook/libebook/tmpl/e-book.sgml
index 7b34c99..efd97de 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-book.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-book.sgml
@@ -77,16 +77,6 @@ The writable status for this book is being reported.
 @Returns: 
 
 
-<!-- ##### FUNCTION e_book_new_from_uri ##### -->
-<para>
-
-</para>
-
- uri: 
- error: 
- Returns: 
-
-
 <!-- ##### FUNCTION e_book_new_system_addressbook ##### -->
 <para>
 
@@ -116,16 +106,6 @@ The writable status for this book is being reported.
 @Returns: 
 
 
-<!-- ##### FUNCTION e_book_remove ##### -->
-<para>
-
-</para>
-
- book: 
- error: 
- Returns: 
-
-
 <!-- ##### FUNCTION e_book_open ##### -->
 <para>
 
@@ -312,15 +292,6 @@ The writable status for this book is being reported.
 @change_list: 
 
 
-<!-- ##### FUNCTION e_book_get_uri ##### -->
-<para>
-
-</para>
-
- book: 
- Returns: 
-
-
 <!-- ##### FUNCTION e_book_get_static_capabilities ##### -->
 <para>
 
@@ -592,17 +563,6 @@ The writable status for this book is being reported.
 @Returns: 
 
 
-<!-- ##### FUNCTION e_book_remove_async ##### -->
-<para>
-
-</para>
-
- book: 
- cb: 
- closure: 
- Returns: 
-
-
 <!-- ##### FUNCTION e_book_get_supported_fields_async ##### -->
 <para>
 
@@ -772,17 +732,6 @@ The writable status for this book is being reported.
 @Returns: 
 
 
-<!-- ##### FUNCTION e_book_async_remove ##### -->
-<para>
-
-</para>
-
- book: 
- cb: 
- closure: 
- Returns: 
-
-
 <!-- ##### FUNCTION e_book_async_get_supported_fields ##### -->
 <para>
 
diff --git a/docs/reference/addressbook/libebook/tmpl/libebook-unused.sgml b/docs/reference/addressbook/libebook/tmpl/libebook-unused.sgml
index e8fe0b8..cdc265c 100644
--- a/docs/reference/addressbook/libebook/tmpl/libebook-unused.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/libebook-unused.sgml
@@ -443,6 +443,16 @@ Data sent back to the e-book object.
 @closure: 
 @Returns: 
 
+<!-- ##### FUNCTION e_book_async_remove ##### -->
+<para>
+
+</para>
+
+ book: 
+ cb: 
+ closure: 
+ Returns: 
+
 <!-- ##### FUNCTION e_book_async_remove_contact_by_id_ex ##### -->
 <para>
 
@@ -511,6 +521,14 @@ Data sent back to the e-book object.
 @error: 
 @Returns: 
 
+<!-- ##### FUNCTION e_book_get_uri ##### -->
+<para>
+
+</para>
+
+ book: 
+ Returns: 
+
 <!-- ##### FUNCTION e_book_listener_new ##### -->
 <para>
 
@@ -616,6 +634,34 @@ Data sent back to the e-book object.
 </para>
 
 
+<!-- ##### FUNCTION e_book_new_from_uri ##### -->
+<para>
+
+</para>
+
+ uri: 
+ error: 
+ Returns: 
+
+<!-- ##### FUNCTION e_book_remove ##### -->
+<para>
+
+</para>
+
+ book: 
+ error: 
+ Returns: 
+
+<!-- ##### FUNCTION e_book_remove_async ##### -->
+<para>
+
+</para>
+
+ book: 
+ cb: 
+ closure: 
+ Returns: 
+
 <!-- ##### FUNCTION e_book_unload_uri ##### -->
 <para>
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]