From 0d7e73ca63307013035439dfd1e92643fb46caef Mon Sep 17 00:00:00 2001 From: purism Date: Thu, 27 Sep 2018 08:42:13 +0000 Subject: [PATCH 1/4] mm-call: Fix mapping of alerting/incoming call states --- src/calls-mm-call.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calls-mm-call.c b/src/calls-mm-call.c index 67dfa88..635bfd5 100644 --- a/src/calls-mm-call.c +++ b/src/calls-mm-call.c @@ -161,8 +161,8 @@ static const struct CallsMMCallStateMap STATE_MAP[] = { { MM_CALL_STATE_##MMENUM, CALLS_CALL_STATE_##CALLSENUM } \ row (DIALING, DIALING), - row (RINGING_OUT, INCOMING), - row (RINGING_IN, ALERTING), + row (RINGING_OUT, ALERTING), + row (RINGING_IN, INCOMING), row (ACTIVE, ACTIVE), row (HELD, HELD), row (WAITING, INCOMING), From 635b3f74b8aaf061c6fa197c7a06c2a980b5a12f Mon Sep 17 00:00:00 2001 From: purism Date: Thu, 27 Sep 2018 08:29:47 +0000 Subject: [PATCH 2/4] mm-origin: Delete remnant disconnected calls on startup --- src/calls-mm-origin.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/calls-mm-origin.c b/src/calls-mm-origin.c index e3636b3..1884462 100644 --- a/src/calls-mm-origin.c +++ b/src/calls-mm-origin.c @@ -182,19 +182,13 @@ delete_call_cb (MMModemVoice *voice, static void -call_state_changed_cb (CallsMMOrigin *self, - CallsCallState state, - CallsCall *call) +delete_call (CallsMMOrigin *self, + CallsMMCall *call) { const gchar *path; struct CallsMMOriginDeleteCallData *data; - if (state != CALLS_CALL_STATE_DISCONNECTED) - { - return; - } - - path = calls_mm_call_get_object_path (CALLS_MM_CALL (call)); + path = calls_mm_call_get_object_path (call); data = g_new0 (struct CallsMMOriginDeleteCallData, 1); data->self = self; @@ -204,10 +198,23 @@ call_state_changed_cb (CallsMMOrigin *self, (self->voice, path, NULL, - (GAsyncReadyCallback) delete_call_cb, + (GAsyncReadyCallback)delete_call_cb, data); } +static void +call_state_changed_cb (CallsMMOrigin *self, + CallsCallState state, + CallsCall *call) +{ + if (state != CALLS_CALL_STATE_DISCONNECTED) + { + return; + } + + delete_call (self, CALLS_MM_CALL (call)); +} + static void add_call (CallsMMOrigin *self, @@ -228,6 +235,12 @@ add_call (CallsMMOrigin *self, g_signal_emit_by_name (CALLS_ORIGIN(self), "call-added", CALLS_CALL(call)); + if (mm_call_get_state (mm_call) == MM_CALL_STATE_TERMINATED) + { + // Delete any remnant disconnected call + delete_call (self, call); + } + g_debug ("Call `%s' added", path); } From 1c37b3939860bbe30cc2a7438146c4f15b0035d2 Mon Sep 17 00:00:00 2001 From: purism Date: Thu, 27 Sep 2018 08:37:14 +0000 Subject: [PATCH 3/4] mm-call,call-display: Add more debugging output for state changes --- src/calls-call-display.c | 1 + src/calls-mm-call.c | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/calls-call-display.c b/src/calls-call-display.c index dc97dcc..a8c3431 100644 --- a/src/calls-call-display.c +++ b/src/calls-call-display.c @@ -177,6 +177,7 @@ call_state_changed_cb (CallsCallDisplay *self, calls_call_state_to_string (state_str, state); gtk_label_set_text (self->status, state_str->str); + g_debug ("Call state changed to `%s'", state_str->str); g_string_free (state_str, TRUE); switch (state) diff --git a/src/calls-mm-call.c b/src/calls-mm-call.c index 635bfd5..744dc46 100644 --- a/src/calls-mm-call.c +++ b/src/calls-mm-call.c @@ -151,22 +151,23 @@ set_disconnect_reason (CallsMMCall *self, struct CallsMMCallStateMap { - MMCallState mm; - CallsCallState calls; + MMCallState mm; + CallsCallState calls; + const gchar *name; }; static const struct CallsMMCallStateMap STATE_MAP[] = { -#define row(MMENUM,CALLSENUM) \ - { MM_CALL_STATE_##MMENUM, CALLS_CALL_STATE_##CALLSENUM } \ +#define row(MMENUM,CALLSENUM) \ + { MM_CALL_STATE_##MMENUM, CALLS_CALL_STATE_##CALLSENUM, #MMENUM } \ - row (DIALING, DIALING), + row (DIALING, DIALING), row (RINGING_OUT, ALERTING), - row (RINGING_IN, INCOMING), - row (ACTIVE, ACTIVE), - row (HELD, HELD), - row (WAITING, INCOMING), - row (TERMINATED, DISCONNECTED), + row (RINGING_IN, INCOMING), + row (ACTIVE, ACTIVE), + row (HELD, HELD), + row (WAITING, INCOMING), + row (TERMINATED, DISCONNECTED), #undef row @@ -191,6 +192,8 @@ state_changed_cb (CallsMMCall *self, { if (map_row->mm == mm_new) { + g_debug ("MM call state changed to `%s'", + map_row->name); change_state (self, map_row->calls); return; } From 9951fbf812176765a02ee2003ff13e92f4176e10 Mon Sep 17 00:00:00 2001 From: purism Date: Thu, 27 Sep 2018 08:46:47 +0000 Subject: [PATCH 4/4] mm-call: Set call state on construction --- src/calls-mm-call.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/calls-mm-call.c b/src/calls-mm-call.c index 744dc46..6c86e7c 100644 --- a/src/calls-mm-call.c +++ b/src/calls-mm-call.c @@ -299,6 +299,7 @@ constructed (GObject *object) GObjectClass *parent_class = g_type_class_peek (G_TYPE_OBJECT); CallsMMCall *self = CALLS_MM_CALL (object); MmGdbusCall *gdbus_call = MM_GDBUS_CALL (self->mm_call); + MMCallState state; g_signal_connect_swapped (gdbus_call, "notify::number", G_CALLBACK (notify_number_cb), self); @@ -307,8 +308,14 @@ constructed (GObject *object) notify_number_cb (self, mm_call_get_number (self->mm_call)); + state = mm_call_get_state (self->mm_call); + state_changed_cb (self, + MM_MODEM_STATE_UNKNOWN, + state, + mm_call_get_state_reason (self->mm_call)); + /* Start outgoing call */ - if (mm_call_get_state (self->mm_call) == MM_CALL_STATE_UNKNOWN + if (state == MM_CALL_STATE_UNKNOWN && mm_call_get_direction (self->mm_call) == MM_CALL_DIRECTION_OUTGOING) { start_call (CALLS_CALL (self));