update linphone and adapt UI to the new chat room cbs API

This commit is contained in:
Benjamin Reis 2018-02-27 15:16:35 +01:00
parent 204de9fe91
commit 26b8fdb1e1
7 changed files with 57 additions and 59 deletions

View file

@ -20,6 +20,7 @@
@property(nonatomic, strong) NSMutableArray *oldAdmins;
@property(nonatomic) NSString *oldSubject;
@property(nonatomic) LinphoneChatRoom *room;
@property(nonatomic) LinphoneChatRoomCbs *chatRoomCbs;
@property (weak, nonatomic) IBOutlet UIIconButton *nextButton;
@property (weak, nonatomic) IBOutlet UIRoundBorderedButton *quitButton;

View file

@ -65,6 +65,7 @@ static UICompositeViewDescription *compositeDescription = nil;
_oldAdmins = [[NSMutableArray alloc] init];
_oldContacts = [[NSMutableArray alloc] init];
_room = NULL;
_chatRoomCbs = NULL;
}
- (void)viewWillAppear:(BOOL)animated {
@ -100,28 +101,25 @@ static UICompositeViewDescription *compositeDescription = nil;
)];
if (_room) {
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(_room);
linphone_chat_room_cbs_set_state_changed(cbs, main_view_chat_room_state_changed);
linphone_chat_room_cbs_set_subject_changed(cbs, chat_room_subject_changed);
linphone_chat_room_cbs_set_participant_added(cbs, chat_room_participant_added);
linphone_chat_room_cbs_set_participant_removed(cbs, chat_room_participant_removed);
linphone_chat_room_cbs_set_participant_admin_status_changed(cbs, chat_room_participant_admin_status_changed);
linphone_chat_room_cbs_set_user_data(cbs, (__bridge void*)self);
_chatRoomCbs = linphone_factory_create_chat_room_cbs(linphone_factory_get());
linphone_chat_room_cbs_set_state_changed(_chatRoomCbs, main_view_chat_room_state_changed);
linphone_chat_room_cbs_set_subject_changed(_chatRoomCbs, chat_room_subject_changed);
linphone_chat_room_cbs_set_participant_added(_chatRoomCbs, chat_room_participant_added);
linphone_chat_room_cbs_set_participant_removed(_chatRoomCbs, chat_room_participant_removed);
linphone_chat_room_cbs_set_participant_admin_status_changed(_chatRoomCbs, chat_room_participant_admin_status_changed);
linphone_chat_room_cbs_set_user_data(_chatRoomCbs, (__bridge void*)self);
linphone_chat_room_add_callbacks(_room, _chatRoomCbs);
}
[_tableView reloadData];
}
- (void)viewWillDisappear:(BOOL)animated {
if (_room) {
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(_room);
linphone_chat_room_cbs_set_state_changed(cbs, NULL);
linphone_chat_room_cbs_set_subject_changed(cbs, NULL);
linphone_chat_room_cbs_set_participant_added(cbs, NULL);
linphone_chat_room_cbs_set_participant_removed(cbs, NULL);
linphone_chat_room_cbs_set_participant_admin_status_changed(cbs, NULL);
linphone_chat_room_cbs_set_user_data(cbs, NULL);
}
if (!_room || !_chatRoomCbs)
return;
linphone_chat_room_remove_callbacks(_room, _chatRoomCbs);
_chatRoomCbs = NULL;
}
#pragma mark - next functions
@ -333,12 +331,12 @@ static UICompositeViewDescription *compositeDescription = nil;
}
void chat_room_subject_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
view.nameLabel.text = [NSString stringWithUTF8String:linphone_event_log_get_subject(event_log)];
}
void chat_room_participant_added(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
NSString *participantAddress = [NSString stringWithUTF8String:linphone_address_as_string(linphone_event_log_get_participant_address(event_log))];
[view.oldContacts addObject:participantAddress];
[view.contacts addObject:participantAddress];
@ -346,7 +344,7 @@ void chat_room_participant_added(LinphoneChatRoom *cr, const LinphoneEventLog *e
}
void chat_room_participant_removed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
NSString *participantAddress = [NSString stringWithUTF8String:linphone_address_as_string(linphone_event_log_get_participant_address(event_log))];
[view.oldContacts removeObject:participantAddress];
[view.contacts removeObject:participantAddress];
@ -354,7 +352,7 @@ void chat_room_participant_removed(LinphoneChatRoom *cr, const LinphoneEventLog
}
void chat_room_participant_admin_status_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
NSString *participantAddress = [NSString stringWithUTF8String:linphone_address_as_string(linphone_event_log_get_participant_address(event_log))];
LinphoneParticipant *me = linphone_chat_room_get_me(cr);

View file

@ -40,6 +40,7 @@
}
@property(nonatomic) LinphoneChatRoom *chatRoom;
@property(nonatomic) LinphoneChatRoomCbs *chatRoomCbs;
@property(weak, nonatomic) IBOutlet UIIconButton *backButton;
@property(nonatomic, strong) IBOutlet ChatConversationTableView *tableController;

