[evolution/account-mgmt: 16/54] Adapt addressbook/tools to the new ESource API.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/account-mgmt: 16/54] Adapt addressbook/tools to the new ESource API.
- Date: Tue, 24 Apr 2012 23:46:14 +0000 (UTC)
commit 432bc01f319814b2a430b225e4d524f325313fc4
Author: Matthew Barnes <mbarnes redhat com>
Date: Wed Dec 8 00:17:41 2010 -0500
Adapt addressbook/tools to the new ESource API.
.../evolution-addressbook-export-list-cards.c | 52 ++++++---
.../evolution-addressbook-export-list-folders.c | 121 ++++++++++----------
addressbook/tools/evolution-addressbook-export.c | 28 ++++--
addressbook/tools/evolution-addressbook-export.h | 10 +-
4 files changed, 124 insertions(+), 87 deletions(-)
---
diff --git a/addressbook/tools/evolution-addressbook-export-list-cards.c b/addressbook/tools/evolution-addressbook-export-list-cards.c
index 41d2217..25a8985 100644
--- a/addressbook/tools/evolution-addressbook-export-list-cards.c
+++ b/addressbook/tools/evolution-addressbook-export-list-cards.c
@@ -24,6 +24,7 @@
#include <config.h>
#endif
+#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
@@ -34,6 +35,8 @@
#include <libebook/e-book-client.h>
#include <libebook/e-book-query.h>
#include <libebook/e-contact.h>
+#include <libedataserver/e-source-registry.h>
+#include <libedataserver/e-source-address-book.h>
#include "evolution-addressbook-export.h"
@@ -639,8 +642,8 @@ action_list_cards (GSList *contacts,
length = g_slist_length (contacts);
if (length <= 0) {
- g_warning ("Couldn't load addressbook correctly!!!! %s####", p_actctx->action_list_cards.addressbook_folder_uri ?
- p_actctx->action_list_cards.addressbook_folder_uri : "NULL");
+ g_warning ("Couldn't load addressbook correctly!!!! %s####", p_actctx->action_list_cards.addressbook_source_uid ?
+ p_actctx->action_list_cards.addressbook_source_uid : "NULL");
exit (-1);
}
@@ -769,32 +772,47 @@ set_pre_defined_field (GSList **pre_defined_fields)
}
guint
-action_list_cards_init (ActionContext *p_actctx)
+action_list_cards_init (ESourceRegistry *registry,
+ ActionContext *p_actctx)
{
EBookClient *book_client;
EBookQuery *query;
- gchar *query_str;
+ ESource *source;
GSList *contacts;
+ const gchar *uid;
+ gchar *query_str;
GError *error = NULL;
- if (p_actctx->action_list_cards.addressbook_folder_uri != NULL) {
- book_client = e_book_client_new_from_uri (p_actctx->action_list_cards.addressbook_folder_uri, &error);
- } else {
- book_client = e_book_client_new_default (&error);
- }
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FAILED);
+
+ uid = p_actctx->action_list_cards.addressbook_source_uid;
+
+ if (uid != NULL)
+ source = e_source_registry_ref_source (registry, uid);
+ else
+ source = e_source_registry_ref_default_address_book (registry);
+
+ book_client = e_book_client_new (source, &error);
+
+ g_object_unref (source);
- if (!book_client
- || !e_client_open_sync (E_CLIENT (book_client), TRUE, NULL, &error)) {
- g_warning ("Couldn't load addressbook %s: %s", p_actctx->action_list_cards.addressbook_folder_uri ?
- p_actctx->action_list_cards.addressbook_folder_uri : "'default'",
- error ? error->message : "Unknown error");
- if (error)
- g_error_free (error);
- if (book_client)
+ if (book_client != NULL)
+ e_client_open_sync (E_CLIENT (book_client), TRUE, NULL, &error);
+
+ if (error != NULL) {
+ g_warning (
+ "Couldn't load addressbook %s: %s",
+ p_actctx->action_list_cards.addressbook_source_uid ?
+ p_actctx->action_list_cards.addressbook_source_uid :
+ "'default'", error->message);
+ if (book_client != NULL)
g_object_unref (book_client);
+ g_error_free (error);
exit (-1);
}
+ g_return_val_if_fail (E_IS_BOOK_CLIENT (book_client), FAILED);
+
query = e_book_query_any_field_contains ("");
query_str = e_book_query_to_string (query);
e_book_query_unref (query);
diff --git a/addressbook/tools/evolution-addressbook-export-list-folders.c b/addressbook/tools/evolution-addressbook-export-list-folders.c
index 14e7e20..e647172 100644
--- a/addressbook/tools/evolution-addressbook-export-list-folders.c
+++ b/addressbook/tools/evolution-addressbook-export-list-folders.c
@@ -22,31 +22,27 @@
*/
#include <config.h>
+#include <stdlib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <libebook/e-book-client.h>
#include <libebook/e-book-query.h>
+#include <libedataserver/e-source-registry.h>
+#include <libedataserver/e-source-address-book.h>
#include "evolution-addressbook-export.h"
guint
-action_list_folders_init (ActionContext *p_actctx)
+action_list_folders_init (ESourceRegistry *registry,
+ ActionContext *p_actctx)
{
- ESourceList *addressbooks = NULL;
- GSList *groups, *group;
+ GList *list, *iter;
FILE *outputfile = NULL;
- GError *error = NULL;
- EBookQuery *query;
- gchar *query_str;
+ const gchar *extension_name;
- if (!e_book_client_get_sources (&addressbooks, &error)) {
- g_warning (_("Couldn't get list of address books: %s"), error ? error->message : _("Unknown error"));
- if (error)
- g_error_free (error);
- exit (-1);
- }
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FAILED);
if (p_actctx->action_list_folders.output_file != NULL) {
if (!(outputfile = g_fopen (p_actctx->action_list_folders.output_file, "w"))) {
@@ -55,55 +51,64 @@ action_list_folders_init (ActionContext *p_actctx)
}
}
- query = e_book_query_any_field_contains ("");
- query_str = e_book_query_to_string (query);
- e_book_query_unref (query);
-
- groups = e_source_list_peek_groups (addressbooks);
- for (group = groups; group; group = group->next) {
- ESourceGroup *g = group->data;
- GSList *sources, *source;
-
- sources = e_source_group_peek_sources (g);
- for (source = sources; source; source = source->next) {
- ESource *s = source->data;
- EBookClient *book_client;
- GSList *contacts;
- gchar *uri;
- const gchar *name;
-
- error = NULL;
- book_client = e_book_client_new (s, &error);
- if (!book_client
- || !e_client_open_sync (E_CLIENT (book_client), TRUE, NULL, &error)) {
- g_warning (_("Failed to open client '%s': %s"), e_source_get_display_name (s), error ? error->message : _("Unknown error"));
- if (error)
- g_error_free (error);
- continue;
- }
-
- if (!e_book_client_get_contacts_sync (book_client, query_str, &contacts, NULL, &error))
- contacts = NULL;
-
- uri = e_source_get_uri (s);
- name = e_source_get_display_name (s);
-
- if (outputfile)
- fprintf (
- outputfile, "\"%s\",\"%s\",%d\n",
- uri, name, g_slist_length (contacts));
- else
- printf ("\"%s\",\"%s\",%d\n", uri, name, g_slist_length (contacts));
-
- g_free (uri);
- g_slist_foreach (contacts, (GFunc) g_object_unref, NULL);
- g_slist_free (contacts);
-
- g_object_unref (book_client);
+ extension_name = E_SOURCE_EXTENSION_ADDRESS_BOOK;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; iter != NULL; iter = g_list_next (iter)) {
+ EBookClient *book_client;
+ EBookQuery *query;
+ ESource *source;
+ GSList *contacts;
+ const gchar *display_name;
+ const gchar *uid;
+ gchar *query_str;
+ GError *error = NULL;
+
+ source = E_SOURCE (iter->data);
+
+ book_client = e_book_client_new (source, &error);
+
+ if (book_client != NULL)
+ e_client_open_sync (
+ E_CLIENT (book_client), TRUE, NULL, &error);
+
+ if (error != NULL) {
+ g_warning (
+ _("Failed to open client '%s': %s"),
+ e_source_get_display_name (source),
+ error->message);
+ if (book_client != NULL)
+ g_object_unref (book_client);
+ g_error_free (error);
+ continue;
}
+
+ query = e_book_query_any_field_contains ("");
+ query_str = e_book_query_to_string (query);
+ e_book_query_unref (query);
+
+ e_book_client_get_contacts_sync (
+ book_client, query_str, &contacts, NULL, NULL);
+
+ display_name = e_source_get_display_name (source);
+ uid = e_source_get_uid (source);
+
+ if (outputfile)
+ fprintf (
+ outputfile, "\"%s\",\"%s\",%d\n",
+ uid, display_name, g_slist_length (contacts));
+ else
+ printf (
+ "\"%s\",\"%s\",%d\n",
+ uid, display_name, g_slist_length (contacts));
+
+ g_slist_foreach (contacts, (GFunc) g_object_unref, NULL);
+ g_slist_free (contacts);
+
+ g_object_unref (book_client);
}
- g_free (query_str);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
if (outputfile)
fclose (outputfile);
diff --git a/addressbook/tools/evolution-addressbook-export.c b/addressbook/tools/evolution-addressbook-export.c
index 33d840e..f5341a6 100644
--- a/addressbook/tools/evolution-addressbook-export.c
+++ b/addressbook/tools/evolution-addressbook-export.c
@@ -24,6 +24,7 @@
#include <config.h>
#endif
+#include <stdlib.h>
#include <string.h>
#include <glib/gi18n.h>
@@ -49,7 +50,7 @@
static gchar *opt_output_file = NULL;
static gboolean opt_list_folders_mode = FALSE;
static gchar *opt_output_format = NULL;
-static gchar *opt_addressbook_folder_uri = NULL;
+static gchar *opt_addressbook_source_uid = NULL;
static gboolean opt_async_mode = FALSE;
static gint opt_file_size = 0;
static gchar **opt_remaining = NULL;
@@ -83,6 +84,7 @@ gint
main (gint argc,
gchar **argv)
{
+ ESourceRegistry *registry;
ActionContext actctx;
GOptionContext *context;
GError *error = NULL;
@@ -128,14 +130,22 @@ main (gint argc,
exit (-1);
}
+ registry = e_source_registry_new_sync (NULL, &error);
+ if (error != NULL) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ exit (-1);
+ }
+
/* Parsing Parameter */
if (opt_remaining && g_strv_length (opt_remaining) > 0)
- opt_addressbook_folder_uri = g_strdup (opt_remaining[0]);
+ opt_addressbook_source_uid = g_strdup (opt_remaining[0]);
if (opt_list_folders_mode != FALSE) {
current_action = ACTION_LIST_FOLDERS;
- /* check there should not be addressbook-folder-uri , and async and size , output_format */
- if (opt_addressbook_folder_uri != NULL || opt_async_mode != FALSE || opt_output_format != NULL || opt_file_size != 0) {
+ /* check there should not be addressbook-source-uid,
+ * and async and size, output_format */
+ if (opt_addressbook_source_uid != NULL || opt_async_mode != FALSE || opt_output_format != NULL || opt_file_size != 0) {
g_warning (_("Command line arguments error, please use --help option to see the usage."));
exit (-1);
}
@@ -181,7 +191,8 @@ main (gint argc,
} else {
actctx.action_list_folders.output_file = g_strdup (opt_output_file);
}
- action_list_folders_init (&actctx);
+ action_list_folders_init (registry, &actctx);
+
} else if (current_action == ACTION_LIST_CARDS) {
actctx.action_type = current_action;
if (opt_output_file == NULL) {
@@ -191,11 +202,12 @@ main (gint argc,
}
actctx.action_list_cards.IsCSV = IsCSV;
actctx.action_list_cards.IsVCard = IsVCard;
- actctx.action_list_cards.addressbook_folder_uri = g_strdup (opt_addressbook_folder_uri);
+ actctx.action_list_cards.addressbook_source_uid =
+ g_strdup (opt_addressbook_source_uid);
actctx.action_list_cards.async_mode = opt_async_mode;
actctx.action_list_cards.file_size = opt_file_size;
- action_list_cards_init (&actctx);
+ action_list_cards_init (registry, &actctx);
} else {
g_warning (_("Unhandled error"));
@@ -204,5 +216,5 @@ main (gint argc,
/*FIXME:should free actctx's some gchar * field, such as output_file! but since the program will end, so that will not cause mem leak. */
- exit (0);
+ return 0;
}
diff --git a/addressbook/tools/evolution-addressbook-export.h b/addressbook/tools/evolution-addressbook-export.h
index 804bd50..ec8df06 100644
--- a/addressbook/tools/evolution-addressbook-export.h
+++ b/addressbook/tools/evolution-addressbook-export.h
@@ -24,7 +24,7 @@
#ifndef _EVOLUTION_ADDRESSBOOK_EXPORT_H_
#define _EVOLUTION_ADDRESSBOOK_EXPORT_H__
-#include <glib.h>
+#include <libedataserver/e-source-registry.h>
G_BEGIN_DECLS
@@ -55,7 +55,7 @@ union _ActionContext
gchar *output_file;
gint IsCSV;
gint IsVCard;
- gchar *addressbook_folder_uri;
+ gchar *addressbook_source_uid;
gint async_mode;
gint file_size;
}
@@ -65,10 +65,12 @@ union _ActionContext
typedef union _ActionContext ActionContext;
/* action_list_folders */
-guint action_list_folders_init (ActionContext * p_actctx);
+guint action_list_folders_init (ESourceRegistry *registry,
+ ActionContext *p_actctx);
/*action list cards*/
-guint action_list_cards_init (ActionContext * p_actctx);
+guint action_list_cards_init (ESourceRegistry *registry,
+ ActionContext *p_actctx);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]