diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c index 054622bd1bed217513127d1b010496ddf5bc10a5..a26b6bcaf27598e7f6135d55d64bf4442ad48d38 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.c +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c @@ -55,16 +55,14 @@ typedef struct _Search_Handler_And_Data { } Search_Handler_And_Data; /** - * Size of image that will be displayed in contact list + * The global addressbook list */ -static int pixbuf_size = 32; +GSList *books_data = NULL; /** - * Remaining books to open (asynchronous) + * Size of image that will be displayed in contact list */ -int remaining_books_to_open; - -GSList *books_data = NULL; +static int pixbuf_size = 32; /** * Current selected addressbook's uri and uid, initialized with default @@ -88,12 +86,26 @@ free_hit (Hit *h) g_free (h); } +/** + * Free a book data + */ +void +free_book_data (book_data_t *data) +{ + g_free (data->name); + g_free (data->uid); + g_free (data->uri); +} + /** * Public way to know if we can perform a search */ gboolean books_ready() { + if (books_data == NULL) + return 0; + return (g_slist_length (books_data) > 0); } @@ -106,7 +118,7 @@ books_active() GSList *book_list_iterator; book_data_t *book_data; - if (!books_data) { + if (books_data == NULL) { DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__); return FALSE; } @@ -132,7 +144,7 @@ books_get_book_data_by_uid (gchar *uid) GSList *book_list_iterator; book_data_t *book_data; - if (!books_data) { + if (books_data == NULL) { DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__); return NULL; } @@ -282,8 +294,6 @@ eds_query_result_cb (EBook *book, EBookStatus status, GList *contacts, gpointer if (status == E_BOOK_ERROR_OK) { - gchar *number; - // make sure we have a new list of hits had->hits = NULL; @@ -297,37 +307,17 @@ eds_query_result_cb (EBook *book, EBookStatus status, GList *contacts, gpointer // Get the photo contact hit->photo = pixbuf_from_contact (E_CONTACT (l->data)); - - // Get business phone information - fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_BUSINESS, &number); - hit->phone_business = g_strdup (number); - - // Get home phone information - fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_HOME, &number); - hit->phone_home = g_strdup (number); - - // Get mobile phone information - fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_MOBILE, &number); - hit->phone_mobile = g_strdup (number); - + fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_BUSINESS, &hit->phone_business); + fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_HOME, &hit->phone_home); + fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_MOBILE, &hit->phone_mobile); hit->name = g_strdup ( (char *) e_contact_get_const (E_CONTACT (l->data), E_CONTACT_NAME_OR_ORG)); if (!hit->name) hit->name = ""; - /* - DEBUG ("Addressbook: Contact Found"); - DEBUG ("Addressbook: Full Name %s", hit->name); - DEBUG ("Addressbook: Phone Home %s", hit->phone_home); - DEBUG ("Addressbook: Phone Business %s", hit->phone_business); - DEBUG ("Addressbook: Phone Mobile %s", hit->phone_mobile); - */ - if (hit) had->hits = g_list_append (had->hits, hit); - - // DEBUG ("Addressbook: max_result_remaining %d", had->max_results_remaining); had->max_results_remaining--; if (had->max_results_remaining <= 0) @@ -485,7 +475,6 @@ fill_books_data () { GSList *list, *l; ESourceList *source_list = NULL; - remaining_books_to_open = 0; gboolean default_found; source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources"); @@ -502,6 +491,11 @@ fill_books_data () return; } + if (books_data == NULL) { + empty_books_data(); + books_data = NULL; + } + // in case default property is not set for any addressbook default_found = FALSE; @@ -555,6 +549,26 @@ fill_books_data () g_object_unref (source_list); } +void +empty_books_data() +{ + GSList *book_list_iterator; + book_data_t *book_data; + + if (books_data == NULL) { + DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__); + return; + } + + // Iterate throw the list + for (book_list_iterator = books_data; book_list_iterator != NULL; + book_list_iterator = book_list_iterator->next) { + book_data = (book_data_t *) book_list_iterator->data; + + free_book_data (book_data); + } +} + void search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler handler, gpointer user_data) {