From eac99852bdfabb52341f576850fa44a23d183a17 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 9 Apr 2008 14:38:58 -0400 Subject: [PATCH] Desktop notifications for accounts registration problems --- sflphone-gtk/src/SFLnotify.c | 109 +++++++++++++++++++++++++-------- sflphone-gtk/src/SFLnotify.h | 5 +- sflphone-gtk/src/accountlist.c | 8 +-- sflphone-gtk/src/actions.c | 14 +++-- 4 files changed, 98 insertions(+), 38 deletions(-) diff --git a/sflphone-gtk/src/SFLnotify.c b/sflphone-gtk/src/SFLnotify.c index d7f4938873..58a1a77f68 100644 --- a/sflphone-gtk/src/SFLnotify.c +++ b/sflphone-gtk/src/SFLnotify.c @@ -42,7 +42,7 @@ notify_incoming_call( call_t* c ) callerid, NULL, NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_NORMAL ); + notify_notification_set_urgency( notification , NOTIFY_URGENCY_CRITICAL ); notify_notification_set_icon_from_pixbuf (notification, pixbuf); notify_notification_attach_to_status_icon( notification , get_status_icon() ); notify_notification_set_timeout( notification , (( g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER )); @@ -100,7 +100,7 @@ notify_voice_mails( guint count , account_t* acc ) body, NULL, NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_NORMAL ); + notify_notification_set_urgency( notification , NOTIFY_URGENCY_LOW ); notify_notification_set_icon_from_pixbuf (notification, pixbuf); notify_notification_attach_to_status_icon( notification , get_status_icon() ); notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); @@ -112,7 +112,7 @@ notify_voice_mails( guint count , account_t* acc ) } void -notify_registered_accounts( void ) +notify_switch_account( account_t* acc ) { // the account is different from NULL GdkPixbuf *pixbuf; @@ -120,35 +120,90 @@ notify_registered_accounts( void ) gchar* body=""; notify_init("sflphone"); - guint size = account_list_get_size(); - int i; + body = g_markup_printf_escaped(_("Calling with %s account <i>%s</i>") , + g_hash_table_lookup( acc->properties , ACCOUNT_TYPE) , + g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS)); + + title = g_markup_printf_escaped(_("Switching account")); + + pixbuf = gdk_pixbuf_new_from_file(ICON_DIR "/sflphone.png", NULL); + + notification = notify_notification_new( title, + body, + NULL, + NULL); + notify_notification_set_urgency( notification , NOTIFY_URGENCY_NORMAL ); + notify_notification_set_icon_from_pixbuf (notification, pixbuf); + notify_notification_attach_to_status_icon( notification , get_status_icon() ); + notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); + notify_notification_add_action( notification , "ignore" , _("Ignore") , (NotifyActionCallback) ignore_call_cb , NULL , NULL ); + + if (!notify_notification_show (notification, NULL)) { + g_print("notify(), failed to send notification\n"); + } +} + + void +notify_no_accounts( ) +{ + GdkPixbuf *pixbuf; + gchar* title; + gchar* body=""; + notify_init("sflphone"); + + body = g_markup_printf_escaped(_("You haven't setup any accounts")); + + title = g_markup_printf_escaped(_("Error")); + + pixbuf = gdk_pixbuf_new_from_file(ICON_DIR "/sflphone.png", NULL); + + notification = notify_notification_new( title, + body, + NULL, + NULL); + notify_notification_set_urgency( notification , NOTIFY_URGENCY_CRITICAL ); + notify_notification_set_icon_from_pixbuf (notification, pixbuf); + notify_notification_attach_to_status_icon( notification , get_status_icon() ); + notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); + notify_notification_add_action( notification , "setup" , _("Setup Accounts") , (NotifyActionCallback) setup_accounts_cb , NULL , NULL ); + + if (!notify_notification_show (notification, NULL)) { + g_print("notify(), failed to send notification\n"); + } +} + + void +setup_accounts_cb( NotifyNotification *notification, gchar *action, gpointer data ) +{ + show_accounts_window(0); + g_object_unref( notification ); +} - if( size > 0 ){ - for( i = 0 ; i < size ; i++ ){ + void +notify_no_registered_accounts( ) +{ + GdkPixbuf *pixbuf; + gchar* title; + gchar* body=""; + notify_init("sflphone"); - body = g_markup_printf_escaped(_("%s%s (%s) - State:<i>%s</i>") , - body, - g_hash_table_lookup( account_list_get_nth(i)->properties , ACCOUNT_ALIAS), - g_hash_table_lookup( account_list_get_nth(i)->properties , ACCOUNT_TYPE) , - account_state_name( account_list_get_nth(i)->state)) ; - } + body = g_markup_printf_escaped(_("You have no registered accounts")); - title = g_markup_printf_escaped(_("Accounts")); + title = g_markup_printf_escaped(_("Error")); - pixbuf = gdk_pixbuf_new_from_file(ICON_DIR "/sflphone.png", NULL); + pixbuf = gdk_pixbuf_new_from_file(ICON_DIR "/sflphone.png", NULL); - notification = notify_notification_new( title, - body, - NULL, - NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_NORMAL ); - notify_notification_set_icon_from_pixbuf (notification, pixbuf); - notify_notification_attach_to_status_icon( notification , get_status_icon() ); - notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); - notify_notification_add_action( notification , "ignore" , _("Ignore") , (NotifyActionCallback) ignore_call_cb , NULL , NULL ); + notification = notify_notification_new( title, + body, + NULL, + NULL); + notify_notification_set_urgency( notification , NOTIFY_URGENCY_CRITICAL ); + notify_notification_set_icon_from_pixbuf (notification, pixbuf); + notify_notification_attach_to_status_icon( notification , get_status_icon() ); + notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); + notify_notification_add_action( notification , "setup" , _("Setup Accounts") , (NotifyActionCallback) setup_accounts_cb , NULL , NULL ); - if (!notify_notification_show (notification, NULL)) { - g_print("notify(), failed to send notification\n"); - } + if (!notify_notification_show (notification, NULL)) { + g_print("notify(), failed to send notification\n"); } } diff --git a/sflphone-gtk/src/SFLnotify.h b/sflphone-gtk/src/SFLnotify.h index 7dfed316a6..1f80d3207d 100644 --- a/sflphone-gtk/src/SFLnotify.h +++ b/sflphone-gtk/src/SFLnotify.h @@ -42,7 +42,9 @@ void notify_incoming_call( call_t* c); void notify_voice_mails( guint count , account_t* acc ); -void notify_registered_accounts(); +void notify_switch_account( account_t* acc ); +void notify_no_accounts( ); +void notify_no_registered_accounts( ); /* * Callback when answer button is pressed. * Action: Pick up the incoming call @@ -67,4 +69,5 @@ void refuse_call_cb( NotifyNotification *notification, gchar *action, gpointer d */ void ignore_call_cb( NotifyNotification *notification, gchar *action, gpointer data ); +void setup_accounts_cb(NotifyNotification *notification, gchar *action, gpointer data); #endif diff --git a/sflphone-gtk/src/accountlist.c b/sflphone-gtk/src/accountlist.c index 3000dd4337..2e3197b163 100644 --- a/sflphone-gtk/src/accountlist.c +++ b/sflphone-gtk/src/accountlist.c @@ -23,7 +23,7 @@ #include <string.h> GQueue * accountQueue; -account_t * __CURRENT_ACCOUNT=NULL; +gchar* __CURRENT_ACCOUNT_ID = NULL; /* GCompareFunc to compare a accountID (gchar* and a account_t) */ gint @@ -129,19 +129,19 @@ account_list_get_nth ( guint n ) account_t* account_list_get_current( ) { - return __CURRENT_ACCOUNT; + return account_list_get_by_id( __CURRENT_ACCOUNT_ID ); } void account_list_set_current_id(const gchar * accountID) { - __CURRENT_ACCOUNT = account_list_get_by_id(g_strdup(accountID)); + __CURRENT_ACCOUNT_ID = g_strdup(accountID); } void account_list_set_current_pos( guint n) { - __CURRENT_ACCOUNT = account_list_get_nth(n); + __CURRENT_ACCOUNT_ID = account_list_get_nth(n)->accountID; } const gchar * account_state_name(account_state_t s) diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c index 526d0103aa..2de7fe6775 100644 --- a/sflphone-gtk/src/actions.c +++ b/sflphone-gtk/src/actions.c @@ -194,8 +194,8 @@ sflphone_init() { dbus_register(getpid(), "Gtk+ Client"); sflphone_fill_account_list(); - sflphone_set_current_account(); sflphone_fill_codec_list(); + sflphone_set_current_account(); return TRUE; } } @@ -568,16 +568,16 @@ sflphone_keypad( guint keyval, gchar * key) void sflphone_place_call ( call_t * c ) { - //status_bar_display_account(c); if(c->state == CALL_STATE_DIALING) { account_t * current = account_list_get_current(); if( current ) { - if(strcmp(g_hash_table_lookup( current->properties, "Status"),"REGISTERED")==0) + if(g_strcasecmp(g_hash_table_lookup( current->properties, "Status"),"REGISTERED")==0) { // OK, everything alright - the call is made with the current account c -> accountID = current -> accountID; + status_bar_display_account(c); dbus_place_call(c); } else @@ -588,19 +588,21 @@ sflphone_place_call ( call_t * c ) for( pos = 1 ; pos < account_list_get_size() ; pos++ ){ current = account_list_get_nth(pos); if( current ){ - if( strcmp(g_hash_table_lookup( current->properties, "Status"),"REGISTERED")==0 ){ - // notify_switch_account(); + if( g_strcasecmp(g_hash_table_lookup( current->properties, "Status"),"REGISTERED")==0 ){ + notify_switch_account( current ); //main_warning_error_message(_("Switch account.")); c -> accountID = current -> accountID; + status_bar_display_account(c); dbus_place_call(c); break; } } } + notify_no_registered_accounts(); } } else{ - // notify_no_accounts(); + notify_no_accounts(); main_window_error_message(_("There is no accounts to make this call with.")); } } -- GitLab