base-sms: pass supported storages in at creation time

They won't change, and this lets us get rid of one more usage of
MMIfaceModemMessaging.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
This commit is contained in:
Dan Williams
2025-05-08 20:24:37 -05:00
parent 9c8ec57c24
commit 1781ffaad4
2 changed files with 53 additions and 4 deletions
+52 -4
View File
@@ -56,6 +56,7 @@ enum {
PROP_MULTIPART_REFERENCE,
PROP_IS_3GPP,
PROP_DEFAULT_STORAGE,
PROP_SUPPORTED_STORAGES,
PROP_LAST
};
@@ -95,7 +96,9 @@ struct _MMBaseSmsPrivate {
/* TRUE for 3GPP SMS; FALSE for CDMA */
gboolean is_3gpp;
MMSmsStorage default_storage;
/* SMS storage */
MMSmsStorage default_storage;
GArray *supported_storages;
};
/*****************************************************************************/
@@ -411,6 +414,7 @@ handle_store_auth_ready (MMAuthProvider *authp,
HandleStoreContext *ctx)
{
GError *error = NULL;
gboolean storage_supported = FALSE;
if (!mm_auth_provider_authorize_finish (authp, res, &error)) {
mm_dbus_method_invocation_take_error (ctx->invocation, error);
@@ -442,9 +446,23 @@ handle_store_auth_ready (MMAuthProvider *authp,
}
/* Check if the requested storage is allowed for storing */
if (!mm_iface_modem_messaging_is_storage_supported_for_storing (MM_IFACE_MODEM_MESSAGING (ctx->self->priv->modem),
ctx->storage,
&error)) {
if (ctx->self->priv->supported_storages) {
guint i;
for (i = 0; i < ctx->self->priv->supported_storages->len; i++) {
if (ctx->storage == g_array_index (ctx->self->priv->supported_storages, MMSmsStorage, i)) {
storage_supported = TRUE;
break;
}
}
}
if (!storage_supported) {
g_set_error (&error,
MM_CORE_ERROR,
MM_CORE_ERROR_UNSUPPORTED,
"Storage '%s' is not supported for storing",
mm_sms_storage_get_string (ctx->storage));
mm_obj_warn (ctx->self, "failed storing SMS message: %s", error->message);
mm_dbus_method_invocation_take_error (ctx->invocation, error);
handle_store_context_free (ctx);
@@ -1216,6 +1234,19 @@ log_object_build_id (MMLogObject *_self)
/*****************************************************************************/
/* FIXME: use g_array_copy() when glib min version is >= 2.62 */
static GArray *
copy_storage_array (GArray *orig)
{
GArray *copy = NULL;
if (orig) {
copy = g_array_sized_new (FALSE, FALSE, sizeof (MMSmsStorage), orig->len);
g_array_append_vals (copy, orig->data, orig->len);
}
return copy;
}
static void
set_property (GObject *object,
guint prop_id,
@@ -1269,6 +1300,11 @@ set_property (GObject *object,
case PROP_DEFAULT_STORAGE:
self->priv->default_storage = g_value_get_enum (value);
break;
case PROP_SUPPORTED_STORAGES:
/* Copy the array rather than just ref-ing it */
g_clear_pointer (&self->priv->supported_storages, (GDestroyNotify)g_array_unref);
self->priv->supported_storages = copy_storage_array (g_value_get_boxed (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1311,6 +1347,9 @@ get_property (GObject *object,
case PROP_DEFAULT_STORAGE:
g_value_set_enum (value, self->priv->default_storage);
break;
case PROP_SUPPORTED_STORAGES:
g_value_set_boxed (value, copy_storage_array (self->priv->supported_storages));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1362,6 +1401,7 @@ dispose (GObject *object)
g_clear_object (&self->priv->bind_to);
g_cancellable_cancel (self->priv->authp_cancellable);
g_clear_object (&self->priv->authp_cancellable);
g_clear_pointer (&self->priv->supported_storages, (GDestroyNotify)g_array_unref);
G_OBJECT_CLASS (mm_base_sms_parent_class)->dispose (object);
}
@@ -1456,4 +1496,12 @@ mm_base_sms_class_init (MMBaseSmsClass *klass)
MM_SMS_STORAGE_UNKNOWN,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_DEFAULT_STORAGE, properties[PROP_DEFAULT_STORAGE]);
properties[PROP_SUPPORTED_STORAGES] =
g_param_spec_boxed (MM_BASE_SMS_SUPPORTED_STORAGES,
"Supported storages",
"Array of MMSmsStorage indicating supported storages for storing the SMS",
G_TYPE_ARRAY,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_SUPPORTED_STORAGES, properties[PROP_SUPPORTED_STORAGES]);
}
+1
View File
@@ -54,6 +54,7 @@ typedef struct _MMBaseSmsPrivate MMBaseSmsPrivate;
#define MM_BASE_SMS_MULTIPART_REFERENCE "sms-multipart-reference"
#define MM_BASE_SMS_IS_3GPP "sms-is-3gpp"
#define MM_BASE_SMS_DEFAULT_STORAGE "sms-default-storage"
#define MM_BASE_SMS_SUPPORTED_STORAGES "sms-supported-storages"
struct _MMBaseSms {
MmGdbusSmsSkeleton parent;