From 30c4e90499a8ad3b8fd6c21e5b0934738b04f470 Mon Sep 17 00:00:00 2001 From: Evangelos Ribeiro Tzaras Date: Thu, 3 Feb 2022 18:52:52 +0100 Subject: [PATCH] ui-call-data: Store origin id and adapt to changes --- src/calls-manager.c | 4 +++- src/calls-ui-call-data.c | 45 ++++++++++++++++++++++++++++++++++++++-- src/calls-ui-call-data.h | 4 +++- tests/test-ringer.c | 4 ++-- tests/test-ui-call.c | 3 ++- 5 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/calls-manager.c b/src/calls-manager.c index f0fc9f8..31ee485 100644 --- a/src/calls-manager.c +++ b/src/calls-manager.c @@ -243,12 +243,14 @@ static void add_call (CallsManager *self, CallsCall *call, CallsOrigin *origin) { CallsUiCallData *call_data; + g_autofree char *origin_id = NULL; g_return_if_fail (CALLS_IS_MANAGER (self)); g_return_if_fail (CALLS_IS_ORIGIN (origin)); g_return_if_fail (CALLS_IS_CALL (call)); - call_data = calls_ui_call_data_new (call); + origin_id = calls_origin_get_id (origin); + call_data = calls_ui_call_data_new (call, origin_id); g_hash_table_insert (self->calls, call, call_data); /* TODO get rid of SIGNAL_CALL_ADD signal */ diff --git a/src/calls-ui-call-data.c b/src/calls-ui-call-data.c index cc6a2a4..80432f4 100644 --- a/src/calls-ui-call-data.c +++ b/src/calls-ui-call-data.c @@ -32,6 +32,7 @@ enum { PROP_0, PROP_CALL, + PROP_ORIGIN_ID, PROP_INBOUND, PROP_PROTOCOL, PROP_DISPLAY_NAME, @@ -66,6 +67,7 @@ struct _CallsUiCallData guint timer_id; CuiCallState state; + char *origin_id; gboolean silenced; gboolean ui_active; /* whether a UI should be shown (or the ringer should ring) */ @@ -420,6 +422,10 @@ calls_ui_call_data_set_property (GObject *object, set_call_data (self, g_value_dup_object (value)); break; + case PROP_ORIGIN_ID: + self->origin_id = g_value_dup_string (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -441,6 +447,10 @@ calls_ui_call_data_get_property (GObject *object, g_value_set_object (value, self->call); break; + case PROP_ORIGIN_ID: + g_value_set_string (value, calls_ui_call_data_get_origin_id (self)); + break; + case PROP_INBOUND: g_value_set_boolean (value, calls_ui_call_data_get_inbound (self)); break; @@ -498,6 +508,8 @@ calls_ui_call_data_dispose (GObject *object) g_clear_object (&self->call); g_clear_object (&self->best_match); + g_clear_pointer (&self->origin_id, g_free); + g_clear_handle_id (&self->timer_id, g_source_remove); g_clear_pointer (&self->timer, g_timer_destroy); @@ -529,6 +541,16 @@ calls_ui_call_data_class_init (CallsUiCallDataClass *klass) g_object_class_install_property (object_class, PROP_CALL, props[PROP_CALL]); + props[PROP_ORIGIN_ID] = + g_param_spec_string ("origin-id", + "Origin ID", + "ID of the origin used for the call", + NULL, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + + g_object_class_install_property (object_class, PROP_ORIGIN_ID, props[PROP_ORIGIN_ID]); + props[PROP_INBOUND] = g_param_spec_boolean ("inbound", "Inbound", @@ -606,9 +628,13 @@ calls_ui_call_data_class_init (CallsUiCallDataClass *klass) } CallsUiCallData * -calls_ui_call_data_new (CallsCall *call) +calls_ui_call_data_new (CallsCall *call, + const char *origin_id) { - return g_object_new (CALLS_TYPE_UI_CALL_DATA, "call", call, NULL); + return g_object_new (CALLS_TYPE_UI_CALL_DATA, + "call", call, + "origin-id", origin_id, + NULL); } /** @@ -673,6 +699,21 @@ calls_ui_call_data_get_call_type (CallsUiCallData *self) return calls_call_get_call_type (self->call); } +/** + * calls_ui_call_data_get_origin_id: + * @self: a #CallsUiCallData + * + * Returns: (transfer none): The id of the origin this call was placed from + * or %NULL, if unknown. + */ +const char * +calls_ui_call_data_get_origin_id (CallsUiCallData *self) +{ + g_return_val_if_fail (CALLS_IS_UI_CALL_DATA (self), NULL); + + return self->origin_id; +} + /** * calls_call_state_to_cui_call_state: * @state: A #CallsCallState diff --git a/src/calls-ui-call-data.h b/src/calls-ui-call-data.h index 8ca6be9..018fa84 100644 --- a/src/calls-ui-call-data.h +++ b/src/calls-ui-call-data.h @@ -35,11 +35,13 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (CallsUiCallData, calls_ui_call_data, CALLS, UI_CALL_DATA, GObject) -CallsUiCallData *calls_ui_call_data_new (CallsCall *call); +CallsUiCallData *calls_ui_call_data_new (CallsCall *call, + const char *origin_id); void calls_ui_call_data_silence_ring (CallsUiCallData *self); gboolean calls_ui_call_data_get_silenced (CallsUiCallData *self); gboolean calls_ui_call_data_get_ui_active (CallsUiCallData *self); CallsCallType calls_ui_call_data_get_call_type (CallsUiCallData *self); +const char *calls_ui_call_data_get_origin_id (CallsUiCallData *self); CuiCallState calls_call_state_to_cui_call_state (CallsCallState state); diff --git a/tests/test-ringer.c b/tests/test-ringer.c index 992fcf5..b8fe5c3 100644 --- a/tests/test-ringer.c +++ b/tests/test-ringer.c @@ -190,9 +190,9 @@ setup_test_data (void **state) data->manager = calls_manager_get_default (); data->ringer = calls_ringer_new (); data->call_one = calls_mock_call_new (); - data->ui_call_one = calls_ui_call_data_new (CALLS_CALL (data->call_one)); + data->ui_call_one = calls_ui_call_data_new (CALLS_CALL (data->call_one), NULL); data->call_two = calls_mock_call_new (); - data->ui_call_two = calls_ui_call_data_new (CALLS_CALL (data->call_two)); + data->ui_call_two = calls_ui_call_data_new (CALLS_CALL (data->call_two), NULL); data->loop = g_main_loop_new (NULL, FALSE); *state = data; diff --git a/tests/test-ui-call.c b/tests/test-ui-call.c index 98048de..4dd73f1 100644 --- a/tests/test-ui-call.c +++ b/tests/test-ui-call.c @@ -53,11 +53,12 @@ test_cui_call_properties (void) g_assert_true (CALLS_IS_CALL (mock_call)); call = CALLS_CALL (mock_call); - ui_call = calls_ui_call_data_new (call); + ui_call = calls_ui_call_data_new (call, "test-id"); g_assert_true (CUI_IS_CALL (ui_call)); cui_call = CUI_CALL (ui_call); + g_assert_cmpstr (calls_ui_call_data_get_origin_id (ui_call), ==, "test-id"); g_assert_true (calls_call_get_id (call) == cui_call_get_id (cui_call)); g_assert_true (calls_call_get_name (call) == cui_call_get_display_name (cui_call)); g_assert_true (calls_call_state_to_cui_call_state (calls_call_get_state (call)) ==