From 7d69d78b70c765e08d1034e92b3dc89a34eecf00 Mon Sep 17 00:00:00 2001 From: Evangelos Ribeiro Tzaras Date: Thu, 25 Mar 2021 20:25:09 +0100 Subject: [PATCH] origin: Add country-code property And add a binding in CallsManager for the default origin --- plugins/dummy/calls-dummy-origin.c | 6 ++++++ plugins/mm/calls-mm-origin.c | 6 ++++++ plugins/ofono/calls-ofono-origin.c | 6 ++++++ plugins/sip/calls-sip-origin.c | 6 ++++++ src/calls-manager.c | 28 +++++++++++++++++++++++++++- src/calls-origin.c | 8 ++++++++ 6 files changed, 59 insertions(+), 1 deletion(-) diff --git a/plugins/dummy/calls-dummy-origin.c b/plugins/dummy/calls-dummy-origin.c index abd4198..da5466b 100644 --- a/plugins/dummy/calls-dummy-origin.c +++ b/plugins/dummy/calls-dummy-origin.c @@ -58,6 +58,7 @@ enum { PROP_NAME, PROP_CALLS, + PROP_COUNTRY_CODE, PROP_LAST_PROP, }; static GParamSpec *props[PROP_LAST_PROP]; @@ -198,6 +199,10 @@ get_property (GObject *object, g_value_set_pointer (value, g_list_copy (self->calls)); break; + case PROP_COUNTRY_CODE: + g_value_set_string (value, NULL); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -252,6 +257,7 @@ calls_dummy_origin_class_init (CallsDummyOriginClass *klass) IMPLEMENTS (PROP_NAME, "name"); IMPLEMENTS (PROP_CALLS, "calls"); + IMPLEMENTS (PROP_COUNTRY_CODE, "country-code"); #undef IMPLEMENTS } diff --git a/plugins/mm/calls-mm-origin.c b/plugins/mm/calls-mm-origin.c index a7de408..2413320 100644 --- a/plugins/mm/calls-mm-origin.c +++ b/plugins/mm/calls-mm-origin.c @@ -66,6 +66,7 @@ enum { PROP_NAME, PROP_CALLS, PROP_MODEM, + PROP_COUNTRY_CODE, PROP_LAST_PROP, }; static GParamSpec *props[PROP_LAST_PROP]; @@ -645,6 +646,10 @@ get_property (GObject *object, g_value_set_pointer(value, g_hash_table_get_values (self->calls)); break; + case PROP_COUNTRY_CODE: + g_value_set_string (value, NULL); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -823,6 +828,7 @@ calls_mm_origin_class_init (CallsMMOriginClass *klass) IMPLEMENTS (PROP_NAME, "name"); IMPLEMENTS (PROP_CALLS, "calls"); + IMPLEMENTS (PROP_COUNTRY_CODE, "country-code"); #undef IMPLEMENTS diff --git a/plugins/ofono/calls-ofono-origin.c b/plugins/ofono/calls-ofono-origin.c index aa41321..605e250 100644 --- a/plugins/ofono/calls-ofono-origin.c +++ b/plugins/ofono/calls-ofono-origin.c @@ -56,6 +56,7 @@ enum { PROP_NAME, PROP_CALLS, PROP_MODEM, + PROP_COUNTRY_CODE, PROP_LAST_PROP, }; static GParamSpec *props[PROP_LAST_PROP]; @@ -161,6 +162,10 @@ get_property (GObject *object, g_value_set_pointer(value, g_hash_table_get_values (self->calls)); break; + case PROP_COUNTRY_CODE: + g_value_set_string (value, NULL); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -558,6 +563,7 @@ calls_ofono_origin_class_init (CallsOfonoOriginClass *klass) IMPLEMENTS (PROP_NAME, "name"); IMPLEMENTS (PROP_CALLS, "calls"); + IMPLEMENTS (PROP_COUNTRY_CODE, "country-code"); #undef IMPLEMENTS diff --git a/plugins/sip/calls-sip-origin.c b/plugins/sip/calls-sip-origin.c index daa889e..4946381 100644 --- a/plugins/sip/calls-sip-origin.c +++ b/plugins/sip/calls-sip-origin.c @@ -104,6 +104,7 @@ enum { PROP_SIP_LOCAL_PORT, PROP_ACC_STATE, PROP_CALLS, + PROP_COUNTRY_CODE, PROP_LAST_PROP, }; static GParamSpec *props[PROP_LAST_PROP]; @@ -889,6 +890,10 @@ calls_sip_origin_get_property (GObject *object, g_value_set_int (value, self->local_port); break; + case PROP_COUNTRY_CODE: + g_value_set_string (value, NULL); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -1060,6 +1065,7 @@ calls_sip_origin_class_init (CallsSipOriginClass *klass) IMPLEMENTS (PROP_NAME, "name"); IMPLEMENTS (PROP_CALLS, "calls"); + IMPLEMENTS (PROP_COUNTRY_CODE, "country-code"); #undef IMPLEMENTS } diff --git a/src/calls-manager.c b/src/calls-manager.c index e9e9da1..2d864c9 100644 --- a/src/calls-manager.c +++ b/src/calls-manager.c @@ -41,6 +41,8 @@ struct _CallsManager CallsOrigin *default_origin; CallsManagerState state; CallsCall *primary_call; + char *country_code; + GBinding *country_code_binding; }; G_DEFINE_TYPE (CallsManager, calls_manager, G_TYPE_OBJECT); @@ -50,6 +52,7 @@ enum { PROP_PROVIDER, PROP_DEFAULT_ORIGIN, PROP_STATE, + PROP_COUNTRY_CODE, PROP_LAST_PROP, }; static GParamSpec *props[PROP_LAST_PROP]; @@ -294,6 +297,10 @@ calls_manager_get_property (GObject *object, g_value_set_enum (value, calls_manager_get_state (self)); break; + case PROP_COUNTRY_CODE: + g_value_set_string (value, self->country_code); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -317,6 +324,11 @@ calls_manager_set_property (GObject *object, calls_manager_set_default_origin (self, g_value_get_object (value)); break; + case PROP_COUNTRY_CODE: + g_free (self->country_code); + self->country_code = g_value_dup_string (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -331,6 +343,7 @@ calls_manager_finalize (GObject *object) g_clear_object (&self->provider); g_clear_pointer (&self->provider_name, g_free); g_clear_object (&self->contacts_provider); + g_clear_pointer (&self->country_code, g_free); G_OBJECT_CLASS (calls_manager_parent_class)->finalize (object); } @@ -427,6 +440,12 @@ calls_manager_class_init (CallsManagerClass *klass) CALLS_TYPE_ORIGIN, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); + props[PROP_COUNTRY_CODE] = g_param_spec_string ("country-code", + "country code", + "The default country code to use", + NULL, + G_PARAM_READWRITE); + g_object_class_install_properties (object_class, PROP_LAST_PROP, props); } @@ -606,10 +625,17 @@ calls_manager_set_default_origin (CallsManager *self, if (self->default_origin == origin) return; + g_clear_pointer (&self->country_code_binding, g_binding_unbind); + g_clear_object (&self->default_origin); - if (origin) + if (origin) { self->default_origin = g_object_ref (origin); + self->country_code_binding = + g_object_bind_property (origin, "country-code", + self, "country-code", + G_BINDING_SYNC_CREATE); + } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEFAULT_ORIGIN]); } diff --git a/src/calls-origin.c b/src/calls-origin.c index 107d2ba..1e7cdfa 100644 --- a/src/calls-origin.c +++ b/src/calls-origin.c @@ -62,6 +62,14 @@ calls_origin_default_init (CallsOriginInterface *iface) "The list of current calls", G_PARAM_READABLE)); + g_object_interface_install_property ( + iface, + g_param_spec_string ("country-code", + "country code", + "The country code of the origin, if any", + NULL, + G_PARAM_READABLE)); + signals[SIGNAL_CALL_ADDED] = g_signal_newv ("call-added", G_TYPE_FROM_INTERFACE (iface),