diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-02-09 12:48:00 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:15:02 +0100 |
commit | 714e4ca44b2dc4d877e28d01e9f402fa0d9066a7 (patch) | |
tree | 3d6396dd49ba8ecb363fb87fe4773e2389245e97 /src/mm-sms-list.c | |
parent | 186584f26f1aa6699ddc970fa6b85f60a27d1820 (diff) |
sms: export uncomplete multipart messages as well
Uncompleted multipart SMS will be exported to DBus, where only the "state"
property is valid, so that we allow completely removing those uncompleted
multipart SMS which will never get completed due to one reason or another.
Diffstat (limited to 'src/mm-sms-list.c')
-rw-r--r-- | src/mm-sms-list.c | 87 |
1 files changed, 41 insertions, 46 deletions
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c index 44b41668..d0b0b23d 100644 --- a/src/mm-sms-list.c +++ b/src/mm-sms-list.c @@ -194,36 +194,32 @@ cmp_sms_by_part_index (MMSms *sms, return !mm_sms_has_part_index (sms, GPOINTER_TO_UINT (user_data)); } -static void +static gboolean take_singlepart (MMSmsList *self, MMSmsPart *part, - gboolean received) + MMSmsState state, + GError **error) { MMSms *sms; - GError *error = NULL; sms = mm_sms_singlepart_new (self->priv->modem, - (received ? - MM_SMS_STATE_RECEIVED : - MM_SMS_STATE_STORED), + state, 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); - } + 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), + state == MM_SMS_STATE_RECEIVED); + return TRUE; } static gboolean take_multipart (MMSmsList *self, MMSmsPart *part, - gboolean received, + MMSmsState state, GError **error) { GList *l; @@ -234,32 +230,32 @@ take_multipart (MMSmsList *self, l = g_list_find_custom (self->priv->list, GUINT_TO_POINTER (concat_reference), (GCompareFunc)cmp_sms_by_concat_reference); - if (l) { - sms = MM_SMS (l->data); + if (l) /* Try to take the part */ - if (!mm_sms_multipart_take_part (sms, part, error)) - return FALSE; - } else { - /* Create new Multipart */ - sms = mm_sms_multipart_new (self->priv->modem, - (received ? - MM_SMS_STATE_RECEIVED : - MM_SMS_STATE_STORED), - concat_reference, - mm_sms_part_get_concat_max (part), - part, - error); - if (!sms) - return FALSE; - - self->priv->list = g_list_prepend (self->priv->list, sms); - } + return mm_sms_multipart_take_part (MM_SMS (l->data), part, error); + + /* Create new Multipart */ + sms = mm_sms_multipart_new (self->priv->modem, + state, + concat_reference, + mm_sms_part_get_concat_max (part), + part, + error); + if (!sms) + return FALSE; - /* 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)); + /* We do export uncomplete multipart messages, in order to be able to + * request removal of all parts of those multipart SMS that will never + * get completed. + * Only the STATE of the SMS object will be valid in the exported DBus + * interface.*/ + mm_sms_export (sms); + + self->priv->list = g_list_prepend (self->priv->list, sms); + g_signal_emit (self, signals[SIGNAL_ADDED], 0, + mm_sms_get_path (sms), + (state == MM_SMS_STATE_RECEIVED || + state == MM_SMS_STATE_RECEIVING)); return TRUE; } @@ -267,7 +263,7 @@ take_multipart (MMSmsList *self, gboolean mm_sms_list_take_part (MMSmsList *self, MMSmsPart *part, - gboolean received, + MMSmsState state, GError **error) { /* Ensure we don't have already taken a part with the same index */ @@ -284,11 +280,10 @@ mm_sms_list_take_part (MMSmsList *self, /* Did we just get a part of a multi-part SMS? */ if (mm_sms_part_should_concat (part)) - return take_multipart (self, part, received, error); + return take_multipart (self, part, state, error); /* Otherwise, we build a whole new single-part MMSms just from this part */ - take_singlepart (self, part, received); - return TRUE; + return take_singlepart (self, part, state, error); } /*****************************************************************************/ |