aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-base-sms.c22
-rw-r--r--src/mm-base-sms.h1
-rw-r--r--src/mm-broadband-modem-mbim.c6
-rw-r--r--src/mm-broadband-modem-qmi.c5
-rw-r--r--src/mm-broadband-modem.c6
-rw-r--r--src/mm-iface-modem-messaging.c22
-rw-r--r--src/mm-iface-modem-messaging.h2
-rw-r--r--src/mm-sms-at.c5
-rw-r--r--src/mm-sms-at.h5
-rw-r--r--src/mm-sms-list.c15
-rw-r--r--src/mm-sms-list.h3
-rw-r--r--src/mm-sms-mbim.c5
-rw-r--r--src/mm-sms-mbim.h5
-rw-r--r--src/mm-sms-qmi.c5
-rw-r--r--src/mm-sms-qmi.h5
15 files changed, 96 insertions, 16 deletions
diff --git a/src/mm-base-sms.c b/src/mm-base-sms.c
index daf7fb67..07081aa3 100644
--- a/src/mm-base-sms.c
+++ b/src/mm-base-sms.c
@@ -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]);
}
diff --git a/src/mm-base-sms.h b/src/mm-base-sms.h
index 22d25ebb..14902167 100644
--- a/src/mm-base-sms.h
+++ b/src/mm-base-sms.h
@@ -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;
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 91a18cb2..5d7e37be 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -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);
}
/*****************************************************************************/
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 6caccc21..4f153009 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -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);
}
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index c29c9190..f164be01 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -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);
}
/*****************************************************************************/
diff --git a/src/mm-iface-modem-messaging.c b/src/mm-iface-modem-messaging.c
index 51c8b24e..941e58e0 100644
--- a/src/mm-iface-modem-messaging.c
+++ b/src/mm-iface-modem-messaging.c
@@ -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
diff --git a/src/mm-iface-modem-messaging.h b/src/mm-iface-modem-messaging.h
index f62324c9..d7f29b6d 100644
--- a/src/mm-iface-modem-messaging.h
+++ b/src/mm-iface-modem-messaging.h
@@ -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);
diff --git a/src/mm-sms-at.c b/src/mm-sms-at.c
index 3fc7c155..b79a95ab 100644
--- a/src/mm-sms-at.c
+++ b/src/mm-sms-at.c
@@ -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;
diff --git a/src/mm-sms-at.h b/src/mm-sms-at.h
index 26e2dae4..551d50eb 100644
--- a/src/mm-sms-at.h
+++ b/src/mm-sms-at.h
@@ -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 */
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c
index 21515aa5..69c62153 100644
--- a/src/mm-sms-list.c
+++ b/src/mm-sms-list.c
@@ -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)
{
diff --git a/src/mm-sms-list.h b/src/mm-sms-list.h
index e8503a22..53fa63f0 100644
--- a/src/mm-sms-list.h
+++ b/src/mm-sms-list.h
@@ -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 */
diff --git a/src/mm-sms-mbim.c b/src/mm-sms-mbim.c
index 1cb442d6..7b3edb84 100644
--- a/src/mm-sms-mbim.c
+++ b/src/mm-sms-mbim.c
@@ -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));
}
diff --git a/src/mm-sms-mbim.h b/src/mm-sms-mbim.h
index 070ff677..7877c3f1 100644
--- a/src/mm-sms-mbim.h
+++ b/src/mm-sms-mbim.h
@@ -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 */
diff --git a/src/mm-sms-qmi.c b/src/mm-sms-qmi.c
index aa5101ee..ebd8f845 100644
--- a/src/mm-sms-qmi.c
+++ b/src/mm-sms-qmi.c
@@ -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));
}
diff --git a/src/mm-sms-qmi.h b/src/mm-sms-qmi.h
index 250e406e..1dda2a95 100644
--- a/src/mm-sms-qmi.h
+++ b/src/mm-sms-qmi.h
@@ -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 */