View file

@ -32,6 +32,7 @@
if (self != nil) {
scrollOnGrowingEnabled = TRUE;
_chatRoom = NULL;
_chatRoomCbs = NULL;
imageQualities = [[OrderedDictionary alloc]
initWithObjectsAndKeys:[NSNumber numberWithFloat:0.9], NSLocalizedString(@"Maximum", nil),
[NSNumber numberWithFloat:0.5], NSLocalizedString(@"Average", nil),
@ -116,16 +117,10 @@ static UICompositeViewDescription *compositeDescription = nil;
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(_chatRoom);
linphone_chat_room_cbs_set_state_changed(cbs, NULL);
linphone_chat_room_cbs_set_subject_changed(cbs, NULL);
linphone_chat_room_cbs_set_participant_added(cbs, NULL);
linphone_chat_room_cbs_set_participant_removed(cbs, NULL);
linphone_chat_room_cbs_set_participant_admin_status_changed(cbs, NULL);
linphone_chat_room_cbs_set_user_data(cbs, NULL);
linphone_chat_room_cbs_set_chat_message_received(cbs, NULL);
linphone_chat_room_cbs_set_chat_message_sent(cbs, NULL);
linphone_chat_room_cbs_set_is_composing_received(cbs, NULL);
if (_chatRoom && _chatRoomCbs) {
linphone_chat_room_remove_callbacks(_chatRoom, _chatRoomCbs);
_chatRoomCbs = NULL;
}
[_messageField resignFirstResponder];
@ -158,16 +153,17 @@ static UICompositeViewDescription *compositeDescription = nil;
return;
}
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(_chatRoom);
linphone_chat_room_cbs_set_state_changed(cbs, on_chat_room_state_changed);
linphone_chat_room_cbs_set_subject_changed(cbs, on_chat_room_subject_changed);
linphone_chat_room_cbs_set_participant_added(cbs, on_chat_room_participant_added);
linphone_chat_room_cbs_set_participant_removed(cbs, on_chat_room_participant_removed);
linphone_chat_room_cbs_set_participant_admin_status_changed(cbs, on_chat_room_participant_admin_status_changed);
linphone_chat_room_cbs_set_chat_message_received(cbs, on_chat_room_chat_message_received);
linphone_chat_room_cbs_set_chat_message_sent(cbs, on_chat_room_chat_message_sent);
linphone_chat_room_cbs_set_is_composing_received(cbs, on_chat_room_is_composing_received);
linphone_chat_room_cbs_set_user_data(cbs, (__bridge void*)self);
_chatRoomCbs = linphone_factory_create_chat_room_cbs(linphone_factory_get());
linphone_chat_room_cbs_set_state_changed(_chatRoomCbs, on_chat_room_state_changed);
linphone_chat_room_cbs_set_subject_changed(_chatRoomCbs, on_chat_room_subject_changed);
linphone_chat_room_cbs_set_participant_added(_chatRoomCbs, on_chat_room_participant_added);
linphone_chat_room_cbs_set_participant_removed(_chatRoomCbs, on_chat_room_participant_removed);
linphone_chat_room_cbs_set_participant_admin_status_changed(_chatRoomCbs, on_chat_room_participant_admin_status_changed);
linphone_chat_room_cbs_set_chat_message_received(_chatRoomCbs, on_chat_room_chat_message_received);
linphone_chat_room_cbs_set_chat_message_sent(_chatRoomCbs, on_chat_room_chat_message_sent);
linphone_chat_room_cbs_set_is_composing_received(_chatRoomCbs, on_chat_room_is_composing_received);
linphone_chat_room_cbs_set_user_data(_chatRoomCbs, (__bridge void*)self);
linphone_chat_room_add_callbacks(_chatRoom, _chatRoomCbs);
[self updateSuperposedButtons];
@ -711,14 +707,14 @@ static UICompositeViewDescription *compositeDescription = nil;
#pragma mark - chat room callbacks
void on_chat_room_state_changed(LinphoneChatRoom *cr, LinphoneChatRoomState newState) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
view.messageField.editable = !linphone_chat_room_has_been_left(cr);
view.pictureButton.enabled = !linphone_chat_room_has_been_left(cr);
view.messageView.userInteractionEnabled = !linphone_chat_room_has_been_left(cr);
}
void on_chat_room_subject_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
const char *subject = linphone_chat_room_get_subject(cr) ?: linphone_event_log_get_subject(event_log);
if (subject) {
view.addressLabel.text = [NSString stringWithUTF8String:subject];
@ -728,27 +724,27 @@ void on_chat_room_subject_changed(LinphoneChatRoom *cr, const LinphoneEventLog *
}
void on_chat_room_participant_added(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
[view.tableController addEventEntry:(LinphoneEventLog *)event_log];
[view updateParticipantLabel];
[view.tableController scrollToBottom:true];
}
void on_chat_room_participant_removed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
[view.tableController addEventEntry:(LinphoneEventLog *)event_log];
[view updateParticipantLabel];
[view.tableController scrollToBottom:true];
}
void on_chat_room_participant_admin_status_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
[view.tableController addEventEntry:(LinphoneEventLog *)event_log];
[view.tableController scrollToBottom:true];
}
void on_chat_room_chat_message_received(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
LinphoneChatMessage *chat = linphone_event_log_get_chat_message(event_log);
if (!chat)
@ -770,13 +766,13 @@ void on_chat_room_chat_message_received(LinphoneChatRoom *cr, const LinphoneEven
}
void on_chat_room_chat_message_sent(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
[view.tableController addEventEntry:(LinphoneEventLog *)event_log];
[view.tableController scrollToBottom:true];
}
void on_chat_room_is_composing_received(LinphoneChatRoom *cr, const LinphoneAddress *remoteAddr, bool_t isComposing) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
BOOL composing = linphone_chat_room_is_remote_composing(cr) || bctbx_list_size(linphone_chat_room_get_composing_addresses(cr)) > 0;
[view setComposingVisible:composing withDelay:0.3];
}

