aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-07-01 23:28:30 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-07-01 23:38:04 +0200
commitb8e939ceaca15d3f8bf1f153f93187f2e4f42ae4 (patch)
tree19bebda493e7c7e6c0366ae8d9fe67ebc0f60e10
parent6372d97e878f1d18cbbb62a809c78e44ee957814 (diff)
libmm-glib,modem-location: use helper macros to manage the monitored properties
-rw-r--r--libmm-glib/mm-modem-location.c188
1 files changed, 42 insertions, 146 deletions
diff --git a/libmm-glib/mm-modem-location.c b/libmm-glib/mm-modem-location.c
index 47e4ec12..9c46b046 100644
--- a/libmm-glib/mm-modem-location.c
+++ b/libmm-glib/mm-modem-location.c
@@ -44,11 +44,12 @@ struct _MMModemLocationPrivate {
/* Common mutex to sync access */
GMutex mutex;
- guint signaled_location_id;
- MMLocation3gpp *signaled_location_3gpp;
- MMLocationGpsNmea *signaled_location_gps_nmea;
- MMLocationGpsRaw *signaled_location_gps_raw;
- MMLocationCdmaBs *signaled_location_cdma_bs;
+ MMLocation3gpp *signaled_3gpp;
+ MMLocationGpsNmea *signaled_gps_nmea;
+ MMLocationGpsRaw *signaled_gps_raw;
+ MMLocationCdmaBs *signaled_cdma_bs;
+
+ PROPERTY_COMMON_DECLARE (signaled_location)
};
/*****************************************************************************/
@@ -1217,81 +1218,32 @@ mm_modem_location_get_gps_refresh_rate (MMModemLocation *self)
/*****************************************************************************/
+/* custom refresh method instead of PROPERTY_OBJECT_DEFINE_REFRESH() */
static void
-signaled_location_updated (MMModemLocation *self,
- GParamSpec *pspec)
+signaled_location_refresh (MMModemLocation *self)
{
- g_mutex_lock (&self->priv->mutex);
- {
- GVariant *dictionary;
-
- g_clear_object (&self->priv->signaled_location_3gpp);
- g_clear_object (&self->priv->signaled_location_gps_nmea);
- g_clear_object (&self->priv->signaled_location_gps_raw);
- g_clear_object (&self->priv->signaled_location_cdma_bs);
-
- dictionary = mm_gdbus_modem_location_get_location (MM_GDBUS_MODEM_LOCATION (self));
- if (dictionary) {
- g_autoptr(GError) error = NULL;
-
- if (!build_locations (dictionary,
- &self->priv->signaled_location_3gpp,
- &self->priv->signaled_location_gps_nmea,
- &self->priv->signaled_location_gps_raw,
- &self->priv->signaled_location_cdma_bs,
- &error))
- g_warning ("Invalid signaled location received: %s", error->message);
- }
- }
- g_mutex_unlock (&self->priv->mutex);
+ g_autoptr(GVariant) variant = NULL;
+ g_autoptr(GError) inner_error = NULL;
+
+ g_clear_object (&self->priv->signaled_3gpp);
+ g_clear_object (&self->priv->signaled_gps_nmea);
+ g_clear_object (&self->priv->signaled_gps_raw);
+ g_clear_object (&self->priv->signaled_cdma_bs);
+
+ variant = mm_gdbus_modem_location_dup_location (MM_GDBUS_MODEM_LOCATION (self));
+ if (!variant)
+ return;
+
+ if (!build_locations (variant,
+ &self->priv->signaled_3gpp,
+ &self->priv->signaled_gps_nmea,
+ &self->priv->signaled_gps_raw,
+ &self->priv->signaled_cdma_bs,
+ &inner_error))
+ g_warning ("Invalid signaled location received: %s", inner_error->message);
}
-static void
-ensure_internal_signaled_location (MMModemLocation *self,
- MMLocation3gpp **dupl_location_3gpp,
- MMLocationGpsNmea **dupl_location_gps_nmea,
- MMLocationGpsRaw **dupl_location_gps_raw,
- MMLocationCdmaBs **dupl_location_cdma_bs)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- /* If this is the first time ever asking for the object, setup the
- * update listener and the initial object, if any. */
- if (!self->priv->signaled_location_id) {
- g_autoptr(GVariant) dictionary = NULL;
-
- dictionary = mm_gdbus_modem_location_dup_location (MM_GDBUS_MODEM_LOCATION (self));
- if (dictionary) {
- g_autoptr(GError) error = NULL;
-
- if (!build_locations (dictionary,
- &self->priv->signaled_location_3gpp,
- &self->priv->signaled_location_gps_nmea,
- &self->priv->signaled_location_gps_raw,
- &self->priv->signaled_location_cdma_bs,
- &error))
- g_warning ("Invalid initial signaled location: %s", error->message);
- }
-
- /* No need to clear this signal connection when freeing self */
- self->priv->signaled_location_id =
- g_signal_connect (self,
- "notify::location",
- G_CALLBACK (signaled_location_updated),
- NULL);
- }
-
- if (dupl_location_3gpp && self->priv->signaled_location_3gpp)
- *dupl_location_3gpp = g_object_ref (self->priv->signaled_location_3gpp);
- if (dupl_location_gps_nmea && self->priv->signaled_location_gps_nmea)
- *dupl_location_gps_nmea = g_object_ref (self->priv->signaled_location_gps_nmea);
- if (dupl_location_gps_raw && self->priv->signaled_location_gps_raw)
- *dupl_location_gps_raw = g_object_ref (self->priv->signaled_location_gps_raw);
- if (dupl_location_cdma_bs && self->priv->signaled_location_cdma_bs)
- *dupl_location_cdma_bs = g_object_ref (self->priv->signaled_location_cdma_bs);
- }
- g_mutex_unlock (&self->priv->mutex);
-}
+PROPERTY_DEFINE_UPDATED (signaled_location, ModemLocation)
/**
* mm_modem_location_peek_signaled_3gpp:
@@ -1315,14 +1267,8 @@ ensure_internal_signaled_location (MMModemLocation *self,
*
* Since: 1.18
*/
-MMLocation3gpp *
-mm_modem_location_peek_signaled_3gpp (MMModemLocation *self)
-{
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
- ensure_internal_signaled_location (self, NULL, NULL, NULL, NULL);
- return self->priv->signaled_location_3gpp;
-}
+PROPERTY_OBJECT_DEFINE_PEEK (signaled_location, signaled_3gpp, ModemLocation, modem_location, MODEM_LOCATION, MMLocation3gpp)
/**
* mm_modem_location_get_signaled_3gpp:
@@ -1346,16 +1292,8 @@ mm_modem_location_peek_signaled_3gpp (MMModemLocation *self)
*
* Since: 1.18
*/
-MMLocation3gpp *
-mm_modem_location_get_signaled_3gpp (MMModemLocation *self)
-{
- MMLocation3gpp *location_3gpp = NULL;
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
-
- ensure_internal_signaled_location (self, &location_3gpp, NULL, NULL, NULL);
- return location_3gpp;
-}
+PROPERTY_OBJECT_DEFINE_GET (signaled_location, signaled_3gpp, ModemLocation, modem_location, MODEM_LOCATION, MMLocation3gpp)
/**
* mm_modem_location_peek_signaled_gps_nmea:
@@ -1381,14 +1319,8 @@ mm_modem_location_get_signaled_3gpp (MMModemLocation *self)
*
* Since: 1.18
*/
-MMLocationGpsNmea *
-mm_modem_location_peek_signaled_gps_nmea (MMModemLocation *self)
-{
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
- ensure_internal_signaled_location (self, NULL, NULL, NULL, NULL);
- return self->priv->signaled_location_gps_nmea;
-}
+PROPERTY_OBJECT_DEFINE_PEEK (signaled_location, signaled_gps_nmea, ModemLocation, modem_location, MODEM_LOCATION, MMLocationGpsNmea)
/**
* mm_modem_location_get_signaled_gps_nmea:
@@ -1414,16 +1346,7 @@ mm_modem_location_peek_signaled_gps_nmea (MMModemLocation *self)
*
* Since: 1.18
*/
-MMLocationGpsNmea *
-mm_modem_location_get_signaled_gps_nmea (MMModemLocation *self)
-{
- MMLocationGpsNmea *location_gps_nmea = NULL;
-
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
-
- ensure_internal_signaled_location (self, NULL, &location_gps_nmea, NULL, NULL);
- return location_gps_nmea;
-}
+PROPERTY_OBJECT_DEFINE_GET (signaled_location, signaled_gps_nmea, ModemLocation, modem_location, MODEM_LOCATION, MMLocationGpsNmea)
/**
* mm_modem_location_peek_signaled_gps_raw:
@@ -1449,14 +1372,8 @@ mm_modem_location_get_signaled_gps_nmea (MMModemLocation *self)
*
* Since: 1.18
*/
-MMLocationGpsRaw *
-mm_modem_location_peek_signaled_gps_raw (MMModemLocation *self)
-{
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
- ensure_internal_signaled_location (self, NULL, NULL, NULL, NULL);
- return self->priv->signaled_location_gps_raw;
-}
+PROPERTY_OBJECT_DEFINE_PEEK (signaled_location, signaled_gps_raw, ModemLocation, modem_location, MODEM_LOCATION, MMLocationGpsRaw)
/**
* mm_modem_location_get_signaled_gps_raw:
@@ -1482,16 +1399,8 @@ mm_modem_location_peek_signaled_gps_raw (MMModemLocation *self)
*
* Since: 1.18
*/
-MMLocationGpsRaw *
-mm_modem_location_get_signaled_gps_raw (MMModemLocation *self)
-{
- MMLocationGpsRaw *location_gps_raw = NULL;
-
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
- ensure_internal_signaled_location (self, NULL, NULL, &location_gps_raw, NULL);
- return location_gps_raw;
-}
+PROPERTY_OBJECT_DEFINE_GET (signaled_location, signaled_gps_raw, ModemLocation, modem_location, MODEM_LOCATION, MMLocationGpsRaw)
/**
* mm_modem_location_peek_signaled_cdma_bs:
@@ -1517,14 +1426,8 @@ mm_modem_location_get_signaled_gps_raw (MMModemLocation *self)
*
* Since: 1.18
*/
-MMLocationCdmaBs *
-mm_modem_location_peek_signaled_cdma_bs (MMModemLocation *self)
-{
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
- ensure_internal_signaled_location (self, NULL, NULL, NULL, NULL);
- return self->priv->signaled_location_cdma_bs;
-}
+PROPERTY_OBJECT_DEFINE_PEEK (signaled_location, signaled_cdma_bs, ModemLocation, modem_location, MODEM_LOCATION, MMLocationCdmaBs)
/**
* mm_modem_location_get_signaled_cdma_bs:
@@ -1550,16 +1453,7 @@ mm_modem_location_peek_signaled_cdma_bs (MMModemLocation *self)
*
* Since: 1.18
*/
-MMLocationCdmaBs *
-mm_modem_location_get_signaled_cdma_bs (MMModemLocation *self)
-{
- MMLocationCdmaBs *location_cdma_bs = NULL;
-
- g_return_val_if_fail (MM_IS_MODEM_LOCATION (self), NULL);
-
- ensure_internal_signaled_location (self, NULL, NULL, NULL, &location_cdma_bs);
- return location_cdma_bs;
-}
+PROPERTY_OBJECT_DEFINE_GET (signaled_location, signaled_cdma_bs, ModemLocation, modem_location, MODEM_LOCATION, MMLocationCdmaBs)
/*****************************************************************************/
@@ -1568,6 +1462,8 @@ mm_modem_location_init (MMModemLocation *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_MODEM_LOCATION, MMModemLocationPrivate);
g_mutex_init (&self->priv->mutex);
+
+ PROPERTY_INITIALIZE (signaled_location, "location")
}
static void
@@ -1577,10 +1473,10 @@ finalize (GObject *object)
g_mutex_clear (&self->priv->mutex);
- g_clear_object (&self->priv->signaled_location_3gpp);
- g_clear_object (&self->priv->signaled_location_gps_nmea);
- g_clear_object (&self->priv->signaled_location_gps_raw);
- g_clear_object (&self->priv->signaled_location_cdma_bs);
+ PROPERTY_OBJECT_FINALIZE (signaled_3gpp)
+ PROPERTY_OBJECT_FINALIZE (signaled_gps_nmea)
+ PROPERTY_OBJECT_FINALIZE (signaled_gps_raw)
+ PROPERTY_OBJECT_FINALIZE (signaled_cdma_bs)
G_OBJECT_CLASS (mm_modem_location_parent_class)->finalize (object);
}