From 7eb4d184324246382d4ff212ca0d6175ff09effa Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Tue, 27 May 2014 17:38:01 +0200 Subject: [PATCH] Sort chatrooms by most recent message --- Classes/ChatTableViewController.m | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Classes/ChatTableViewController.m b/Classes/ChatTableViewController.m index 0fd427b53..62f029db9 100644 --- a/Classes/ChatTableViewController.m +++ b/Classes/ChatTableViewController.m @@ -49,8 +49,35 @@ #pragma mark - +static int sorted_history_comparison(LinphoneChatRoom *to_insert, LinphoneChatRoom *elem){ + MSList* new_history = linphone_chat_room_get_history(to_insert, 1); + LinphoneChatMessage* last_new_message = new_history? new_history->data : NULL; + MSList* elem_history = linphone_chat_room_get_history(elem, 1); + LinphoneChatMessage* last_elem_message = elem_history?elem_history->data:NULL; + + if( last_new_message && last_elem_message ){ + time_t new = linphone_chat_message_get_time(last_new_message); + time_t old = linphone_chat_message_get_time(last_elem_message); + if ( new < old ) return 1; + else if ( new > old) return -1; + } + return 0; +} + +- (MSList*)sortChatRooms { + MSList* sorted = nil; + MSList* unsorted = linphone_core_get_chat_rooms([LinphoneManager getLc]); + MSList* iter = unsorted; + + while (iter) { + sorted = ms_list_insert_sorted(sorted, iter->data, (MSCompareFunc)sorted_history_comparison); + iter = iter->next; + } + return sorted; +} + - (void)loadData { - data = linphone_core_get_chat_rooms([LinphoneManager getLc]); + data = [self sortChatRooms]; [[self tableView] reloadData]; }