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.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c
index 1a832216..a242105b 100644
--- a/src/mm-sms-list.c
+++ b/src/mm-sms-list.c
@@ -219,14 +219,23 @@ mm_sms_list_add_sms (MMSmsList *self,
/*****************************************************************************/
-static guint
-cmp_sms_by_concat_reference (MMBaseSms *sms,
- gpointer user_data)
+static gint
+cmp_sms_by_number_reference (MMBaseSms *sms,
+ MMSmsPart *part)
{
if (!mm_base_sms_is_multipart (sms))
return -1;
- return (GPOINTER_TO_UINT (user_data) - mm_base_sms_get_multipart_reference (sms));
+ if (mm_base_sms_get_multipart_reference (sms) != mm_sms_part_get_concat_reference (part))
+ return -1;
+
+ if (g_strcmp0 (mm_gdbus_sms_get_number (MM_GDBUS_SMS (sms)), mm_sms_part_get_number (part)))
+ return -1;
+
+ if (mm_base_sms_get_max_parts (sms) != mm_sms_part_get_concat_max (part))
+ return -1;
+
+ return 0;
}
typedef struct {
@@ -278,9 +287,8 @@ take_multipart (MMSmsList *self,
guint concat_reference;
concat_reference = mm_sms_part_get_concat_reference (part);
- l = g_list_find_custom (self->priv->list,
- GUINT_TO_POINTER (concat_reference),
- (GCompareFunc)cmp_sms_by_concat_reference);
+ l = g_list_find_custom (self->priv->list, part,
+ (GCompareFunc)cmp_sms_by_number_reference);
if (l) {
/* Try to take the part */
mm_obj_dbg (self, "found existing multipart SMS object with reference '%u': adding new part", concat_reference);