libmm-glib,modem-messaging: use helper macros to manage the monitored properties

This commit is contained in:
Aleksander Morgado
2021-07-01 23:38:04 +02:00
parent ccefbbc0c6
commit 434d7be3f2
+8 -97
View File
@@ -45,9 +45,7 @@ struct _MMModemMessagingPrivate {
/* Common mutex to sync access */
GMutex mutex;
/* Supported Storage */
guint supported_storages_id;
GArray *supported_storages;
PROPERTY_ARRAY_DECLARE (supported_storages)
};
/*****************************************************************************/
@@ -98,73 +96,6 @@ mm_modem_messaging_dup_path (MMModemMessaging *self)
/*****************************************************************************/
static void
supported_storages_updated (MMModemMessaging *self,
GParamSpec *pspec)
{
g_mutex_lock (&self->priv->mutex);
{
GVariant *dictionary;
if (self->priv->supported_storages)
g_array_unref (self->priv->supported_storages);
dictionary = mm_gdbus_modem_messaging_get_supported_storages (MM_GDBUS_MODEM_MESSAGING (self));
self->priv->supported_storages = (dictionary ?
mm_common_sms_storages_variant_to_garray (dictionary) :
NULL);
}
g_mutex_unlock (&self->priv->mutex);
}
static gboolean
ensure_internal_supported_storages (MMModemMessaging *self,
MMSmsStorage **dup_storages,
guint *dup_storages_n)
{
gboolean ret;
g_mutex_lock (&self->priv->mutex);
{
/* If this is the first time ever asking for the array, setup the
* update listener and the initial array, if any. */
if (!self->priv->supported_storages_id) {
GVariant *dictionary;
dictionary = mm_gdbus_modem_messaging_dup_supported_storages (MM_GDBUS_MODEM_MESSAGING (self));
if (dictionary) {
self->priv->supported_storages = mm_common_sms_storages_variant_to_garray (dictionary);
g_variant_unref (dictionary);
}
/* No need to clear this signal connection when freeing self */
self->priv->supported_storages_id =
g_signal_connect (self,
"notify::supported-storages",
G_CALLBACK (supported_storages_updated),
NULL);
}
if (!self->priv->supported_storages)
ret = FALSE;
else {
ret = TRUE;
if (dup_storages && dup_storages_n) {
*dup_storages_n = self->priv->supported_storages->len;
if (self->priv->supported_storages->len > 0) {
*dup_storages = g_malloc (sizeof (MMSmsStorage) * self->priv->supported_storages->len);
memcpy (*dup_storages, self->priv->supported_storages->data, sizeof (MMSmsStorage) * self->priv->supported_storages->len);
} else
*dup_storages = NULL;
}
}
}
g_mutex_unlock (&self->priv->mutex);
return ret;
}
/**
* mm_modem_messaging_get_supported_storages:
* @self: A #MMModem.
@@ -179,17 +110,6 @@ ensure_internal_supported_storages (MMModemMessaging *self,
*
* Since: 1.0
*/
gboolean
mm_modem_messaging_get_supported_storages (MMModemMessaging *self,
MMSmsStorage **storages,
guint *n_storages)
{
g_return_val_if_fail (MM_IS_MODEM_MESSAGING (self), FALSE);
g_return_val_if_fail (storages != NULL, FALSE);
g_return_val_if_fail (n_storages != NULL, FALSE);
return ensure_internal_supported_storages (self, storages, n_storages);
}
/**
* mm_modem_messaging_peek_supported_storages:
@@ -204,22 +124,11 @@ mm_modem_messaging_get_supported_storages (MMModemMessaging *self,
*
* Since: 1.0
*/
gboolean
mm_modem_messaging_peek_supported_storages (MMModemMessaging *self,
const MMSmsStorage **storages,
guint *n_storages)
{
g_return_val_if_fail (MM_IS_MODEM_MESSAGING (self), FALSE);
g_return_val_if_fail (storages != NULL, FALSE);
g_return_val_if_fail (n_storages != NULL, FALSE);
if (!ensure_internal_supported_storages (self, NULL, NULL))
return FALSE;
*n_storages = self->priv->supported_storages->len;
*storages = (MMSmsStorage *)self->priv->supported_storages->data;
return TRUE;
}
PROPERTY_ARRAY_DEFINE (supported_storages,
ModemMessaging, modem_messaging, MODEM_MESSAGING,
MMSmsStorage,
mm_common_sms_storages_variant_to_garray)
/*****************************************************************************/
@@ -738,6 +647,8 @@ mm_modem_messaging_init (MMModemMessaging *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_MODEM_MESSAGING, MMModemMessagingPrivate);
g_mutex_init (&self->priv->mutex);
PROPERTY_INITIALIZE (supported_storages, "supported-storages")
}
static void
@@ -747,7 +658,7 @@ finalize (GObject *object)
g_mutex_clear (&self->priv->mutex);
g_clear_pointer (&self->priv->supported_storages, g_array_unref);
PROPERTY_ARRAY_FINALIZE (supported_storages)
G_OBJECT_CLASS (mm_modem_messaging_parent_class)->finalize (object);
}