From 6527ea095492087f91bf4a947471b73eaaa48c99 Mon Sep 17 00:00:00 2001 From: Tristan Matthews <tristan.matthews@savoirfairelinux.com> Date: Wed, 6 Mar 2013 12:02:14 -0500 Subject: [PATCH] * #21210: dbus: added isValidCall method This can be used to query whether a callID exists before trying to get lots of information on it. This avoids false positive error messages as well as DBus traffic. --- daemon/src/dbus/callmanager-introspec.xml | 16 ++++++++++++++++ daemon/src/dbus/callmanager.cpp | 6 ++++++ daemon/src/dbus/callmanager.h | 1 + gnome/src/contacts/calltree.c | 16 +++++++++++++--- gnome/src/dbus/callmanager-introspec.xml | 16 ++++++++++++++++ gnome/src/dbus/dbus.c | 11 +++++++++++ gnome/src/dbus/dbus.h | 2 ++ 7 files changed, 65 insertions(+), 3 deletions(-) diff --git a/daemon/src/dbus/callmanager-introspec.xml b/daemon/src/dbus/callmanager-introspec.xml index 07630ac456..ff8a7121df 100644 --- a/daemon/src/dbus/callmanager-introspec.xml +++ b/daemon/src/dbus/callmanager-introspec.xml @@ -160,6 +160,22 @@ </arg> </method> + <method name="isValidCall" tp:name-for-bindings="isValidCall"> + <tp:docstring> + Tests whether or not a call exists. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="b" name="isValid" direction="out"> + <tp:docstring> + Returns true is the call has already been created/can be retrieved. False otherwise. + </tp:docstring> + </arg> + </method> + <method name="startTone" tp:name-for-bindings="startTone"> <tp:docstring> Start audio stream and play tone. diff --git a/daemon/src/dbus/callmanager.cpp b/daemon/src/dbus/callmanager.cpp index 465c2014cc..2f8464a7f5 100644 --- a/daemon/src/dbus/callmanager.cpp +++ b/daemon/src/dbus/callmanager.cpp @@ -288,6 +288,12 @@ CallManager::getCallList() return Manager::instance().getCallList(); } +bool +CallManager::isValidCall(const std::string &callID) +{ + return Manager::instance().isValidCall(callID); +} + void CallManager::playDTMF(const std::string& key) { diff --git a/daemon/src/dbus/callmanager.h b/daemon/src/dbus/callmanager.h index 367ad8e92f..0c04eca075 100644 --- a/daemon/src/dbus/callmanager.h +++ b/daemon/src/dbus/callmanager.h @@ -85,6 +85,7 @@ class CallManager void attendedTransfer(const std::string& transferID, const std::string& targetID); std::map< std::string, std::string > getCallDetails(const std::string& callID); std::vector< std::string > getCallList(); + bool isValidCall(const std::string &callID); /* Conference related methods */ void joinParticipant(const std::string& sel_callID, const std::string& drag_callID); diff --git a/gnome/src/contacts/calltree.c b/gnome/src/contacts/calltree.c index 7b76dd5c04..501f8dbe10 100644 --- a/gnome/src/contacts/calltree.c +++ b/gnome/src/contacts/calltree.c @@ -624,12 +624,22 @@ update_call(GtkTreeModel *model, G_GNUC_UNUSED GtkTreePath *path, GtkTreeIter *i /* Update text */ gchar *description = NULL; - gchar *audio_codec = call_get_audio_codec(call); + + gchar *audio_codec; + gchar *video_codec; + + /* Don't get codec names if call does not yet exist */ + if (dbus_is_valid_call(call->_callID)) { + audio_codec = call_get_audio_codec(call); #ifdef SFL_VIDEO - gchar *video_codec = call_get_video_codec(call); + video_codec = call_get_video_codec(call); #else - gchar *video_codec = g_strdup(""); + video_codec = g_strdup(""); #endif + } else { + audio_codec = g_strdup(""); + video_codec = g_strdup(""); + } if (call->_state == CALL_STATE_TRANSFER) description = calltree_display_call_info(call, DISPLAY_TYPE_CALL_TRANSFER, "", ""); diff --git a/gnome/src/dbus/callmanager-introspec.xml b/gnome/src/dbus/callmanager-introspec.xml index 07630ac456..ff8a7121df 100644 --- a/gnome/src/dbus/callmanager-introspec.xml +++ b/gnome/src/dbus/callmanager-introspec.xml @@ -160,6 +160,22 @@ </arg> </method> + <method name="isValidCall" tp:name-for-bindings="isValidCall"> + <tp:docstring> + Tests whether or not a call exists. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="b" name="isValid" direction="out"> + <tp:docstring> + Returns true is the call has already been created/can be retrieved. False otherwise. + </tp:docstring> + </arg> + </method> + <method name="startTone" tp:name-for-bindings="startTone"> <tp:docstring> Start audio stream and play tone. diff --git a/gnome/src/dbus/dbus.c b/gnome/src/dbus/dbus.c index 68e688856a..302d1466be 100644 --- a/gnome/src/dbus/dbus.c +++ b/gnome/src/dbus/dbus.c @@ -1786,6 +1786,17 @@ dbus_get_call_details(const gchar *callID) return details; } +gboolean +dbus_is_valid_call(const gchar *callID) +{ + GError *error = NULL; + gboolean valid = FALSE; + org_sflphone_SFLphone_CallManager_is_valid_call(call_proxy, callID, &valid, &error); + check_error(error); + + return valid; +} + gchar ** dbus_get_call_list(void) { diff --git a/gnome/src/dbus/dbus.h b/gnome/src/dbus/dbus.h index 8d574b7411..f5e1ccaf06 100644 --- a/gnome/src/dbus/dbus.h +++ b/gnome/src/dbus/dbus.h @@ -500,6 +500,8 @@ gboolean dbus_get_is_recording(const callable_obj_t *); GHashTable *dbus_get_call_details(const gchar *callID); +gboolean dbus_is_valid_call(const gchar *callID); + gchar **dbus_get_call_list(void); GHashTable* dbus_get_conference_details(const gchar *confID); -- GitLab