aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-09-10 16:21:29 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-09-14 07:05:23 +0200
commitb7e1c6d36dd10c6772582196117dc5d0ccefcb08 (patch)
tree7a909d608e2790b87b33cc936f5255063b44bc0f
parentd75bfa2db9aeaa98140249770e919822af88ccaa (diff)
libmm-common: new helpers to work with arrays of `MMSmsStorage' values
-rw-r--r--libmm-common/mm-common-helpers.c61
-rw-r--r--libmm-common/mm-common-helpers.h7
2 files changed, 68 insertions, 0 deletions
diff --git a/libmm-common/mm-common-helpers.c b/libmm-common/mm-common-helpers.c
index 1115cbe5..3f48e2f1 100644
--- a/libmm-common/mm-common-helpers.c
+++ b/libmm-common/mm-common-helpers.c
@@ -72,6 +72,67 @@ mm_common_build_sms_storages_string (const MMSmsStorage *storages,
return g_string_free (str, FALSE);
}
+GArray *
+mm_common_sms_storages_variant_to_garray (GVariant *variant)
+{
+ GArray *array = NULL;
+
+ if (variant) {
+ GVariantIter iter;
+ guint n;
+
+ g_variant_iter_init (&iter, variant);
+ n = g_variant_iter_n_children (&iter);
+
+ if (n > 0) {
+ guint32 storage;
+
+ array = g_array_sized_new (FALSE, FALSE, sizeof (MMSmsStorage), n);
+ while (g_variant_iter_loop (&iter, "u", &storage))
+ g_array_append_val (array, storage);
+ }
+ }
+
+ return array;
+}
+
+MMSmsStorage *
+mm_common_sms_storages_variant_to_array (GVariant *variant,
+ guint *n_storages)
+{
+ GArray *array;
+
+ array = mm_common_sms_storages_variant_to_garray (variant);
+ if (n_storages)
+ *n_storages = array->len;
+ return (MMSmsStorage *) g_array_free (array, FALSE);
+}
+
+GVariant *
+mm_common_sms_storages_array_to_variant (const MMSmsStorage *storages,
+ guint n_storages)
+{
+ GVariantBuilder builder;
+ guint i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+
+ for (i = 0; i < n_storages; i++)
+ g_variant_builder_add_value (&builder,
+ g_variant_new_uint32 ((guint32)storages[i]));
+ return g_variant_builder_end (&builder);
+}
+
+GVariant *
+mm_common_sms_storages_garray_to_variant (GArray *array)
+{
+ if (array)
+ return mm_common_sms_storages_array_to_variant ((const MMSmsStorage *)array->data,
+ array->len);
+
+ return mm_common_sms_storages_array_to_variant (NULL, 0);
+}
+
MMModemMode
mm_common_get_modes_from_string (const gchar *str,
GError **error)
diff --git a/libmm-common/mm-common-helpers.h b/libmm-common/mm-common-helpers.h
index b4fb3431..4203af96 100644
--- a/libmm-common/mm-common-helpers.h
+++ b/libmm-common/mm-common-helpers.h
@@ -41,6 +41,13 @@ MMBearerIpFamily mm_common_get_ip_type_from_string (const gchar *str,
MMSmsStorage mm_common_get_sms_storage_from_string (const gchar *str,
GError **error);
+GArray *mm_common_sms_storages_variant_to_garray (GVariant *variant);
+MMSmsStorage *mm_common_sms_storages_variant_to_array (GVariant *variant,
+ guint *n_storages);
+GVariant *mm_common_sms_storages_array_to_variant (const MMSmsStorage *storages,
+ guint n_storages);
+GVariant *mm_common_sms_storages_garray_to_variant (GArray *array);
+
GArray *mm_common_bands_variant_to_garray (GVariant *variant);
MMModemBand *mm_common_bands_variant_to_array (GVariant *variant,
guint *n_bands);