diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-02-07 22:24:04 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:15:00 +0100 |
commit | 0841f123158b747de5a2ea7744644b049de1307d (patch) | |
tree | c1fcc3bb6d9e2a53062bfd4c1a0d3a1909eceda4 /src | |
parent | 61a84528932fcbae61f3fb2275d89595634de0dd (diff) |
iface-modem-messaging: allow subclassing SMS object creation methods
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem.c | 1 | ||||
-rw-r--r-- | src/mm-iface-modem-messaging.h | 4 | ||||
-rw-r--r-- | src/mm-sms-list.c | 2 | ||||
-rw-r--r-- | src/mm-sms.c | 62 | ||||
-rw-r--r-- | src/mm-sms.h | 11 |
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, |