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.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);
}
/*****************************************************************************/