iface-modem-messaging: allow subclassing SMS object creation methods

This commit is contained in:
Aleksander Morgado
2012-02-07 22:24:04 +01:00
parent 61a8452893
commit 0841f12315
5 changed files with 65 additions and 15 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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,