iface-modem-messaging: allow subclassing SMS object creation methods
This commit is contained in:
@@ -6427,6 +6427,7 @@ iface_modem_messaging_init (MMIfaceModemMessaging *iface)
|
||||
iface->setup_unsolicited_events_finish = modem_messaging_setup_cleanup_unsolicited_events_finish;
|
||||
iface->cleanup_unsolicited_events = modem_messaging_cleanup_unsolicited_events;
|
||||
iface->cleanup_unsolicited_events_finish = modem_messaging_setup_cleanup_unsolicited_events_finish;
|
||||
iface->create_sms = mm_sms_new;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -21,6 +21,7 @@
|
||||
|
||||
#include "mm-at-serial-port.h"
|
||||
#include "mm-sms-part.h"
|
||||
#include "mm-sms.h"
|
||||
|
||||
#define MM_TYPE_IFACE_MODEM_MESSAGING (mm_iface_modem_messaging_get_type ())
|
||||
#define MM_IFACE_MODEM_MESSAGING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_IFACE_MODEM_MESSAGING, MMIfaceModemMessaging))
|
||||
@@ -75,6 +76,9 @@ struct _MMIfaceModemMessaging {
|
||||
gboolean (*load_initial_sms_parts_finish) (MMIfaceModemMessaging *self,
|
||||
GAsyncResult *res,
|
||||
GError **error);
|
||||
|
||||
/* Create SMS objects */
|
||||
MMSms * (* create_sms) (MMBaseModem *self);
|
||||
};
|
||||
|
||||
GType mm_iface_modem_messaging_get_type (void);
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include <ModemManager.h>
|
||||
#include <libmm-common.h>
|
||||
|
||||
#include "mm-iface-modem-messaging.h"
|
||||
#include "mm-marshal.h"
|
||||
#include "mm-sms-list.h"
|
||||
#include "mm-sms.h"
|
||||
@@ -190,6 +191,7 @@ take_singlepart (MMSmsList *self,
|
||||
received,
|
||||
part,
|
||||
&error);
|
||||
|
||||
if (!sms) {
|
||||
mm_warn ("Couldn't create single-part SMS: '%s'", error->message);
|
||||
g_error_free (error);
|
||||
|
62
src/mm-sms.c
62
src/mm-sms.c
@@ -444,6 +444,14 @@ mm_sms_multipart_take_part (MMSms *self,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
MMSms *
|
||||
mm_sms_new (MMBaseModem *modem)
|
||||
{
|
||||
return MM_SMS (g_object_new (MM_TYPE_SMS,
|
||||
MM_SMS_MODEM, modem,
|
||||
NULL));
|
||||
}
|
||||
|
||||
MMSms *
|
||||
mm_sms_singlepart_new (MMBaseModem *modem,
|
||||
gboolean received,
|
||||
@@ -452,12 +460,12 @@ mm_sms_singlepart_new (MMBaseModem *modem,
|
||||
{
|
||||
MMSms *self;
|
||||
|
||||
self = g_object_new (MM_TYPE_SMS,
|
||||
MM_SMS_MODEM, modem,
|
||||
"state", (received ?
|
||||
MM_MODEM_SMS_STATE_RECEIVED :
|
||||
MM_MODEM_SMS_STATE_STORED),
|
||||
NULL);
|
||||
self = mm_sms_new (modem);
|
||||
g_object_set (self,
|
||||
"state", (received ?
|
||||
MM_MODEM_SMS_STATE_RECEIVED :
|
||||
MM_MODEM_SMS_STATE_STORED),
|
||||
NULL);
|
||||
|
||||
/* Keep the single part in the list */
|
||||
self->priv->parts = g_list_prepend (self->priv->parts, part);
|
||||
@@ -481,15 +489,15 @@ mm_sms_multipart_new (MMBaseModem *modem,
|
||||
{
|
||||
MMSms *self;
|
||||
|
||||
self = g_object_new (MM_TYPE_SMS,
|
||||
MM_SMS_MODEM, modem,
|
||||
MM_SMS_IS_MULTIPART, TRUE,
|
||||
MM_SMS_MAX_PARTS, max_parts,
|
||||
MM_SMS_MULTIPART_REFERENCE, reference,
|
||||
"state", (received ?
|
||||
MM_MODEM_SMS_STATE_RECEIVED :
|
||||
MM_MODEM_SMS_STATE_STORED),
|
||||
NULL);
|
||||
self = mm_sms_new (modem);
|
||||
g_object_set (self,
|
||||
MM_SMS_IS_MULTIPART, TRUE,
|
||||
MM_SMS_MAX_PARTS, max_parts,
|
||||
MM_SMS_MULTIPART_REFERENCE, reference,
|
||||
"state", (received ?
|
||||
MM_MODEM_SMS_STATE_RECEIVED :
|
||||
MM_MODEM_SMS_STATE_STORED),
|
||||
NULL);
|
||||
|
||||
if (!mm_sms_multipart_take_part (self, first_part, error))
|
||||
g_clear_object (&self);
|
||||
@@ -497,6 +505,30 @@ mm_sms_multipart_new (MMBaseModem *modem,
|
||||
return self;
|
||||
}
|
||||
|
||||
MMSms *
|
||||
mm_sms_user_new (MMBaseModem *modem,
|
||||
const gchar *text,
|
||||
const gchar *number,
|
||||
const gchar *smsc,
|
||||
guint validity,
|
||||
guint class,
|
||||
GError **error)
|
||||
{
|
||||
MMSmsPart *part;
|
||||
|
||||
part = mm_sms_part_new (0);
|
||||
mm_sms_part_set_text (part, text);
|
||||
mm_sms_part_set_number (part, number);
|
||||
mm_sms_part_set_smsc (part, smsc);
|
||||
mm_sms_part_set_validity (part, validity);
|
||||
mm_sms_part_set_class (part, class);
|
||||
|
||||
return mm_sms_singlepart_new (modem,
|
||||
FALSE,
|
||||
part,
|
||||
error);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
|
11
src/mm-sms.h
11
src/mm-sms.h
@@ -63,6 +63,17 @@ struct _MMSmsClass {
|
||||
|
||||
GType mm_sms_get_type (void);
|
||||
|
||||
/* This one can be overriden by plugins */
|
||||
MMSms *mm_sms_new (MMBaseModem *modem);
|
||||
|
||||
MMSms *mm_sms_user_new (MMBaseModem *modem,
|
||||
const gchar *text,
|
||||
const gchar *number,
|
||||
const gchar *smsc,
|
||||
guint validity,
|
||||
guint class,
|
||||
GError **error);
|
||||
|
||||
MMSms *mm_sms_singlepart_new (MMBaseModem *modem,
|
||||
gboolean received,
|
||||
MMSmsPart *part,
|
||||
|
Reference in New Issue
Block a user