diff options
Diffstat (limited to 'src/mm-sms-list.c')
-rw-r--r-- | src/mm-sms-list.c | 22 |
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); |