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:
+19
-3
@@ -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]);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user