diff options
author | Ronald Tessier <ronald.tessier@linux.intel.com> | 2012-05-03 15:20:02 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-05-09 10:21:53 -0700 |
commit | 2c6f8c84e0dc3f490f3f2288ba7d8162473ebe58 (patch) | |
tree | 3e0c8d6f5f9e68a5c3cbb919a8b3481c0728edae | |
parent | adf512e40f4f8fe219ac9e382f8df791e09dc860 (diff) | |
download | mmsd-2c6f8c84e0dc3f490f3f2288ba7d8162473ebe58.tar.gz |
service: Sort conversation list by message date
-rw-r--r-- | src/service.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/service.c b/src/service.c index 93beceb..6bcdede 100644 --- a/src/service.c +++ b/src/service.c @@ -698,6 +698,31 @@ static DBusMessage *get_messages(DBusConnection *conn, return reply; } +static gint fill_conversation_sort(gconstpointer a, gconstpointer b) +{ + const struct mms_message *msg1 = a; + const struct mms_message *msg2 = b; + time_t date1, date2; + + if (msg1->type == MMS_MESSAGE_TYPE_SEND_REQ) + date1 = msg1->sr.date; + else + date1 = msg1->rc.date; + + if (msg2->type == MMS_MESSAGE_TYPE_SEND_REQ) + date2 = msg2->sr.date; + else + date2 = msg2->rc.date; + + if (date1 > date2) + return 1; + + if (date1 < date2) + return -1; + + return 0; +} + static gboolean is_recipient(const char *recipients, const char *number) { const char *subrecpts, *subnum; @@ -766,7 +791,8 @@ static GList *fill_conversation(const struct mms_service *service, continue; if (is_recipient(recipients, number) == TRUE) - conversation = g_list_prepend(conversation, value); + conversation = g_list_insert_sorted(conversation, value, + fill_conversation_sort); } return conversation; |