From cab165031df56b1eafb030d6ba81b8b2addccb92 Mon Sep 17 00:00:00 2001 From: smorlat Date: Wed, 25 Feb 2009 22:18:22 +0000 Subject: [PATCH] work in progress around buddy lookups. git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@275 3f6dc0c8-ddfe-455d-9043-3cd528dc4637 --- linphone/coreapi/sipsetup.c | 5 +++++ linphone/coreapi/sipsetup.h | 1 + linphone/gtk-glade/buddylookup.c | 32 +++++++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/linphone/coreapi/sipsetup.c b/linphone/coreapi/sipsetup.c index eedbb5011..010618413 100644 --- a/linphone/coreapi/sipsetup.c +++ b/linphone/coreapi/sipsetup.c @@ -127,6 +127,11 @@ int sip_setup_context_get_buddy_lookup_results(SipSetupContext *ctx, MSList **re return -1; } +void sip_setup_context_free_results(MSList *results){ + ms_list_for_each(results,(void (*)(void*))&ms_free); + ms_list_free(results); +} + void sip_setup_context_free(SipSetupContext *ctx){ ms_free(ctx); } diff --git a/linphone/coreapi/sipsetup.h b/linphone/coreapi/sipsetup.h index dd2382d77..873b90c6d 100644 --- a/linphone/coreapi/sipsetup.h +++ b/linphone/coreapi/sipsetup.h @@ -100,6 +100,7 @@ int sip_setup_context_get_relay(SipSetupContext *ctx, char *relay, size_t size); int sip_setup_context_lookup_buddy(SipSetupContext *ctx, const char *key); BuddyLookupStatus sip_setup_context_get_buddy_lookup_status(SipSetupContext *ctx); int sip_setup_context_get_buddy_lookup_results(SipSetupContext *ctx, MSList **results /*of BuddyInfo */); +void sip_setup_context_free_results(MSList *results); void sip_setup_context_free(SipSetupContext *ctx); #endif diff --git a/linphone/gtk-glade/buddylookup.c b/linphone/gtk-glade/buddylookup.c index 7dbad9403..02f2d2caf 100644 --- a/linphone/gtk-glade/buddylookup.c +++ b/linphone/gtk-glade/buddylookup.c @@ -20,6 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "linphone.h" #include "sipsetup.h" +static void linphone_gtk_display_lookup_results(GtkWidget *w, const MSList *results); + enum { LOOKUP_RESULT_NAME, LOOKUP_RESULT_SIP_URI, @@ -83,7 +85,7 @@ static gboolean linphone_gtk_process_buddy_lookup(GtkWidget *w){ GtkProgressBar *pb=GTK_PROGRESS_BAR(linphone_gtk_get_widget(w,"progressbar")); ctx=(SipSetupContext*)g_object_get_data(G_OBJECT(w),"SipSetupContext"); bls=sip_setup_context_get_buddy_lookup_status(ctx); - + MSList *results=NULL; switch(bls){ case BuddyLookupNone: case BuddyLookupFailure: @@ -105,6 +107,13 @@ static gboolean linphone_gtk_process_buddy_lookup(GtkWidget *w){ case BuddyLookupDone: gtk_progress_bar_set_fraction(pb,100); gtk_progress_bar_set_text(pb,_("Done !")); + sip_setup_context_get_buddy_lookup_results(ctx,&results); + if (results){ + linphone_gtk_display_lookup_results( + linphone_gtk_get_widget(w,"search_results"), + results); + sip_setup_context_free_results(results); + } break; } return TRUE; @@ -137,3 +146,24 @@ void linphone_gtk_keyword_changed(GtkEditable *e){ tid=g_timeout_add(2000,(GSourceFunc)keyword_typing_finished,w); g_object_set_data(G_OBJECT(w),"typing_timeout",GINT_TO_POINTER(tid)); } + +static void linphone_gtk_display_lookup_results(GtkWidget *w, const MSList *results){ + GtkListStore *store; + GtkTreeIter iter; + gchar *tmp; + const MSList *elem; + store=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(w))); + gtk_list_store_clear(store); + for(elem=results;elem!=NULL;elem=elem->next){ + BuddyInfo *bi=(BuddyInfo*)elem->data; + gtk_list_store_append(store,&iter); + tmp=g_strdup_printf("%s, %s (%s)",bi->firstname,bi->lastname,bi->displayname); + gtk_list_store_set(store,&iter,LOOKUP_RESULT_NAME, tmp,-1); + g_free(tmp); + gtk_list_store_set(store,&iter,LOOKUP_RESULT_SIP_URI, bi->sip_uri,-1); + tmp=g_strdup_printf("%s, %s %s\n%s",bi->address.street, bi->address.zip, bi->address.town, bi->address.country); + gtk_list_store_set(store,&iter,LOOKUP_RESULT_ADDRESS, tmp,-1); + g_free(tmp); + } +} +