diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 818ab4fd62852690bd7ee9824e04923eec762d17..7e69cabc3bb514c2a4bbd528752779117caa30ed 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -848,16 +848,25 @@ sflphone_detach_participant() void sflphone_join_participant(const gchar* sel_callID, const gchar* drag_callID) { - DEBUG("sflphone join participant from conference"); + DEBUG("sflphone join participants %s and %s", sel_callID, drag_callID); + dbus_join_participant(sel_callID, drag_callID); } + + void +sflphone_add_participant(const gchar* callID, const gchar* confID) +{ + DEBUG("sflphone add participant %s to conference %s", callID, confID); + + dbus_add_participant(callID, confID); +} + void sflphone_add_conference() { DEBUG("sflphone add a conference to tree view"); - // dbus_join_participant(selected_call, dragged_call); } diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h index bdddd5bf7e13a336fdfa3e227fd8db0766eccbd1..975aead4c2640429a9ef747c8d7087b30302c631 100644 --- a/sflphone-client-gnome/src/actions.h +++ b/sflphone-client-gnome/src/actions.h @@ -182,4 +182,8 @@ void sflphone_fill_history (void); void sflphone_save_history (void); +void sflphone_join_participant(const gchar* sel_callID, const gchar* drag_callID); + +void sflphone_add_participant(const gchar* callID, const gchar* confID); + #endif diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 3e0725ea315fdef1f5549323e0e9df70ffd9a2c4..db5b7aa20c86d62c93980edc5a5f71737c778404 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -921,7 +921,7 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) { // TODO: dragged a single call on a conference - sflphone_join_participant(selected_call_id, dragged_call_id); + sflphone_add_participant(selected_call_id, dragged_call_id); } else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) { diff --git a/sflphone-client-gnome/src/dbus/callmanager-introspec.xml b/sflphone-client-gnome/src/dbus/callmanager-introspec.xml index 82985df2aa9fe4f6e39c2ea33eb1c7cdd49f20ea..e5632590c5dcfa6e848cb3e1b63cb8d2d40f3a33 100644 --- a/sflphone-client-gnome/src/dbus/callmanager-introspec.xml +++ b/sflphone-client-gnome/src/dbus/callmanager-introspec.xml @@ -126,6 +126,7 @@ </signal> <signal name="conferenceChanged"> + <arg type="s" name="confID" direction="out"/> </signal> <method name="getParticipantList"> diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index eb8079cf6a80976bca32e6752f62b244ec993c1d..f0c939b560378415432387f8730a6ce73e0716b8 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -205,6 +205,7 @@ call_state_cb (DBusGProxy *proxy UNUSED, static void conference_changed_cb (DBusGProxy *proxy UNUSED, + const gchar* confID, void * foo UNUSED ) { DEBUG ("Conference changed\n"); @@ -402,7 +403,7 @@ dbus_connect () dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID); dbus_g_proxy_add_signal (callManagerProxy, - "conferenceChanged", G_TYPE_INVALID); + "conferenceChanged", G_TYPE_STRING, G_TYPE_INVALID); dbus_g_proxy_connect_signal (callManagerProxy, "conferenceChanged", G_CALLBACK(conference_changed_cb), NULL, NULL); @@ -1316,6 +1317,27 @@ dbus_join_participant(const gchar* sel_callID, const gchar* drag_callID) } + +dbus_add_participant(const gchar* callID, const gchar* confID) +{ + + DEBUG("dbus_add_participant %s and %s\n", callID, confID); + + GError* error = NULL; + + org_sflphone_SFLphone_CallManager_add_participant ( + callManagerProxy, + callID, + confID, + &error); + if(error) + { + g_error_free(error); + } + +} + + void dbus_detach_participant(const callable_obj_t * c) { diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index 9a7c0b8d213421fe0b6e4295047955210848faa0..46c0a315078e6a7a2f05446c6016bc43ef9968c1 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -449,7 +449,7 @@ void dbus_set_stun_server( gchar* server); gint dbus_stun_is_enabled (void); void dbus_enable_stun (void); -void dbus_add_participant(const callable_obj_t * c); +void dbus_add_participant(const gchar* callID, const gchar* confID); void dbus_set_record (const callable_obj_t * c); diff --git a/sflphone-common/src/dbus/callmanager-introspec.xml b/sflphone-common/src/dbus/callmanager-introspec.xml index f2acd1232f587a0315f4f3587c10f7c01ec66242..f5770851db6c3b2c697a30d0e67063088e222839 100644 --- a/sflphone-common/src/dbus/callmanager-introspec.xml +++ b/sflphone-common/src/dbus/callmanager-introspec.xml @@ -126,6 +126,7 @@ </signal> <signal name="conferenceChanged"> + <arg type="s" name="confID" direction="out"/> </signal> <method name="getParticipantList"> diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 6ed3d43b4540ca4f027adf4e2b9df0e8407997b9..f5ec73d9029f09da188c7d2f68aeb6c28c62d3fe 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -743,7 +743,10 @@ ManagerImpl::addParticipant(const CallID& call_id, const CallID& conference_id) _debug("ManagerImpl::addParticipant(%s, %s)\n", call_id.c_str(), conference_id.c_str()); // _debug(" Current call ID %s\n", getCurrentCallId().c_str()); + std::map<std::string, std::string> call_details = getCallDetails(call_id); + ConferenceMap::iterator iter = _conferencemap.find(conference_id); + std::map<std::string, std::string>::iterator iter_details; if(iter == _conferencemap.end()) { @@ -762,7 +765,20 @@ ManagerImpl::addParticipant(const CallID& call_id, const CallID& conference_id) _conferencecall.insert(pair<CallID, Conference*>(call_id, conf)); - answerCall(call_id); + iter_details = call_details.find("CALL_STATE"); + + if (iter_details->second == "HOLD") + { + _debug(" OFFHOLD %s\n", call_id.c_str()); + offHoldCall(call_id); + } + else if(iter_details->second == "INCOMING") + { + _debug(" ANSWER %s\n", call_id.c_str()); + answerCall(call_id); + } + + _dbus->getCallManager()->conferenceChanged(conference_id); } }