diff --git a/cli/mmcli-modem-voice.c b/cli/mmcli-modem-voice.c index f1d24e16..e1f1426a 100644 --- a/cli/mmcli-modem-voice.c +++ b/cli/mmcli-modem-voice.c @@ -50,6 +50,7 @@ static Context *ctx; static gboolean list_flag; static gchar *create_str; static gchar *delete_str; +static gboolean hold_and_accept_flag; static gboolean hangup_and_accept_flag; static GOptionEntry entries[] = { @@ -65,6 +66,10 @@ static GOptionEntry entries[] = { "Delete a call from a given modem", "[PATH|INDEX]" }, + { "voice-hold-and-accept", 0, 0, G_OPTION_ARG_NONE, &hold_and_accept_flag, + "Places all active calls in hold and accepts the next waiting or held call", + NULL + }, { "voice-hangup-and-accept", 0, 0, G_OPTION_ARG_NONE, &hangup_and_accept_flag, "Hangs up all active calls and accepts the next waiting or held call", NULL @@ -99,6 +104,7 @@ mmcli_modem_voice_options_enabled (void) n_actions = (list_flag + !!create_str + !!delete_str + + hold_and_accept_flag + hangup_and_accept_flag); if (n_actions > 1) { @@ -206,6 +212,31 @@ hangup_and_accept_ready (MMModemVoice *modem, mmcli_async_operation_done (); } +static void +hold_and_accept_process_reply (const GError *error) +{ + if (error) { + g_printerr ("error: couldn't hold and accept: '%s'\n", + error->message); + exit (EXIT_FAILURE); + } + + g_print ("operation successful\n"); +} + +static void +hold_and_accept_ready (MMModemVoice *modem, + GAsyncResult *result, + gpointer nothing) +{ + GError *error = NULL; + + mm_modem_voice_hold_and_accept_finish (modem, result, &error); + hold_and_accept_process_reply (error); + + mmcli_async_operation_done (); +} + static void list_process_reply (GList *result, const GError *error) @@ -365,6 +396,16 @@ get_modem_ready (GObject *source, return; } + /* Request to hold and accept? */ + if (hold_and_accept_flag) { + g_debug ("Asynchronously holding and accepting next call..."); + mm_modem_voice_hold_and_accept (ctx->modem_voice, + ctx->cancellable, + (GAsyncReadyCallback)hold_and_accept_ready, + NULL); + return; + } + /* Request to hangup and accept? */ if (hangup_and_accept_flag) { g_debug ("Asynchronously hanging up and accepting next call..."); @@ -471,6 +512,14 @@ mmcli_modem_voice_run_synchronous (GDBusConnection *connection) return; } + /* Request to hold and accept? */ + if (hold_and_accept_flag) { + g_debug ("Synchronously holding and accepting call..."); + mm_modem_voice_hold_and_accept_sync (ctx->modem_voice, NULL, &error); + hold_and_accept_process_reply (error); + return; + } + /* Request to hangup and accept? */ if (hangup_and_accept_flag) { g_debug ("Synchronously hanging up and accepting call..."); diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt index 65ba689d..a2087f38 100644 --- a/docs/reference/libmm-glib/libmm-glib-sections.txt +++ b/docs/reference/libmm-glib/libmm-glib-sections.txt @@ -1015,6 +1015,9 @@ mm_modem_voice_list_calls_sync mm_modem_voice_hangup_and_accept mm_modem_voice_hangup_and_accept_finish mm_modem_voice_hangup_and_accept_sync +mm_modem_voice_hold_and_accept +mm_modem_voice_hold_and_accept_finish +mm_modem_voice_hold_and_accept_sync MMModemVoiceClass MMModemVoicePrivate @@ -2841,6 +2844,9 @@ mm_gdbus_modem_voice_call_list_calls_sync mm_gdbus_modem_voice_call_hangup_and_accept mm_gdbus_modem_voice_call_hangup_and_accept_finish mm_gdbus_modem_voice_call_hangup_and_accept_sync +mm_gdbus_modem_voice_call_hold_and_accept +mm_gdbus_modem_voice_call_hold_and_accept_finish +mm_gdbus_modem_voice_call_hold_and_accept_sync mm_gdbus_modem_voice_set_calls mm_gdbus_modem_voice_emit_call_added @@ -2849,6 +2855,7 @@ mm_gdbus_modem_voice_complete_create_call mm_gdbus_modem_voice_complete_delete_call mm_gdbus_modem_voice_complete_list_calls mm_gdbus_modem_voice_complete_hangup_and_accept +mm_gdbus_modem_voice_complete_hold_and_accept mm_gdbus_modem_voice_interface_info mm_gdbus_modem_voice_override_properties diff --git a/introspection/org.freedesktop.ModemManager1.Modem.Voice.xml b/introspection/org.freedesktop.ModemManager1.Modem.Voice.xml index 37b70260..b6c16f13 100644 --- a/introspection/org.freedesktop.ModemManager1.Modem.Voice.xml +++ b/introspection/org.freedesktop.ModemManager1.Modem.Voice.xml @@ -63,6 +63,23 @@ + + +