diff --git a/src/CurrentCallVC.mm b/src/CurrentCallVC.mm index 587ba8331d1a7404a7322a73704c19050659246b..9ff78435decd00a03e7283c507d9913ee1e82ca8 100644 --- a/src/CurrentCallVC.mm +++ b/src/CurrentCallVC.mm @@ -162,8 +162,11 @@ CVPixelBufferRef pixelBufferPreview; callUid_ = callUid; convUid_ = convUid; accountInfo_ = account; - auto convIt = getConversationFromUid(convUid_, *accountInfo_->conversationModel); - confUid_ = convIt->confId; + auto conv = accountInfo_->conversationModel->getConversationForUID(convUid_); + if (conv.uid.isEmpty()) { + return; + } + confUid_ = conv.confId; [self.chatVC setConversationUid:convUid model:account->conversationModel.get()]; [self connectSignals]; } @@ -190,17 +193,14 @@ CVPixelBufferRef pixelBufferPreview; } } --(void)switchToNextConferenceCall { +-(void)switchToNextConferenceCall:(QString)confId { auto* callModel = accountInfo_->callModel.get(); - if (!callModel->hasCall(confUid_)) { - return; - } AppDelegate* appDelegate = (AppDelegate *)[[NSApplication sharedApplication] delegate]; auto activeCalls = [appDelegate getActiveCalls]; if (activeCalls.isEmpty()) { return; } - auto subcalls = [appDelegate getConferenceSubcalls: confUid_]; + auto subcalls = [appDelegate getConferenceSubcalls: confId]; QString callId; if (subcalls.isEmpty()) { for(auto subcall: activeCalls) { @@ -271,21 +271,17 @@ CVPixelBufferRef pixelBufferPreview; QObject::connect(accountInfo_->contactModel.get(), &lrc::api::ContactModel::contactAdded, [self](const QString &contactUri) { - auto convIt = getConversationFromUid(convUid_, *accountInfo_->conversationModel.get()); - if (convIt == accountInfo_->conversationModel->allFilteredConversations().end()) { - return; - } - if (convIt->participants.empty()) { - return; - - } - auto& contact = accountInfo_->contactModel->getContact(convIt->participants[0]); - if (contact.profileInfo.type == lrc::api::profile::Type::RING && contact.profileInfo.uri == contactUri) - accountInfo_->conversationModel->makePermanent(convUid_); - [contactPhoto setImage: [self getContactImageOfSize:120.0 withDefaultAvatar:YES]]; - [self.delegate conversationInfoUpdatedFor:convUid_]; - [self setBackground]; - }); + auto conv = accountInfo_->conversationModel->getConversationForUID(convUid_); + if (conv.uid.isEmpty() || conv.participants.empty()) { + return; + } + auto& contact = accountInfo_->contactModel->getContact(conv.participants[0]); + if (contact.profileInfo.type == lrc::api::profile::Type::RING && contact.profileInfo.uri == contactUri) + accountInfo_->conversationModel->makePermanent(convUid_); + [contactPhoto setImage: [self getContactImageOfSize:120.0 withDefaultAvatar:YES]]; + [self.delegate conversationInfoUpdatedFor:convUid_]; + [self setBackground]; + }); [self connectVideoSignals]; } @@ -448,18 +444,18 @@ CVPixelBufferRef pixelBufferPreview; } auto currentCall = callModel->getCall(callUid_); - auto convIt = getConversationFromUid(convUid_, *accountInfo_->conversationModel); - if (conversationExists(convIt, *accountInfo_->conversationModel)) { - NSString* bestName = bestNameForConversation(*convIt, *accountInfo_->conversationModel); + auto convIt = accountInfo_->conversationModel->getConversationForUID(convUid_); + if (!convIt.uid.isEmpty()) { + NSString* bestName = bestNameForConversation(convIt, *accountInfo_->conversationModel); [contactNameLabel setStringValue:bestName]; - NSString* ringID = bestIDForConversation(*convIt, *accountInfo_->conversationModel); + NSString* ringID = bestIDForConversation(convIt, *accountInfo_->conversationModel); if([bestName isEqualToString:ringID]) { ringID = @""; } [contactIdLabel setStringValue:ringID]; } [self setupContactInfo:contactPhoto]; - confUid_ = convIt->confId; + confUid_ = convIt.confId; [muteAudioButton setHidden:!confUid_.isEmpty()]; [muteVideoButton setHidden:!confUid_.isEmpty()]; [recordOnOffButton setHidden:!confUid_.isEmpty()]; @@ -563,7 +559,7 @@ CVPixelBufferRef pixelBufferPreview; connectingCalls[callUid_.toNSString()] = nil; [self removeConferenceLayout ]; [self.delegate callFinished]; - [self switchToNextConferenceCall]; + [self switchToNextConferenceCall: confUid_]; break; } } @@ -621,16 +617,16 @@ CVPixelBufferRef pixelBufferPreview; -(NSImage *) getContactImageOfSize: (double) size withDefaultAvatar:(BOOL) shouldDrawDefault { auto* convModel = accountInfo_->conversationModel.get(); - auto convIt = getConversationFromUid(convUid_, *convModel); - if (convIt == convModel->allFilteredConversations().end()) { + auto conv = accountInfo_->conversationModel->getConversationForUID(convUid_); + if (conv.uid.isEmpty() || conv.participants.empty()) { return nil; } if(shouldDrawDefault) { auto& imgManip = reinterpret_cast<Interfaces::ImageManipulationDelegate&>(GlobalInstances::pixmapManipulator()); - QVariant photo = imgManip.conversationPhoto(*convIt, *accountInfo_, QSize(size, size), NO); + QVariant photo = imgManip.conversationPhoto(conv, *accountInfo_, QSize(size, size), NO); return QtMac::toNSImage(qvariant_cast<QPixmap>(photo)); } - auto contact = accountInfo_->contactModel->getContact(convIt->participants[0]); + auto contact = accountInfo_->contactModel->getContact(conv.participants[0]); NSData *imageData = [[NSData alloc] initWithBase64EncodedString:contact.profileInfo.avatar.toNSString() options:NSDataBase64DecodingIgnoreUnknownCharacters]; return [[NSImage alloc] initWithData:imageData]; } @@ -949,15 +945,16 @@ CVPixelBufferRef pixelBufferPreview; return; // If we accept a conversation with a non trusted contact, we first accept it - auto convIt = getConversationFromUid(convUid_, *accountInfo_->conversationModel.get()); - if (convIt != accountInfo_->conversationModel->allFilteredConversations().end()) { - auto& contact = accountInfo_->contactModel->getContact(convIt->participants[0]); - if (contact.profileInfo.type == lrc::api::profile::Type::PENDING) - accountInfo_->conversationModel->makePermanent(convUid_); + auto conv = accountInfo_->conversationModel->getConversationForUID(convUid_); + if (conv.uid.isEmpty() || conv.participants.empty()) { + return; + } + auto& contact = accountInfo_->contactModel->getContact(conv.participants[0]); + if (contact.profileInfo.type == lrc::api::profile::Type::PENDING) { + accountInfo_->conversationModel->makePermanent(convUid_); } auto* callModel = accountInfo_->callModel.get(); - callModel->accept(callUid_); } @@ -1311,15 +1308,16 @@ CVPixelBufferRef pixelBufferPreview; } -(BOOL)isMasterCall { - auto convIt = getConversationFromUid(convUid_, *accountInfo_->conversationModel); - if (convIt->uid.isEmpty()) { - return true; + auto conv = accountInfo_->conversationModel->getConversationForUID(convUid_); + if (conv.uid.isEmpty()) { + return false; } + auto* callModel = accountInfo_->callModel.get(); - if (!convIt->confId.isEmpty() && callModel->hasCall(convIt->confId)) { + if (!conv.confId.isEmpty() && callModel->hasCall(conv.confId)) { return true; } else { - auto call = callModel->getCall(convIt->callId); + auto call = callModel->getCall(conv.callId); return call.participantsInfos.size() == 0; } }