aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-02-07 22:24:04 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:15:00 +0100
commit0841f123158b747de5a2ea7744644b049de1307d (patch)
treec1fcc3bb6d9e2a53062bfd4c1a0d3a1909eceda4 /src
parent61a84528932fcbae61f3fb2275d89595634de0dd (diff)
iface-modem-messaging: allow subclassing SMS object creation methods
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem.c1
-rw-r--r--src/mm-iface-modem-messaging.h4
-rw-r--r--src/mm-sms-list.c2
-rw-r--r--src/mm-sms.c62
-rw-r--r--src/mm-sms.h11
5 files changed, 65 insertions, 15 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index cdffa020..68ac6c8c 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -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
diff --git a/src/mm-iface-modem-messaging.h b/src/mm-iface-modem-messaging.h
index 230e7d41..8a09deb9 100644
--- a/src/mm-iface-modem-messaging.h
+++ b/src/mm-iface-modem-messaging.h
@@ -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);
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c
index 7cd1d130..f2ee8c9c 100644
--- a/src/mm-sms-list.c
+++ b/src/mm-sms-list.c
@@ -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);
diff --git a/src/mm-sms.c b/src/mm-sms.c
index 29733e80..a7136aa2 100644
--- a/src/mm-sms.c
+++ b/src/mm-sms.c
@@ -445,6 +445,14 @@ mm_sms_multipart_take_part (MMSms *self,
}
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,
MMSmsPart *part,
@@ -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
diff --git a/src/mm-sms.h b/src/mm-sms.h
index aefb5ddb..6136a1af 100644
--- a/src/mm-sms.h
+++ b/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,