View file

@ -64,9 +64,7 @@
if (!chatRoom)
continue;
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(chatRoom);
linphone_chat_room_cbs_set_state_changed(cbs, NULL);
linphone_chat_room_cbs_set_user_data(cbs, NULL);
linphone_chat_room_remove_callbacks(chatRoom, linphone_chat_room_get_current_callbacks(chatRoom));
_chatRooms = _chatRooms->next;
}
}
@ -173,14 +171,13 @@ static int sorted_history_comparison(LinphoneChatRoom *to_insert, LinphoneChatRo
}
void deletion_chat_room_state_changed(LinphoneChatRoom *cr, LinphoneChatRoomState newState) {
ChatsListTableView *view = (__bridge ChatsListTableView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr)) ?: NULL;
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_current_callbacks(cr);
ChatsListTableView *view = (__bridge ChatsListTableView *)linphone_chat_room_cbs_get_user_data(cbs) ?: NULL;
if (!view)
return;
if (newState == LinphoneChatRoomStateDeleted || newState == LinphoneChatRoomStateTerminationFailed) {
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(cr);
linphone_chat_room_cbs_set_state_changed(cbs, NULL);
linphone_chat_room_cbs_set_user_data(cbs, NULL);
linphone_chat_room_remove_callbacks(cr, cbs);
view.chatRooms = bctbx_list_remove(view.chatRooms, cr);
view.nbOfChatRoomToDelete--;
}
@ -201,9 +198,10 @@ void deletion_chat_room_state_changed(LinphoneChatRoom *cr, LinphoneChatRoomStat
continue;
_nbOfChatRoomToDelete++;
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(chatRoom);
LinphoneChatRoomCbs *cbs = linphone_factory_create_chat_room_cbs(linphone_factory_get());
linphone_chat_room_cbs_set_state_changed(cbs, deletion_chat_room_state_changed);
linphone_chat_room_cbs_set_user_data(cbs, (__bridge void*)self);
linphone_chat_room_add_callbacks(chatRoom, cbs);
FileTransferDelegate *ftdToDelete = nil;
for (FileTransferDelegate *ftd in [LinphoneManager.instance fileTransferDelegates]) {

View file

@ -882,8 +882,10 @@ static RootViewManager *rootViewManagerInstance = nil;
if (!room)
return;
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(room);
LinphoneChatRoomCbs *cbs = linphone_factory_create_chat_room_cbs(linphone_factory_get());
linphone_chat_room_cbs_set_state_changed(cbs, main_view_chat_room_state_changed);
linphone_chat_room_add_callbacks(room, cbs);
linphone_chat_room_add_participants(room, addresses);
}
@ -900,6 +902,7 @@ void main_view_chat_room_state_changed(LinphoneChatRoom *cr, LinphoneChatRoomSta
switch (newState) {
case LinphoneChatRoomStateCreated: {
LOGI(@"Chat room [%p] created on server.", cr);
linphone_chat_room_remove_callbacks(cr, linphone_chat_room_get_current_callbacks(cr));
[view goToChatRoom:cr];
if (!IPAD)
break;
@ -913,9 +916,10 @@ void main_view_chat_room_state_changed(LinphoneChatRoom *cr, LinphoneChatRoomSta
break;
}
case LinphoneChatRoomStateCreationFailed:
LOGE(@"Chat room [%p] could not be created on server.", cr);
linphone_chat_room_remove_callbacks(cr, linphone_chat_room_get_current_callbacks(cr));
view.waitView.hidden = YES;
[ChatConversationInfoView displayCreationError];
LOGE(@"Chat room [%p] could not be created on server.", cr);
break;
case LinphoneChatRoomStateTerminated:
LOGI(@"Chat room [%p] has been terminated.", cr);

@ -1 +1 @@
Subproject commit 79da08fec1b4d8f17bf3cdef0659d6dfe22a2d14
Subproject commit 9ea10688efdab858c3952c437dddce56269663d4