From 2b346d96f86c96c73ac0671e4c5111012f39372d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 8 Dec 2010 00:17:41 -0500 Subject: 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(-) (limited to 'addressbook') diff --git a/addressbook/tools/evolution-addressbook-export-list-cards.c b/addressbook/tools/evolution-addressbook-export-list-cards.c index 41d2217ee1..25a89856f9 100644 --- a/addressbook/tools/evolution-addressbook-export-list-cards.c +++ b/addressbook/tools/evolution-addressbook-export-list-cards.c @@ -24,6 +24,7 @@ #include #endif +#include #include #include #include @@ -34,6 +35,8 @@ #include #include #include +#include +#include #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 14e7e201ba..e64717273f 100644 --- a/addressbook/tools/evolution-addressbook-export-list-folders.c +++ b/addressbook/tools/evolution-addressbook-export-list-folders.c @@ -22,31 +22,27 @@ */ #include +#include #include #include #include #include +#include +#include #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 33d840ec5e..f5341a6fe7 100644 --- a/addressbook/tools/evolution-addressbook-export.c +++ b/addressbook/tools/evolution-addressbook-export.c @@ -24,6 +24,7 @@ #include #endif +#include #include #include @@ -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 804bd50780..ec8df060fc 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 +#include 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 -- cgit v1.2.3