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->setup_unsolicited_events_finish = modem_messaging_setup_cleanup_unsolicited_events_finish;
|
||||||
iface->cleanup_unsolicited_events = modem_messaging_cleanup_unsolicited_events;
|
iface->cleanup_unsolicited_events = modem_messaging_cleanup_unsolicited_events;
|
||||||
iface->cleanup_unsolicited_events_finish = modem_messaging_setup_cleanup_unsolicited_events_finish;
|
iface->cleanup_unsolicited_events_finish = modem_messaging_setup_cleanup_unsolicited_events_finish;
|
||||||
|
iface->create_sms = mm_sms_new;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "mm-at-serial-port.h"
|
#include "mm-at-serial-port.h"
|
||||||
#include "mm-sms-part.h"
|
#include "mm-sms-part.h"
|
||||||
|
#include "mm-sms.h"
|
||||||
|
|
||||||
#define MM_TYPE_IFACE_MODEM_MESSAGING (mm_iface_modem_messaging_get_type ())
|
#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))
|
#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,
|
gboolean (*load_initial_sms_parts_finish) (MMIfaceModemMessaging *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
/* Create SMS objects */
|
||||||
|
MMSms * (* create_sms) (MMBaseModem *self);
|
||||||
};
|
};
|
||||||
|
|
||||||
GType mm_iface_modem_messaging_get_type (void);
|
GType mm_iface_modem_messaging_get_type (void);
|
||||||
|
@@ -23,6 +23,7 @@
|
|||||||
#include <ModemManager.h>
|
#include <ModemManager.h>
|
||||||
#include <libmm-common.h>
|
#include <libmm-common.h>
|
||||||
|
|
||||||
|
#include "mm-iface-modem-messaging.h"
|
||||||
#include "mm-marshal.h"
|
#include "mm-marshal.h"
|
||||||
#include "mm-sms-list.h"
|
#include "mm-sms-list.h"
|
||||||
#include "mm-sms.h"
|
#include "mm-sms.h"
|
||||||
@@ -190,6 +191,7 @@ take_singlepart (MMSmsList *self,
|
|||||||
received,
|
received,
|
||||||
part,
|
part,
|
||||||
&error);
|
&error);
|
||||||
|
|
||||||
if (!sms) {
|
if (!sms) {
|
||||||
mm_warn ("Couldn't create single-part SMS: '%s'", error->message);
|
mm_warn ("Couldn't create single-part SMS: '%s'", error->message);
|
||||||
g_error_free (error);
|
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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MMSms *
|
||||||
|
mm_sms_new (MMBaseModem *modem)
|
||||||
|
{
|
||||||
|
return MM_SMS (g_object_new (MM_TYPE_SMS,
|
||||||
|
MM_SMS_MODEM, modem,
|
||||||
|
NULL));
|
||||||
|
}
|
||||||
|
|
||||||
MMSms *
|
MMSms *
|
||||||
mm_sms_singlepart_new (MMBaseModem *modem,
|
mm_sms_singlepart_new (MMBaseModem *modem,
|
||||||
gboolean received,
|
gboolean received,
|
||||||
@@ -452,12 +460,12 @@ mm_sms_singlepart_new (MMBaseModem *modem,
|
|||||||
{
|
{
|
||||||
MMSms *self;
|
MMSms *self;
|
||||||
|
|
||||||
self = g_object_new (MM_TYPE_SMS,
|
self = mm_sms_new (modem);
|
||||||
MM_SMS_MODEM, modem,
|
g_object_set (self,
|
||||||
"state", (received ?
|
"state", (received ?
|
||||||
MM_MODEM_SMS_STATE_RECEIVED :
|
MM_MODEM_SMS_STATE_RECEIVED :
|
||||||
MM_MODEM_SMS_STATE_STORED),
|
MM_MODEM_SMS_STATE_STORED),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* Keep the single part in the list */
|
/* Keep the single part in the list */
|
||||||
self->priv->parts = g_list_prepend (self->priv->parts, part);
|
self->priv->parts = g_list_prepend (self->priv->parts, part);
|
||||||
@@ -481,15 +489,15 @@ mm_sms_multipart_new (MMBaseModem *modem,
|
|||||||
{
|
{
|
||||||
MMSms *self;
|
MMSms *self;
|
||||||
|
|
||||||
self = g_object_new (MM_TYPE_SMS,
|
self = mm_sms_new (modem);
|
||||||
MM_SMS_MODEM, modem,
|
g_object_set (self,
|
||||||
MM_SMS_IS_MULTIPART, TRUE,
|
MM_SMS_IS_MULTIPART, TRUE,
|
||||||
MM_SMS_MAX_PARTS, max_parts,
|
MM_SMS_MAX_PARTS, max_parts,
|
||||||
MM_SMS_MULTIPART_REFERENCE, reference,
|
MM_SMS_MULTIPART_REFERENCE, reference,
|
||||||
"state", (received ?
|
"state", (received ?
|
||||||
MM_MODEM_SMS_STATE_RECEIVED :
|
MM_MODEM_SMS_STATE_RECEIVED :
|
||||||
MM_MODEM_SMS_STATE_STORED),
|
MM_MODEM_SMS_STATE_STORED),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (!mm_sms_multipart_take_part (self, first_part, error))
|
if (!mm_sms_multipart_take_part (self, first_part, error))
|
||||||
g_clear_object (&self);
|
g_clear_object (&self);
|
||||||
@@ -497,6 +505,30 @@ mm_sms_multipart_new (MMBaseModem *modem,
|
|||||||
return self;
|
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
|
static void
|
||||||
|
11
src/mm-sms.h
11
src/mm-sms.h
@@ -63,6 +63,17 @@ struct _MMSmsClass {
|
|||||||
|
|
||||||
GType mm_sms_get_type (void);
|
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,
|
MMSms *mm_sms_singlepart_new (MMBaseModem *modem,
|
||||||
gboolean received,
|
gboolean received,
|
||||||
MMSmsPart *part,
|
MMSmsPart *part,
|
||||||
|
Reference in New Issue
Block a user