diff --git a/Classes/ChatsListTableView.h b/Classes/ChatsListTableView.h index ed79f82f2..cfab007de 100644 --- a/Classes/ChatsListTableView.h +++ b/Classes/ChatsListTableView.h @@ -30,4 +30,5 @@ - (void)loadData; - (void)markCellAsRead:(LinphoneChatRoom *)chatRoom; ++ (void)saveDataToUserDefaults; @end diff --git a/Classes/ChatsListTableView.m b/Classes/ChatsListTableView.m index 49e3b98d7..290777a12 100644 --- a/Classes/ChatsListTableView.m +++ b/Classes/ChatsListTableView.m @@ -123,6 +123,40 @@ static int sorted_history_comparison(LinphoneChatRoom *to_insert, LinphoneChatRo } } ++ (void) saveDataToUserDefaults { + NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.belledonne-communications.linphone.widget"]; + MSList *sorted = nil; + const MSList *unsorted = linphone_core_get_chat_rooms(LC); + const MSList *iter = unsorted; + + while (iter) { + // store last message in user data + LinphoneChatRoom *chat_room = iter->data; + sorted = bctbx_list_insert_sorted(sorted, chat_room, (bctbx_compare_func)sorted_history_comparison); + iter = iter->next; + } + + NSMutableArray *addresses = [NSMutableArray array]; + + while (sorted) { + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + LinphoneChatRoom *cr = sorted->data; + const LinphoneAddress *address = linphone_chat_room_get_peer_address(cr); + NSString *display; + [dict setObject:[[NSString stringWithUTF8String:linphone_address_as_string_uri_only(address)] substringFromIndex:4] forKey:@"address"]; + if (linphone_chat_room_get_nb_participants(cr) > 1) + display = [NSString stringWithUTF8String:linphone_chat_room_get_subject(cr)]; + else + display = [NSString stringWithUTF8String:linphone_address_get_display_name(address)?:linphone_address_get_username(address)]; + [dict setObject:display forKey:@"display"]; + [dict setObject:[NSNumber numberWithInt:linphone_chat_room_get_nb_participants(cr)] forKey:@"nbParticipants"]; + [addresses addObject:dict]; + sorted = sorted->next; + } + + [defaults setObject:addresses forKey:@"chatrooms"]; +} + - (void)markCellAsRead:(LinphoneChatRoom *)chatRoom { int idx = bctbx_list_index(_data, VIEW(ChatConversationView).chatRoom); NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0]; diff --git a/Classes/LinphoneAppDelegate.m b/Classes/LinphoneAppDelegate.m index 403d3b4c1..f7d5a4e8c 100644 --- a/Classes/LinphoneAppDelegate.m +++ b/Classes/LinphoneAppDelegate.m @@ -139,6 +139,7 @@ } [LinphoneManager.instance.iapManager check]; [HistoryListTableView saveDataToUserDefaults]; + [ChatsListTableView saveDataToUserDefaults]; } #pragma deploymate push "ignored-api-availability" @@ -343,10 +344,15 @@ NSString *sipUri = [[url resourceSpecifier] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; [VIEW(DialerView) setAddress:sipUri]; } else if ([scheme isEqualToString:@"linphone-widget"]) { + printf("cparla\n"); if ([[url host] isEqualToString:@"call_log"] && [[url path] isEqualToString:@"/show"]) { [VIEW(HistoryDetailsView) setCallLogId:[url query]]; [PhoneMainView.instance changeCurrentView:HistoryDetailsView.compositeViewDescription]; + } else if ([[url host] isEqualToString:@"chatroom"] && + [[url path] isEqualToString:@"/show"]) { + LinphoneChatRoom *cr = linphone_core_get_chat_room_from_uri(LC, url.query.UTF8String); + [PhoneMainView.instance goToChatRoom:cr]; } } return YES; diff --git a/latestChatroomsWidget/Base.lproj/MainInterface.storyboard b/latestChatroomsWidget/Base.lproj/MainInterface.storyboard index ec60bb8f3..55cf32840 100644 --- a/latestChatroomsWidget/Base.lproj/MainInterface.storyboard +++ b/latestChatroomsWidget/Base.lproj/MainInterface.storyboard @@ -31,6 +31,9 @@ + + +