aboutsummaryrefslogtreecommitdiff
path: root/src/mm-sms-list.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-02-09 12:48:00 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:15:02 +0100
commit714e4ca44b2dc4d877e28d01e9f402fa0d9066a7 (patch)
tree3d6396dd49ba8ecb363fb87fe4773e2389245e97 /src/mm-sms-list.c
parent186584f26f1aa6699ddc970fa6b85f60a27d1820 (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.c87
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);
}
/*****************************************************************************/