diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-02-01 22:30:20 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:15:00 +0100 |
commit | 1eb7f60e4cee9295980d14de7d586a0bca24e869 (patch) | |
tree | 6ff11326efea8c966da0f97ad4b181ceb46c567d /src/mm-sms-list.c | |
parent | 6f103c136660eee618d6b38c69d3ba91e3b41921 (diff) |
sms: assemble and export the SMS when its completed
Diffstat (limited to 'src/mm-sms-list.c')
-rw-r--r-- | src/mm-sms-list.c | 35 |
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; } |