From 05de1c37834224920f8155d36965c95aebf784a2 Mon Sep 17 00:00:00 2001 From: Danmei Chen Date: Wed, 15 Apr 2020 21:13:03 +0200 Subject: [PATCH] fix crash of null chat room --- Classes/ChatConversationView.h | 1 + Classes/ChatConversationView.m | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Classes/ChatConversationView.h b/Classes/ChatConversationView.h index 6884b9985..29c8c3e43 100644 --- a/Classes/ChatConversationView.h +++ b/Classes/ChatConversationView.h @@ -54,6 +54,7 @@ BOOL composingVisible; UIConfirmationDialog *securityDialog; UIRefreshControl *refreshControl; + BOOL isOneToOne; } @property(nonatomic) LinphoneChatRoom *chatRoom; diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m index c67003013..f876e9a08 100644 --- a/Classes/ChatConversationView.m +++ b/Classes/ChatConversationView.m @@ -67,6 +67,7 @@ _chatRoom = NULL; _chatRoomCbs = NULL; securityDialog = NULL; + isOneToOne = TRUE; imageQualities = [[OrderedDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithFloat:0.9], NSLocalizedString(@"Maximum", nil), [NSNumber numberWithFloat:0.5], NSLocalizedString(@"Average", nil), @@ -227,6 +228,11 @@ static UICompositeViewDescription *compositeDescription = nil; // force offset recomputing [_messageField refreshHeight]; + LinphoneAddress *peerAddr = linphone_core_create_address([LinphoneManager getLc], _peerAddress); + if (peerAddr) { + _chatRoom = linphone_core_get_chat_room([LinphoneManager getLc], peerAddr); + isOneToOne = linphone_chat_room_get_capabilities(_chatRoom) & LinphoneChatRoomCapabilitiesOneToOne; + } [self configureForRoom:true]; _backButton.hidden = _tableController.isEditing; [_tableController scrollToBottom:true]; @@ -268,8 +274,7 @@ static UICompositeViewDescription *compositeDescription = nil; [self callUpdateEvent:nil]; PhoneMainView.instance.currentRoom = _chatRoom; - LinphoneChatRoomCapabilitiesMask capabilities = linphone_chat_room_get_capabilities(_chatRoom); - if (capabilities & LinphoneChatRoomCapabilitiesOneToOne) { + if (isOneToOne) { bctbx_list_t *participants = linphone_chat_room_get_participants(_chatRoom); LinphoneParticipant *firstParticipant = participants ? (LinphoneParticipant *)participants->data : NULL; const LinphoneAddress *addr = firstParticipant ? linphone_participant_get_address(firstParticipant) : linphone_chat_room_get_peer_address(_chatRoom); @@ -290,8 +295,7 @@ static UICompositeViewDescription *compositeDescription = nil; } - (void)configureMessageField { - LinphoneChatRoomCapabilitiesMask capabilities = linphone_chat_room_get_capabilities(_chatRoom); - if (capabilities & LinphoneChatRoomCapabilitiesOneToOne) { + if (isOneToOne) { _messageField.editable = TRUE; _pictureButton.enabled = TRUE; _messageView.userInteractionEnabled = TRUE; @@ -372,6 +376,7 @@ static UICompositeViewDescription *compositeDescription = nil; LinphoneAddress *peerAddr = linphone_core_create_address([LinphoneManager getLc], _peerAddress); if (peerAddr) { _chatRoom = linphone_core_get_chat_room([LinphoneManager getLc], peerAddr); + isOneToOne = linphone_chat_room_get_capabilities(_chatRoom) & LinphoneChatRoomCapabilitiesOneToOne; } [self configureForRoom:self.editing]; if (_chatRoom && _markAsRead) { @@ -533,15 +538,13 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)updateSuperposedButtons { [_backToCallButton update]; - BOOL isOneToOneChat = _chatRoom && (linphone_chat_room_get_capabilities(_chatRoom) & LinphoneChatRoomCapabilitiesOneToOne); - _infoButton.hidden = (isOneToOneChat|| !_backToCallButton.hidden || _tableController.tableView.isEditing); + _infoButton.hidden = (isOneToOne|| !_backToCallButton.hidden || _tableController.tableView.isEditing); _callButton.hidden = !_backToCallButton.hidden || !_infoButton.hidden || _tableController.tableView.isEditing; } - (void)updateParticipantLabel { - LinphoneChatRoomCapabilitiesMask capabilities = linphone_chat_room_get_capabilities(_chatRoom); CGRect frame = _addressLabel.frame; - if (capabilities & LinphoneChatRoomCapabilitiesOneToOne) { + if (isOneToOne) { _particpantsLabel.hidden = TRUE; frame.origin.y = (_topBar.frame.size.height - _addressLabel.frame.size.height)/2; } else { @@ -648,8 +651,7 @@ static UICompositeViewDescription *compositeDescription = nil; for (i = 0; i < [_imagesArray count] - 1; ++i) { [self startImageUpload:[_imagesArray objectAtIndex:i] assetId:[_assetIdsArray objectAtIndex:i] withQuality:[_qualitySettingsArray objectAtIndex:i].floatValue]; } - BOOL isOneToOneChat = linphone_chat_room_get_capabilities(_chatRoom) & LinphoneChatRoomCapabilitiesOneToOne; - if (isOneToOneChat) { + if (isOneToOne) { [self startImageUpload:[_imagesArray objectAtIndex:i] assetId:[_assetIdsArray objectAtIndex:i] withQuality:[_qualitySettingsArray objectAtIndex:i].floatValue]; if (![[self.messageField text] isEqualToString:@""]) { [self sendMessage:[_messageField text] withExterlBodyUrl:nil withInternalURL:nil];