diff --git a/sflphone-client-gnome/src/config/addressbook-config.c b/sflphone-client-gnome/src/config/addressbook-config.c index 7400612b485860c9c5231e4be39374b428d5ff1f..6c8174d6340a381011e8275d55d5d8e87b2a3f11 100644 --- a/sflphone-client-gnome/src/config/addressbook-config.c +++ b/sflphone-client-gnome/src/config/addressbook-config.c @@ -67,8 +67,8 @@ addressbook_config_load_parameters (AddressBook_Config **settings) _settings->search_phone_business = 1; _settings->search_phone_home = 1; _settings->search_phone_mobile = 1; - - } else { + } + else { _settings->enable = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_ENABLE)); _settings->max_results = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_MAX_RESULTS)); _settings->display_contact_photo = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO)); @@ -207,6 +207,7 @@ addressbook_config_book_active_toggled ( GtkTreePath *treePath; GtkTreeModel *model; gboolean active; + book_data_t *book_data; gchar* name; gchar* uid; @@ -239,10 +240,20 @@ addressbook_config_book_active_toggled ( gtk_tree_path_free (treePath); // Update current memory stored books data - // factory->addrbook->get_book_data_by_uid (uid)->active = active; + book_data = factory->addrbook->get_book_data_by_uid(uid); + if(book_data == NULL) { + ERROR("Addressbook: Error: Could not find addressbook %s", uid); + } + book_data->active = active; - // Save data + if(active) { + DEBUG("-------------------------------------------- SET ADDRESSBOOK %s AS ACTIVE", book_data->name); + } + else { + DEBUG("-------------------------------------------- SET ADDRESSBOOK %s AS INACTIVE", book_data->name); + } + // Save data gboolean valid; // Initiate double array char list for one string @@ -286,6 +297,7 @@ addressbook_config_fill_book_list() GSList *book_list_iterator; GtkListStore *store; book_data_t *book_data; + gchar **book_list; if(!abookfactory_is_addressbook_loaded()) { return; @@ -293,7 +305,8 @@ addressbook_config_fill_book_list() AddrBookFactory *factory = abookfactory_get_factory(); - GSList *books_data = factory->addrbook->get_books_data(); + book_list = dbus_get_addressbook_list(); + GSList *books_data = factory->addrbook->get_books_data(book_list); if (!books_data) { DEBUG ("Addressbook: No valid books data (%s:%d)", __FILE__, __LINE__); @@ -312,6 +325,7 @@ addressbook_config_fill_book_list() = book_list_iterator->next) { book_data = (book_data_t *) book_list_iterator->data; gtk_list_store_append (store, &list_store_iterator); + DEBUG("-----------------------------------: %s, %s", book_data->name, book_data->active ? "active" : "not-active"); gtk_list_store_set (store, &list_store_iterator, COLUMN_BOOK_ACTIVE, book_data->active, COLUMN_BOOK_UID, book_data->uid, COLUMN_BOOK_NAME, book_data->name, -1); diff --git a/sflphone-client-gnome/src/config/addressbook-config.h b/sflphone-client-gnome/src/config/addressbook-config.h index 00faa14c0f44f8c3d3a4a6254cc21c1f23a6d471..13271ef1bb80ec47bb75c2e58d681ec43e1ad02a 100644 --- a/sflphone-client-gnome/src/config/addressbook-config.h +++ b/sflphone-client-gnome/src/config/addressbook-config.h @@ -34,6 +34,7 @@ #include <gtk/gtk.h> #include <glib/gtypes.h> +#include "addressbook.h" #include "actions.h" #include "utils.h" @@ -45,7 +46,7 @@ G_BEGIN_DECLS #define ADDRESSBOOK_DISPLAY_PHONE_BUSINESS "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS" #define ADDRESSBOOK_DISPLAY_PHONE_HOME "ADDRESSBOOK_DISPLAY_PHONE_HOME" #define ADDRESSBOOK_DISPLAY_PHONE_MOBILE "ADDRESSBOOK_DISPLAY_PHONE_MOBILE" - +/* typedef struct _AddressBook_Config { // gint64: a signed integer guaranteed to be 64 bits on all platforms // To print or scan values of this type, use G_GINT64_MODIFIER and/or G_GINT64_FORMAT @@ -56,6 +57,8 @@ typedef struct _AddressBook_Config { gint search_phone_business; gint search_phone_mobile; } AddressBook_Config; +*/ + /** * Save the parameters through D-BUS diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index f0ce15bf31fd5203f5097e9fec22913d431e72a6..56e2d69f96dae5bf48b59f2b25396b8d32c48ebb 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -4,6 +4,7 @@ * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> * Author: Guillaume Carmel-Archambault <guillaume.carmel-archambault@savoirfairelinux.com> * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/sflphone-client-gnome/src/contacts/addrbookfactory.c b/sflphone-client-gnome/src/contacts/addrbookfactory.c index d53412db808da8581259efe23e4f9d31a59ef53d..867462ce40bac378e68bc35f47b02cc501248ecf 100644 --- a/sflphone-client-gnome/src/contacts/addrbookfactory.c +++ b/sflphone-client-gnome/src/contacts/addrbookfactory.c @@ -29,10 +29,14 @@ */ #include "addrbookfactory.h" +#include "addressbook-config.h" + #include <glib.h> #include <dlfcn.h> +static void handler_async_search(GList *hits, gpointer user_data); + AddrBookFactory addressbookFactory = {NULL}; AddrBookFactory *abookfactory_get_factory(void) { @@ -111,6 +115,86 @@ void abookfactory_load_module(AddrBookFactory *factory) { ERROR("AddressbookFactory: Error: Could not load addressbook addressbook_set_search_type"); } + ab->search_cb = handler_async_search; + DEBUG("AddressbookFactory: Loading done"); factory->addrbook = ab; } + +void +free_hit (Hit *h) +{ + g_free (h->name); + g_free (h->phone_business); + g_free (h->phone_home); + g_free (h->phone_mobile); + g_free (h); +} + +/** + * Callback called after all book have been processed + */ +static void +handler_async_search (GList *hits, gpointer user_data) +{ + + GList *i; + GdkPixbuf *photo = NULL; + AddressBook_Config *addressbook_config; + callable_obj_t *j; + + printf("Addressbook: callback async search\n"); + + // freeing calls + while ( (j = (callable_obj_t *) g_queue_pop_tail (contacts->callQueue)) != NULL) { + free_callable_obj_t (j); + } + + // Retrieve the address book parameters + addressbook_config = (AddressBook_Config*) user_data; + + // reset previous results + calltree_reset (contacts); + calllist_reset (contacts); + + for (i = hits; i != NULL; i = i->next) { + + Hit *entry; + entry = i->data; + + if (entry) { + // Get the photo + if (addressbook_display (addressbook_config, + ADDRESSBOOK_DISPLAY_CONTACT_PHOTO)) + photo = entry->photo; + + // Create entry for business phone information + if (addressbook_display (addressbook_config, + ADDRESSBOOK_DISPLAY_PHONE_BUSINESS)) + calllist_add_contact (entry->name, entry->phone_business, + CONTACT_PHONE_BUSINESS, photo); + + // Create entry for home phone information + if (addressbook_display (addressbook_config, + ADDRESSBOOK_DISPLAY_PHONE_HOME)) + calllist_add_contact (entry->name, entry->phone_home, + CONTACT_PHONE_HOME, photo); + + // Create entry for mobile phone iddnformation + if (addressbook_display (addressbook_config, + ADDRESSBOOK_DISPLAY_PHONE_MOBILE)) + calllist_add_contact (entry->name, entry->phone_mobile, + CONTACT_PHONE_MOBILE, photo); + } + + free_hit (entry); + } + + g_list_free (hits); + + // Deactivate waiting image + // deactivateWaitingLayer(); + + + gtk_widget_grab_focus (GTK_WIDGET (contacts->view)); +} diff --git a/sflphone-client-gnome/src/contacts/addrbookfactory.h b/sflphone-client-gnome/src/contacts/addrbookfactory.h index 9df1cf534b19d8b9ae245c6a12781a7f8944d730..f7b9c4f3330cd2c5286e12861a598e3b11dd2742 100644 --- a/sflphone-client-gnome/src/contacts/addrbookfactory.h +++ b/sflphone-client-gnome/src/contacts/addrbookfactory.h @@ -52,4 +52,5 @@ void abookfactory_scan_directory(AddrBookFactory *); void abookfactory_load_module(AddrBookFactory *); +void free_hit(Hit *); #endif diff --git a/sflphone-client-gnome/src/contacts/addressbook.h b/sflphone-client-gnome/src/contacts/addressbook.h index b9dd476b8c3c19b8ce9b1977b31be20e80d68ec1..51477595f2c917512e75cd76f680716847b367e6 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.h +++ b/sflphone-client-gnome/src/contacts/addressbook.h @@ -43,22 +43,36 @@ typedef enum {ABOOK_QUERY_IS, ABOOK_QUERY_BEGINS_WITH, ABOOK_QUERY_CONTAINS} AddrbookSearchType; -typedef struct _addrbookhandle { - void (*init) (void); +typedef struct _AddressBook_Config { + // gint64: a signed integer guaranteed to be 64 bits on all platforms + // To print or scan values of this type, use G_GINT64_MODIFIER and/or G_GINT64_FORMAT + gint enable; + gint max_results; + gint display_contact_photo; + gint search_phone_home; + gint search_phone_business; + gint search_phone_mobile; +} AddressBook_Config; + +typedef struct AddrBookHandle AddrBookHandle; + +struct AddrBookHandle { + void (*init) (gchar **); gboolean (*is_ready) (void); gboolean (*is_enabled) (void); gboolean (*is_active) (void); - void (*search) (GtkEntry*); - GSList *(*get_books_data)(void); + void (*search) (AddrBookHandle *, GtkEntry *, AddressBook_Config *); + book_data_t *(*get_books_data)(gchar **); GSList *(*get_book_data_by_uid)(gchar *); void (*set_current_book)(gchar *); void (*set_search_type)(AddrbookSearchType); -} AddrBookHandle; + void (*search_cb)(GList *, gpointer); +}; /** * Initialize addressbook */ -void addressbook_init(); +void addressbook_init(gchar **book_list); /** * Return addressbook state @@ -79,16 +93,16 @@ gboolean addressbook_is_active(); /** * Perform a search in addressbook */ -void addressbook_search (GtkEntry*); +void addressbook_search (AddrBookHandle *, GtkEntry *, AddressBook_Config *); /** - * Get a list of addressbook + * Get a list of addressbook book */ -GSList *addressbook_get_books_data(void); +GSList *addressbook_get_books_data(gchar **book_list); -GSList *addressbook_get_book_data_by_uid(gchar *); +book_data_t *addressbook_get_book_data_by_uid(gchar *); -void addressbook_set_current_book(void); +void addressbook_set_current_book(gchar *); void addressbook_set_search_type(AddrbookSearchType); diff --git a/sflphone-client-gnome/src/contacts/addressbook/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook/addressbook.c index 39616d2289ed8fb31fdb6b61a31e2a3c500da14c..188e546e53b7082af34e5cbbbb00fffb95d3b993 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/addressbook.c +++ b/sflphone-client-gnome/src/contacts/addressbook/addressbook.c @@ -34,26 +34,27 @@ #include "searchbar.h" #include "addressbook-config.h" -static void -handler_async_search (GList *, gpointer); +// static void +// handler_async_search (GList *, gpointer); /** * Perform a search on address book */ void -addressbook_search (GtkEntry* entry) +addressbook_search (AddrBookHandle *handle, GtkEntry* entry, AddressBook_Config *addressbook_config) { + printf("Addressbook: Search"); const gchar* query = gtk_entry_get_text (GTK_ENTRY (entry)); printf("Addressbook: Search %s\n", query); - AddressBook_Config *addressbook_config; + // AddressBook_Config *addressbook_config; - activateWaitingLayer(); + // activateWaitingLayer(); // addressbook_config_load_parameters (&addressbook_config); - search_async_by_contacts (gtk_entry_get_text (GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search, addressbook_config); + search_async_by_contacts (gtk_entry_get_text (GTK_ENTRY (entry)), addressbook_config->max_results, handle->search_cb, addressbook_config); } @@ -98,14 +99,12 @@ addressbook_is_active() * Get active addressbook from config. */ static void -addressbook_config_books() +addressbook_config_books(gchar **book_list) { gchar **config_book_uid; book_data_t *book_data; gchar **list; - - // Retrieve list of books // list = (gchar **) dbus_get_addressbook_list(); @@ -134,20 +133,21 @@ addressbook_config_books() * Good method to get books_data */ GSList * -addressbook_get_books_data() +addressbook_get_books_data(gchar **book_list) { printf("Addressbook: Get books data\n"); - fill_books_data(); - addressbook_config_books(); + // fill_books_data(); + addressbook_config_books(book_list); determine_default_addressbook(); return get_books_data(); } -GSList * +book_data_t * addressbook_get_book_data_by_uid(gchar *uid) { + return books_get_book_data_by_uid (uid); } /** @@ -155,14 +155,14 @@ addressbook_get_book_data_by_uid(gchar *uid) * Set active/inactive status depending on config. */ void -addressbook_init() +addressbook_init(gchar **book_list) { printf("Addressbook: Initialize addressbook\n"); init_eds_mutex(); fill_books_data(); - addressbook_config_books(); + addressbook_config_books(book_list); determine_default_addressbook(); // Call books initialization @@ -172,6 +172,7 @@ addressbook_init() /** * Callback called after all book have been processed */ +/* static void handler_async_search (GList *hits, gpointer user_data) { @@ -231,12 +232,17 @@ handler_async_search (GList *hits, gpointer user_data) g_list_free (hits); // Deactivate waiting image - deactivateWaitingLayer(); + // deactivateWaitingLayer(); gtk_widget_grab_focus (GTK_WIDGET (contacts->view)); } +*/ void addressbook_set_search_type(AddrbookSearchType searchType) { } + +void addressbook_set_current_book(gchar *current) { + +} diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c index 842845903d62b6283fa445846d494c542735d490..b46ceafc7820a1f17e9ad62702ad2721caf8a6e7 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.c +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c @@ -86,18 +86,6 @@ static EBookQueryTest current_test = E_BOOK_QUERY_BEGINS_WITH; */ void empty_books_data(); -/** - * Freeing a hit instance - */ -void -free_hit (Hit *h) -{ - g_free (h->name); - g_free (h->phone_business); - g_free (h->phone_home); - g_free (h->phone_mobile); - g_free (h); -} /** * Free a book data @@ -690,8 +678,6 @@ empty_books_data() free_book_data (book_data); } - - } void @@ -722,7 +708,7 @@ search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler } printf ("Addressbook: Opening addressbook: uri: %s\n", current_uri); - pinrtf ("Addressbook: Opening addressbook: name: %s\n", current_name); + printf ("Addressbook: Opening addressbook: name: %s\n", current_name); book = e_book_new_from_uri(current_uri, &err); @@ -740,7 +726,6 @@ search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler e_book_async_open(book, TRUE, eds_async_open_callback, had); #endif - } else { printf ("Addressbook: Error: No book available\n"); } diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c index 134465f47bebc118afadae0f1b7162214d00127d..545e33651a93e19050b5c671d9593cc31ffc1da5 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.c +++ b/sflphone-client-gnome/src/contacts/searchbar.c @@ -33,6 +33,8 @@ #include <searchbar.h> #include <calltree.h> +#include <config/addressbook-config.h> +#include <contacts/addressbook.h> #include <contacts/addressbook/eds.h> #include <contacts/addrbookfactory.h> @@ -60,7 +62,9 @@ void searchbar_addressbook_activated (GtkEntry *entry, gchar *arg1 UNUSED, gpoin if(abookfactory_is_addressbook_loaded()) { AddrBookFactory *factory = abookfactory_get_factory(); - factory->addrbook->search(entry); + AddressBook_Config *addressbook_config; + addressbook_config_load_parameters(&addressbook_config); + factory->addrbook->search(factory->addrbook, entry, addressbook_config); } } @@ -87,7 +91,9 @@ static void cbox_changed_cb (GtkWidget *widget, gpointer user_data UNUSED) if(abookfactory_is_addressbook_loaded()) { AddrBookFactory *factory = abookfactory_get_factory(); factory->addrbook->set_current_book (name); - factory->addrbook->search(GTK_ENTRY(addressbookentry)); + AddressBook_Config *addressbook_config; + addressbook_config_load_parameters(&addressbook_config); + factory->addrbook->search(factory->addrbook, GTK_ENTRY(addressbookentry), addressbook_config); } } @@ -105,16 +111,18 @@ void update_searchbar_addressbook_list() GSList *book_list_iterator; book_data_t *book_data; GSList *books_data = NULL; + gchar **book_list; if(abookfactory_is_addressbook_loaded()) { AddrBookFactory *factory = abookfactory_get_factory(); - books_data = factory->addrbook->get_books_data(); + book_list = dbus_get_addressbook_list(); + books_data = factory->addrbook->get_books_data(book_list); } if(books_data == NULL) { + ERROR("Searchbar: No books data found"); return; } - DEBUG ("Searchbar: Update addressbook list"); // we must disconnect signal from teh cbox while updating its content @@ -122,7 +130,6 @@ void update_searchbar_addressbook_list() // store the current active text activeText = g_strdup (gtk_combo_box_get_active_text (GTK_COMBO_BOX (cbox))); - if(activeText == NULL) { activeText = g_strdup (""); @@ -153,6 +160,8 @@ void update_searchbar_addressbook_list() } } + DEBUG("OK"); + if(abookfactory_is_addressbook_loaded()) { AddrBookFactory *factory = abookfactory_get_factory(); if (activeIsSet) { @@ -165,6 +174,7 @@ void update_searchbar_addressbook_list() factory->addrbook->set_current_book(gtk_combo_box_get_active_text(GTK_COMBO_BOX(cbox))); } } + DEBUG("OK"); g_free (activeText); cboxSignalId = gtk_signal_connect (GTK_OBJECT (cbox), "changed", G_CALLBACK (cbox_changed_cb), NULL); @@ -192,8 +202,10 @@ static void select_search_type (GtkWidget *item, GtkEntry *entry UNUSED) else if (strcmp ("Search contains", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0) { factory->addrbook->set_search_type(ABOOK_QUERY_CONTAINS); } - - factory->addrbook->search (GTK_ENTRY (addressbookentry)); + + AddressBook_Config *addressbook_config; + addressbook_config_load_parameters(&addressbook_config); + factory->addrbook->search (factory->addrbook, GTK_ENTRY (addressbookentry), addressbook_config); } } @@ -410,6 +422,7 @@ GtkWidget* contacts_searchbar_new () int count, cbox_height, cbox_width; GtkTreeIter iter, activeIter; GtkCellRenderer *cell; + gchar **book_list; // gchar *current_addressbook = NULL; DEBUG ("Addressbook: Create addressbook search bar"); @@ -423,13 +436,15 @@ GtkWidget* contacts_searchbar_new () return NULL; } + book_list = dbus_get_addressbook_list(); + AddrBookFactory *factory = abookfactory_get_factory(); - factory->addrbook->init(); + factory->addrbook->init(book_list); GSList *book_list_iterator; book_data_t *book_data; - GSList *books_data = factory->addrbook->get_books_data(); + GSList *books_data = factory->addrbook->get_books_data(book_list); // Populate menu count = 0; diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index f38c7bb4499195421290ab4498f88c03a0f1f759..3e6f02419c3be8b498b618d76836dc159a7c38ed 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -4372,10 +4372,10 @@ void ManagerImpl::setAddressbookList (const std::vector<std::string>& list) _debug ("Manager: Set addressbook list"); std::string s = serialize (list); + _debug("Manager: New addressbook list: %s", s.c_str()); addressbookPreference.setList (s); saveConfig(); - } std::vector<std::string> ManagerImpl::getAddressbookList (void)