aboutsummaryrefslogtreecommitdiff
path: root/src/mm-sms-list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-sms-list.c')
-rw-r--r--src/mm-sms-list.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c
index 6b1082d6..dd709b66 100644
--- a/src/mm-sms-list.c
+++ b/src/mm-sms-list.c
@@ -184,12 +184,21 @@ take_singlepart (MMSmsList *self,
gboolean received)
{
MMSms *sms;
+ GError *error = NULL;
- sms = mm_sms_new (self->priv->modem, part);
- self->priv->list = g_list_prepend (self->priv->list, sms);
- g_signal_emit (self, signals[SIGNAL_ADDED], 0,
- mm_sms_get_path (sms),
- received);
+ sms = mm_sms_new (self->priv->modem,
+ received,
+ part,
+ &error);
+ if (!sms) {
+ mm_warn ("Couldn't create single-part SMS: '%s'", error->message);
+ g_error_free (error);
+ } else {
+ self->priv->list = g_list_prepend (self->priv->list, sms);
+ g_signal_emit (self, signals[SIGNAL_ADDED], 0,
+ mm_sms_get_path (sms),
+ received);
+ }
}
static gboolean
@@ -214,15 +223,23 @@ take_multipart (MMSmsList *self,
} else {
/* Create new Multipart */
sms = mm_sms_multipart_new (self->priv->modem,
+ received,
concat_reference,
mm_sms_part_get_concat_max (part),
- part);
+ part,
+ error);
+ if (!sms)
+ return FALSE;
+
self->priv->list = g_list_prepend (self->priv->list, sms);
- g_signal_emit (self, signals[SIGNAL_ADDED], 0,
- mm_sms_get_path (sms),
- received);
}
+ /* Check if completed and assembled */
+ if (mm_sms_multipart_is_complete (sms) &&
+ mm_sms_multipart_is_assembled (sms))
+ g_signal_emit (self, signals[SIGNAL_ADDED], 0,
+ mm_sms_get_path (sms));
+
return TRUE;
}