libmm-glib,modem-messaging: use helper macros to manage the monitored properties
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user