base-sms: pass SMS default storage at creation time and update as needed

Instead of getting it from the MMIfaceModemMessaging when the
SMS is stored. This flattens dependencies between MMBaseSms and
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 b81f23e24a
commit 9c8ec57c24
15 changed files with 96 additions and 16 deletions
+19 -3
View File
@@ -55,6 +55,7 @@ enum {
PROP_MAX_PARTS,
PROP_MULTIPART_REFERENCE,
PROP_IS_3GPP,
PROP_DEFAULT_STORAGE,
PROP_LAST
};
@@ -93,6 +94,8 @@ struct _MMBaseSmsPrivate {
/* TRUE for 3GPP SMS; FALSE for CDMA */
gboolean is_3gpp;
MMSmsStorage default_storage;
};
/*****************************************************************************/
@@ -486,9 +489,7 @@ handle_store (MMBaseSms *self,
if (ctx->storage == MM_SMS_STORAGE_UNKNOWN) {
/* We'll set now the proper storage, taken from the default mem2 one */
g_object_get (self->priv->modem,
MM_IFACE_MODEM_MESSAGING_SMS_DEFAULT_STORAGE, &ctx->storage,
NULL);
ctx->storage = self->priv->default_storage;
g_assert (ctx->storage != MM_SMS_STORAGE_UNKNOWN);
}
@@ -1265,6 +1266,9 @@ set_property (GObject *object,
case PROP_IS_3GPP:
self->priv->is_3gpp = g_value_get_boolean (value);
break;
case PROP_DEFAULT_STORAGE:
self->priv->default_storage = g_value_get_enum (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1304,6 +1308,9 @@ get_property (GObject *object,
case PROP_IS_3GPP:
g_value_set_boolean (value, self->priv->is_3gpp);
break;
case PROP_DEFAULT_STORAGE:
g_value_set_enum (value, self->priv->default_storage);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1440,4 +1447,13 @@ mm_base_sms_class_init (MMBaseSmsClass *klass)
FALSE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_IS_3GPP, properties[PROP_IS_3GPP]);
properties[PROP_DEFAULT_STORAGE] =
g_param_spec_enum (MM_BASE_SMS_DEFAULT_STORAGE,
"Default storage",
"Default SMS storage",
MM_TYPE_SMS_STORAGE,
MM_SMS_STORAGE_UNKNOWN,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_DEFAULT_STORAGE, properties[PROP_DEFAULT_STORAGE]);
}
+1
View File
@@ -53,6 +53,7 @@ typedef struct _MMBaseSmsPrivate MMBaseSmsPrivate;
#define MM_BASE_SMS_MAX_PARTS "sms-max-parts"
#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"
struct _MMBaseSms {
MmGdbusSmsSkeleton parent;
+5 -1
View File
@@ -9242,8 +9242,12 @@ enable_unsolicited_events_messaging (MMIfaceModemMessaging *_self,
static MMBaseSms *
messaging_create_sms (MMBroadbandModem *self)
{
MMSmsStorage default_storage;
default_storage = mm_iface_modem_messaging_get_default_storage (MM_IFACE_MODEM_MESSAGING (self));
return mm_sms_mbim_new (MM_BASE_MODEM (self),
mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)));
mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)),
default_storage);
}
/*****************************************************************************/
+4 -1
View File
@@ -8881,14 +8881,17 @@ static MMBaseSms *
messaging_create_sms (MMBroadbandModem *_self)
{
MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
MMSmsStorage default_storage;
/* Handle AT URC only fallback */
if (self->priv->messaging_fallback_at_only) {
return MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_qmi_parent_class)->create_sms (_self);
}
default_storage = mm_iface_modem_messaging_get_default_storage (MM_IFACE_MODEM_MESSAGING (self));
return mm_sms_qmi_new (MM_BASE_MODEM (self),
mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)));
mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)),
default_storage);
}
+5 -1
View File
@@ -8259,8 +8259,12 @@ mm_broadband_modem_create_sms (MMBroadbandModem *self)
static MMBaseSms *
modem_messaging_create_sms (MMBroadbandModem *self)
{
MMSmsStorage default_storage;
default_storage = mm_iface_modem_messaging_get_default_storage (MM_IFACE_MODEM_MESSAGING (self));
return mm_sms_at_new (MM_BASE_MODEM (self),
mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)));
mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)),
default_storage);
}
/*****************************************************************************/
+21 -1
View File
@@ -433,7 +433,8 @@ handle_set_default_storage_ready (MMIfaceModemMessaging *self,
GAsyncResult *res,
HandleSetDefaultStorageContext *ctx)
{
GError *error = NULL;
GError *error = NULL;
g_autoptr(MMSmsList) list = NULL;
if (!MM_IFACE_MODEM_MESSAGING_GET_IFACE (self)->set_default_storage_finish (self, res, &error)) {
mm_obj_warn (self, "could not set default storage: %s", error->message);
@@ -446,6 +447,13 @@ handle_set_default_storage_ready (MMIfaceModemMessaging *self,
MM_IFACE_MODEM_MESSAGING_SMS_DEFAULT_STORAGE, ctx->storage,
NULL);
/* Update default storage in all SMSs too */
g_object_get (self,
MM_IFACE_MODEM_MESSAGING_SMS_LIST, &list,
NULL);
if (list)
mm_sms_list_set_default_storage (list, ctx->storage);
mm_obj_info (self, "set the default storage successfully");
mm_gdbus_modem_messaging_complete_set_default_storage (ctx->skeleton, ctx->invocation);
handle_set_default_storage_context_free (ctx);
@@ -598,6 +606,18 @@ mm_iface_modem_messaging_is_storage_supported_for_receiving (MMIfaceModemMessagi
error);
}
MMSmsStorage
mm_iface_modem_messaging_get_default_storage (MMIfaceModemMessaging *self)
{
MMSmsStorage storage = MM_SMS_STORAGE_UNKNOWN;
g_object_get (self,
MM_IFACE_MODEM_MESSAGING_SMS_DEFAULT_STORAGE, &storage,
NULL);
g_assert (storage != MM_SMS_STORAGE_UNKNOWN);
return storage;
}
/*****************************************************************************/
static void
+2
View File
@@ -193,6 +193,8 @@ gboolean mm_iface_modem_messaging_is_storage_supported_for_receiving (MMIfaceMod
MMSmsStorage storage,
GError **error);
MMSmsStorage mm_iface_modem_messaging_get_default_storage (MMIfaceModemMessaging *self);
/* SMS creation */
MMBaseSms *mm_iface_modem_messaging_create_sms (MMIfaceModemMessaging *self);
+4 -1
View File
@@ -788,13 +788,16 @@ sms_delete (MMBaseSms *sms,
/*****************************************************************************/
MMBaseSms *
mm_sms_at_new (MMBaseModem *modem, gboolean is_3gpp)
mm_sms_at_new (MMBaseModem *modem,
gboolean is_3gpp,
MMSmsStorage default_storage)
{
MMBaseSms *sms;
sms = MM_BASE_SMS (g_object_new (MM_TYPE_SMS_AT,
MM_BASE_SMS_MODEM, modem,
MM_BASE_SMS_IS_3GPP, is_3gpp,
MM_BASE_SMS_DEFAULT_STORAGE, default_storage,
NULL));
MM_SMS_AT (sms)->priv->modem = g_object_ref (modem);
return sms;
+3 -2
View File
@@ -53,7 +53,8 @@ struct _MMSmsAtClass {
GType mm_sms_at_get_type (void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMSmsAt, g_object_unref)
MMBaseSms *mm_sms_at_new (MMBaseModem *modem,
gboolean is_3gpp);
MMBaseSms *mm_sms_at_new (MMBaseModem *modem,
gboolean is_3gpp,
MMSmsStorage default_storage);
#endif /* MM_SMS_AT_H */
+15
View File
@@ -394,6 +394,21 @@ mm_sms_list_take_part (MMSmsList *self,
/*****************************************************************************/
void
mm_sms_list_set_default_storage (MMSmsList *self,
MMSmsStorage default_storage)
{
GList *l;
for (l = self->priv->list; l; l = g_list_next (l)) {
g_object_set (MM_BASE_SMS (l->data),
MM_BASE_SMS_DEFAULT_STORAGE, default_storage,
NULL);
}
}
/*****************************************************************************/
static gchar *
log_object_build_id (MMLogObject *_self)
{
+3
View File
@@ -89,4 +89,7 @@ gboolean mm_sms_list_has_local_multipart_reference (MMSmsList *self,
const gchar *number,
guint8 reference);
void mm_sms_list_set_default_storage (MMSmsList *self,
MMSmsStorage default_storage);
#endif /* MM_SMS_LIST_H */
+4 -1
View File
@@ -332,12 +332,15 @@ sms_delete (MMBaseSms *self,
/*****************************************************************************/
MMBaseSms *
mm_sms_mbim_new (MMBaseModem *modem, gboolean is_3gpp)
mm_sms_mbim_new (MMBaseModem *modem,
gboolean is_3gpp,
MMSmsStorage default_storage)
{
return MM_BASE_SMS (g_object_new (MM_TYPE_SMS_MBIM,
MM_BASE_SMS_MODEM, modem,
MM_BIND_TO, G_OBJECT (modem),
MM_BASE_SMS_IS_3GPP, is_3gpp,
MM_BASE_SMS_DEFAULT_STORAGE, default_storage,
NULL));
}
+3 -2
View File
@@ -45,7 +45,8 @@ struct _MMSmsMbimClass {
GType mm_sms_mbim_get_type (void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMSmsMbim, g_object_unref)
MMBaseSms *mm_sms_mbim_new (MMBaseModem *modem,
gboolean is_3gpp);
MMBaseSms *mm_sms_mbim_new (MMBaseModem *modem,
gboolean is_3gpp,
MMSmsStorage default_storage);
#endif /* MM_SMS_MBIM_H */
+4 -1
View File
@@ -786,12 +786,15 @@ sms_delete (MMBaseSms *self,
/*****************************************************************************/
MMBaseSms *
mm_sms_qmi_new (MMBaseModem *modem, gboolean is_3gpp)
mm_sms_qmi_new (MMBaseModem *modem,
gboolean is_3gpp,
MMSmsStorage default_storage)
{
return MM_BASE_SMS (g_object_new (MM_TYPE_SMS_QMI,
MM_BASE_SMS_MODEM, modem,
MM_BIND_TO, G_OBJECT (modem),
MM_BASE_SMS_IS_3GPP, is_3gpp,
MM_BASE_SMS_DEFAULT_STORAGE, default_storage,
NULL));
}
+3 -2
View File
@@ -47,7 +47,8 @@ struct _MMSmsQmiClass {
GType mm_sms_qmi_get_type (void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMSmsQmi, g_object_unref)
MMBaseSms *mm_sms_qmi_new (MMBaseModem *modem,
gboolean is_3gpp);
MMBaseSms *mm_sms_qmi_new (MMBaseModem *modem,
gboolean is_3gpp,
MMSmsStorage default_storage);
#endif /* MM_SMS_QMI_H */