From 9ef94561a57df66d0dd69ba70923e19d202c6fc5 Mon Sep 17 00:00:00 2001 From: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com> Date: Tue, 15 Dec 2020 11:55:38 -0500 Subject: [PATCH] lrc: avoid excessive copying of conversation info objects 1. Container View api 2. use optional conversation info ref api Change-Id: I38aa57edc1fbf304ea0ef95d48000e0495c409ee --- src/accountadapter.cpp | 11 ++- src/avadapter.cpp | 5 +- src/avatarimageprovider.h | 6 +- src/calladapter.cpp | 151 +++++++++++++++++------------------ src/calladapter.h | 9 +-- src/contactadapter.cpp | 21 ++--- src/conversationsadapter.cpp | 47 +++++------ src/lrcinstance.h | 76 +++++------------- src/messagesadapter.cpp | 26 +++--- src/qrimageprovider.h | 4 +- src/settingsadapter.cpp | 1 + src/smartlistmodel.cpp | 78 ++++++------------ src/smartlistmodel.h | 15 ++-- src/utilsadapter.cpp | 33 ++++---- 14 files changed, 202 insertions(+), 281 deletions(-) diff --git a/src/accountadapter.cpp b/src/accountadapter.cpp index 727b2ee90..53918936b 100644 --- a/src/accountadapter.cpp +++ b/src/accountadapter.cpp @@ -379,17 +379,16 @@ AccountAdapter::connectAccount(const QString& accountId) = QObject::connect(accInfo.contactModel.get(), &lrc::api::ContactModel::contactAdded, [this, accountId](const QString& contactUri) { - auto& accInfo = LRCInstance::accountModel().getAccountInfo( - accountId); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID( + const auto& convInfo = LRCInstance::getConversationFromConvUid( LRCInstance::getCurrentConvUid()); - if (conversation.uid.isEmpty()) { + if (convInfo.uid.isEmpty()) { return; } + auto& accInfo = LRCInstance::accountModel().getAccountInfo( + accountId); if (contactUri == accInfo.contactModel - ->getContact(conversation.participants.at(0)) + ->getContact(convInfo.participants.at(0)) .profileInfo.uri) { /* * Update conversation. diff --git a/src/avadapter.cpp b/src/avadapter.cpp index cd5bcfb8e..4af8cf4bb 100644 --- a/src/avadapter.cpp +++ b/src/avadapter.cpp @@ -234,9 +234,8 @@ AvAdapter::stopAudioMeter(bool async) const QString& AvAdapter::getCurrentCallId() { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - auto call = LRCInstance::getCallInfoForConversation(conversation); + const auto& convInfo = LRCInstance::getConversationFromConvUid(LRCInstance::getCurrentConvUid()); + auto call = LRCInstance::getCallInfoForConversation(convInfo); if (!call) return QString(); return call->id; diff --git a/src/avatarimageprovider.h b/src/avatarimageprovider.h index 29d074f0c..49a4165be 100644 --- a/src/avatarimageprovider.h +++ b/src/avatarimageprovider.h @@ -19,6 +19,7 @@ #pragma once #include "utils.h" +#include "lrcinstance.h" #include <QImage> #include <QQuickImageProvider> @@ -57,9 +58,8 @@ public: return Utils::accountPhoto(LRCInstance::accountModel().getAccountInfo(idContent), requestedSize); } else if (idType == "conversation") { - auto* convModel = LRCInstance::getCurrentAccountInfo().conversationModel.get(); - const auto& conv = convModel->getConversationForUID(idContent); - return Utils::contactPhoto(conv.participants[0], requestedSize); + const auto& convInfo = LRCInstance::getConversationFromConvUid(idContent); + return Utils::contactPhoto(convInfo.participants[0], requestedSize); } else if (idType == "contact") { return Utils::contactPhoto(idContent, requestedSize); } else if (idType == "fallback") { diff --git a/src/calladapter.cpp b/src/calladapter.cpp index 9acffcc29..81df99076 100644 --- a/src/calladapter.cpp +++ b/src/calladapter.cpp @@ -1,4 +1,4 @@ -/* +/*! * Copyright (C) 2020 by Savoir-faire Linux * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com> * Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com> @@ -37,19 +37,21 @@ CallAdapter::CallAdapter(QObject* parent) connect(&LRCInstance::behaviorController(), &BehaviorController::showIncomingCallView, this, - &CallAdapter::slotShowIncomingCallView); - connect(&LRCInstance::instance(), - &LRCInstance::currentAccountChanged, - this, - &CallAdapter::slotAccountChanged); + &CallAdapter::onShowIncomingCallView); + connect(&LRCInstance::behaviorController(), &BehaviorController::showCallView, this, - &CallAdapter::slotShowCallView); + &CallAdapter::onShowCallView); + + connect(&LRCInstance::instance(), + &LRCInstance::currentAccountChanged, + this, + &CallAdapter::onAccountChanged); } void -CallAdapter::slotAccountChanged() +CallAdapter::onAccountChanged() { accountId_ = LRCInstance::getCurrAccId(); connectCallModel(accountId_); @@ -76,8 +78,7 @@ CallAdapter::placeCall() void CallAdapter::hangUpACall(const QString& accountId, const QString& convUid) { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (!convInfo.uid.isEmpty()) { LRCInstance::getAccountInfo(accountId).callModel->hangUp(convInfo.callId); } @@ -86,8 +87,7 @@ CallAdapter::hangUpACall(const QString& accountId, const QString& convUid) void CallAdapter::refuseACall(const QString& accountId, const QString& convUid) { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (!convInfo.uid.isEmpty()) { LRCInstance::getAccountInfo(accountId).callModel->refuse(convInfo.callId); } @@ -96,8 +96,7 @@ CallAdapter::refuseACall(const QString& accountId, const QString& convUid) void CallAdapter::acceptACall(const QString& accountId, const QString& convUid) { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (!convInfo.uid.isEmpty()) { LRCInstance::getAccountInfo(accountId).callModel->accept(convInfo.callId); auto& accInfo = LRCInstance::getAccountInfo(convInfo.accountId); @@ -118,11 +117,14 @@ CallAdapter::acceptACall(const QString& accountId, const QString& convUid) } void -CallAdapter::slotShowIncomingCallView(const QString& accountId, const conversation::Info& convInfo) +CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& convUid) { + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); + if (convInfo.uid.isEmpty()) { + return; + } auto selectedAccountId = LRCInstance::getCurrAccId(); auto* callModel = LRCInstance::getCurrentCallModel(); - auto* convModel = LRCInstance::getCurrentConversationModel(); if (!callModel->hasCall(convInfo.callId)) { if (QApplication::focusObject() == nullptr || accountId != selectedAccountId) { @@ -130,8 +132,8 @@ CallAdapter::slotShowIncomingCallView(const QString& accountId, const conversati return; } - const auto currentConvUid = LRCInstance::getCurrentConvUid(); - const auto currentConvInfo = convModel->getConversationForUID(currentConvUid); + const auto& currentConvInfo = LRCInstance::getConversationFromConvUid( + LRCInstance::getCurrentConvUid()); // Current call auto currentConvHasCall = callModel->hasCall(currentConvInfo.callId); @@ -164,8 +166,8 @@ CallAdapter::slotShowIncomingCallView(const QString& accountId, const conversati return; } - const auto currentConvUid = LRCInstance::getCurrentConvUid(); - const auto currentConvInfo = convModel->getConversationForUID(currentConvUid); + const auto& currentConvInfo = LRCInstance::getConversationFromConvUid( + LRCInstance::getCurrentConvUid()); // Call in current conversation auto currentConvHasCall = callModel->hasCall(currentConvInfo.callId); @@ -202,8 +204,12 @@ CallAdapter::slotShowIncomingCallView(const QString& accountId, const conversati } void -CallAdapter::slotShowCallView(const QString& accountId, const lrc::api::conversation::Info& convInfo) +CallAdapter::onShowCallView(const QString& accountId, const QString& convUid) { + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); + if (convInfo.uid.isEmpty()) { + return; + } updateCall(convInfo.uid, accountId); } @@ -213,8 +219,7 @@ CallAdapter::updateCall(const QString& convUid, const QString& accountId, bool f accountId_ = accountId.isEmpty() ? accountId_ : accountId; convUid_ = convUid.isEmpty() ? convUid_ : convUid; - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); if (convInfo.uid.isEmpty()) { return; } @@ -238,8 +243,8 @@ bool CallAdapter::shouldShowPreview(bool force) { bool shouldShowPreview {false}; - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); + if (convInfo.uid.isEmpty()) { return shouldShowPreview; } @@ -255,8 +260,7 @@ QVariantList CallAdapter::getConferencesInfos() { QVariantList map; - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); if (convInfo.uid.isEmpty()) return map; auto callId = convInfo.confId.isEmpty() ? convInfo.callId : convInfo.confId; @@ -299,18 +303,20 @@ void CallAdapter::showNotification(const QString& accountId, const QString& convUid) { QString from {}; - auto convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (!accountId.isEmpty() && !convInfo.uid.isEmpty()) { auto& accInfo = LRCInstance::getAccountInfo(accountId); if (!convInfo.participants.isEmpty()) from = accInfo.contactModel->bestNameForContact(convInfo.participants[0]); } - auto onClicked = [this, convInfo]() { - emit LRCInstance::instance().notificationClicked(); - if (!convInfo.uid.isEmpty()) { - emit callSetupMainViewRequired(convInfo.accountId, convInfo.uid); + auto onClicked = [this, accountId, convUid = convInfo.uid]() { + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); + if (convInfo.uid.isEmpty()) { + return; } + emit LRCInstance::instance().notificationClicked(); + emit callSetupMainViewRequired(convInfo.accountId, convInfo.uid); }; emit LRCInstance::instance().updateSmartList(); Utils::showNotification(tr("is calling you"), from, accountId, convUid, onClicked); @@ -331,7 +337,7 @@ CallAdapter::connectCallModel(const QString& accountId) auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId); auto& callModel = accInfo.callModel; auto call = callModel->getCall(confId); - const auto convInfo = LRCInstance::getConversationFromCallId(confId); + const auto& convInfo = LRCInstance::getConversationFromCallId(confId); bool currentMuted = false; if (!convInfo.uid.isEmpty()) { // Convert to QML @@ -371,8 +377,7 @@ CallAdapter::connectCallModel(const QString& accountId) } // Link local mute to conference mute - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); if (!convInfo.uid.isEmpty()) { auto call = LRCInstance::getCallInfoForConversation(convInfo); if (call) { @@ -397,7 +402,7 @@ CallAdapter::connectCallModel(const QString& accountId) /* * Change status label text. */ - const auto convInfo = LRCInstance::getConversationFromCallId(callId); + const auto& convInfo = LRCInstance::getConversationFromCallId(callId); if (!convInfo.uid.isEmpty()) { emit callStatusChanged(static_cast<int>(call.status), accountId, convInfo.uid); updateCallOverlay(convInfo); @@ -439,7 +444,7 @@ CallAdapter::connectCallModel(const QString& accountId) } auto currentCall = callModel->getCall(callId); if (currentCall.status == lrc::api::call::Status::IN_PROGRESS) { - auto otherConv = LRCInstance::getConversationFromCallId(callId); + const auto& otherConv = LRCInstance::getConversationFromCallId(callId); if (!otherConv.uid.isEmpty() && otherConv.uid != convInfo.uid) { /* * Reset the call view corresponding accountId, uid. @@ -454,7 +459,7 @@ CallAdapter::connectCallModel(const QString& accountId) } case lrc::api::call::Status::CONNECTED: case lrc::api::call::Status::IN_PROGRESS: { - const auto convInfo = LRCInstance::getConversationFromCallId(callId, accountId); + const auto& convInfo = LRCInstance::getConversationFromCallId(callId, accountId); if (!convInfo.uid.isEmpty() && convInfo.uid == LRCInstance::getCurrentConvUid()) { accInfo.conversationModel->selectConversation(convInfo.uid); } @@ -517,7 +522,7 @@ CallAdapter::updateCallOverlay(const lrc::api::conversation::Info& convInfo) oneSecondTimer_->start(20); auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId_); - auto call = LRCInstance::getCallInfoForConversation(convInfo); + auto* call = LRCInstance::getCallInfoForConversation(convInfo); if (!call) { return; } @@ -544,7 +549,7 @@ CallAdapter::updateCallOverlay(const lrc::api::conversation::Info& convInfo) void CallAdapter::hangupCall(const QString& uri) { - const auto convInfo = LRCInstance::getConversationFromPeerUri(uri, accountId_); + const auto& convInfo = LRCInstance::getConversationFromPeerUri(uri, accountId_); if (!convInfo.uid.isEmpty()) { auto callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); if (callModel->hasCall(convInfo.callId)) { @@ -571,11 +576,12 @@ void CallAdapter::maximizeParticipant(const QString& uri) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - auto confId = conversation.confId; + const auto& convInfo = LRCInstance::getConversationFromConvUid(LRCInstance::getCurrentConvUid(), + accountId_); + + auto confId = convInfo.confId; if (confId.isEmpty()) - confId = conversation.callId; + confId = convInfo.callId; try { auto call = callModel->getCall(confId); if (call.participantsInfos.size() > 0) { @@ -603,12 +609,12 @@ void CallAdapter::minimizeParticipant(const QString& uri) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - auto confId = conversation.confId; + const auto& convInfo = LRCInstance::getConversationFromConvUid(LRCInstance::getCurrentConvUid(), + accountId_); + auto confId = convInfo.confId; if (confId.isEmpty()) - confId = conversation.callId; + confId = convInfo.callId; try { auto call = callModel->getCall(confId); if (call.participantsInfos.size() > 0) { @@ -633,8 +639,7 @@ CallAdapter::minimizeParticipant(const QString& uri) void CallAdapter::hangUpThisCall() { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_, accountId_); if (!convInfo.uid.isEmpty()) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); if (!convInfo.confId.isEmpty() && callModel->hasCall(convInfo.confId)) { @@ -648,9 +653,8 @@ CallAdapter::hangUpThisCall() bool CallAdapter::isRecordingThisCall() { + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_, accountId_); auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId_); - auto& convModel = accInfo.conversationModel; - const auto convInfo = convModel->getConversationForUID(convUid_); return accInfo.callModel->isRecording(convInfo.confId) || accInfo.callModel->isRecording(convInfo.callId); } @@ -658,8 +662,7 @@ CallAdapter::isRecordingThisCall() bool CallAdapter::isCurrentHost() const { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_, accountId_); if (!convInfo.uid.isEmpty()) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); try { @@ -681,8 +684,7 @@ CallAdapter::isCurrentHost() const bool CallAdapter::participantIsHost(const QString& uri) const { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); if (!convInfo.uid.isEmpty()) { auto& accInfo = LRCInstance::getAccountInfo(accountId_); auto* callModel = accInfo.callModel.get(); @@ -704,11 +706,11 @@ bool CallAdapter::isModerator(const QString& uri) const { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - auto confId = conversation.confId; + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); + auto confId = convInfo.confId; + if (confId.isEmpty()) - confId = conversation.callId; + confId = convInfo.callId; try { return callModel->isModerator(confId, uri); } catch (...) { @@ -719,8 +721,7 @@ CallAdapter::isModerator(const QString& uri) const bool CallAdapter::isCurrentModerator() const { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); if (!convInfo.uid.isEmpty()) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); try { @@ -745,11 +746,10 @@ void CallAdapter::setModerator(const QString& uri, const bool state) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - auto confId = conversation.confId; + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); + auto confId = convInfo.confId; if (confId.isEmpty()) - confId = conversation.callId; + confId = convInfo.callId; try { callModel->setModerator(confId, uri, state); } catch (...) { @@ -760,11 +760,11 @@ void CallAdapter::muteParticipant(const QString& uri, const bool state) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - auto confId = conversation.confId; + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); + auto confId = convInfo.confId; + if (confId.isEmpty()) - confId = conversation.callId; + confId = convInfo.callId; try { const auto call = callModel->getCall(confId); callModel->muteParticipant(confId, uri, state); @@ -775,8 +775,7 @@ CallAdapter::muteParticipant(const QString& uri, const bool state) bool CallAdapter::isMuted(const QString& uri) const { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(convUid_); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); auto confId = convInfo.confId.isEmpty() ? convInfo.callId : convInfo.confId; try { @@ -799,11 +798,11 @@ void CallAdapter::hangupParticipant(const QString& uri) { auto* callModel = LRCInstance::getAccountInfo(accountId_).callModel.get(); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - auto confId = conversation.confId; + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid_); + auto confId = convInfo.confId; + if (confId.isEmpty()) - confId = conversation.callId; + confId = convInfo.callId; try { const auto call = callModel->getCall(confId); callModel->hangupParticipant(confId, uri); diff --git a/src/calladapter.h b/src/calladapter.h index 6d1616849..508c24cba 100644 --- a/src/calladapter.h +++ b/src/calladapter.h @@ -1,4 +1,4 @@ -/* +/*! * Copyright (C) 2020 by Savoir-faire Linux * Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com> * Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com> @@ -99,10 +99,9 @@ signals: void remoteRecordingChanged(const QStringList& peers, bool state); public slots: - void slotShowIncomingCallView(const QString& accountId, - const lrc::api::conversation::Info& convInfo); - void slotShowCallView(const QString& accountId, const lrc::api::conversation::Info& convInfo); - void slotAccountChanged(); + void onShowIncomingCallView(const QString& accountId, const QString& convUid); + void onShowCallView(const QString& accountId, const QString& convUid); + void onAccountChanged(); private: bool shouldShowPreview(bool force); diff --git a/src/contactadapter.cpp b/src/contactadapter.cpp index eff294965..00d7055d0 100644 --- a/src/contactadapter.cpp +++ b/src/contactadapter.cpp @@ -35,10 +35,7 @@ ContactAdapter::getContactSelectableModel(int type) * Called from qml every time contact picker refreshes. */ listModeltype_ = static_cast<SmartListModel::Type>(type); - smartListModel_.reset(new SmartListModel(this, - LRCInstance::getCurrAccId(), - listModeltype_, - LRCInstance::getCurrentConvUid())); + smartListModel_.reset(new SmartListModel(this, listModeltype_)); selectableProxyModel_->setSourceModel(smartListModel_.get()); /* @@ -90,9 +87,7 @@ ContactAdapter::contactSelected(int index) { auto contactIndex = selectableProxyModel_->index(index, 0); auto* callModel = LRCInstance::getCurrentCallModel(); - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); - + const auto& convInfo = LRCInstance::getConversationFromConvUid(LRCInstance::getCurrentConvUid()); if (contactIndex.isValid()) { switch (listModeltype_) { case SmartListModel::Type::CONFERENCE: { @@ -111,16 +106,15 @@ ContactAdapter::contactSelected(int index) const auto callId = LRCInstance::getCallIdForConversationUid(convUid, accId); if (!callId.isEmpty()) { - if (conversation.uid.isEmpty()) { + if (convInfo.uid.isEmpty()) { return; } - auto thisCallId = conversation.confId.isEmpty() ? conversation.callId - : conversation.confId; + auto thisCallId = convInfo.confId.isEmpty() ? convInfo.callId : convInfo.confId; callModel->joinCalls(thisCallId, callId); } else { const auto contactUri = contactIndex.data(SmartListModel::Role::URI).value<QString>(); - auto call = LRCInstance::getCallInfoForConversation(conversation); + auto call = LRCInstance::getCallInfoForConversation(convInfo); if (!call) { return; } @@ -133,11 +127,10 @@ ContactAdapter::contactSelected(int index) */ const auto contactUri = contactIndex.data(SmartListModel::Role::URI).value<QString>(); - if (conversation.uid.isEmpty()) { + if (convInfo.uid.isEmpty()) { return; } - const auto callId = conversation.confId.isEmpty() ? conversation.callId - : conversation.confId; + const auto callId = convInfo.confId.isEmpty() ? convInfo.callId : convInfo.confId; QString destCallId; diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp index 94abfca3e..caa801407 100644 --- a/src/conversationsadapter.cpp +++ b/src/conversationsadapter.cpp @@ -1,7 +1,7 @@ /*! * Copyright (C) 2020 by Savoir-faire Linux * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com> - * Author: Anthony L�onard <anthony.leonard@savoirfairelinux.com> + * Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com> * Author: Olivier Soldano <olivier.soldano@savoirfairelinux.com> * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> * Author: Isa Nanic <isa.nanic@savoirfairelinux.com> @@ -39,14 +39,14 @@ ConversationsAdapter::ConversationsAdapter(QObject* parent) void ConversationsAdapter::safeInit() { - conversationSmartListModel_ = new SmartListModel(this, LRCInstance::getCurrAccId()); + conversationSmartListModel_ = new SmartListModel(this); emit modelChanged(QVariant::fromValue(conversationSmartListModel_)); connect(&LRCInstance::behaviorController(), &BehaviorController::showChatView, - [this](const QString& accountId, lrc::api::conversation::Info convInfo) { - emit showConversation(accountId, convInfo.uid); + [this](const QString& accountId, const QString& convId) { + emit showConversation(accountId, convId); }); connect(&LRCInstance::behaviorController(), @@ -75,13 +75,16 @@ ConversationsAdapter::backToWelcomePage() void ConversationsAdapter::selectConversation(const QString& accountId, const QString& convUid) { - auto* convModel = LRCInstance::getAccountInfo(accountId).conversationModel.get(); - const auto& convInfo = convModel->getConversationForUID(convUid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (LRCInstance::getCurrentConvUid() != convInfo.uid && convInfo.participants.size() > 0) { // If the account is not currently selected, do that first, then // proceed to select the conversation. - auto selectConversation = [this, convInfo] { + auto selectConversation = [this, accountId, convUid = convInfo.uid] { + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); + if (convInfo.uid.isEmpty()) { + return; + } auto& accInfo = LRCInstance::getAccountInfo(convInfo.accountId); LRCInstance::setSelectedConvId(convInfo.uid); accInfo.conversationModel->clearUnreadInteractions(convInfo.uid); @@ -143,11 +146,10 @@ ConversationsAdapter::onNewUnreadInteraction(const QString& accountId, && (!QApplication::focusWindow() || accountId != LRCInstance::getCurrAccId() || convUid != LRCInstance::getCurrentConvUid())) { auto& accInfo = LRCInstance::getAccountInfo(accountId); - auto& contact = accInfo.contactModel->getContact(interaction.authorUri); auto from = accInfo.contactModel->bestNameForContact(interaction.authorUri); auto onClicked = [this, accountId, convUid, uri = interaction.authorUri] { emit LRCInstance::instance().notificationClicked(); - auto convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (!convInfo.uid.isEmpty()) { selectConversation(accountId, convInfo.uid); emit LRCInstance::instance().updateSmartList(); @@ -185,24 +187,25 @@ ConversationsAdapter::connectConversationModel(bool updateFilter) auto currentConversationModel = LRCInstance::getCurrentConversationModel(); modelSortedConnection_ = QObject::connect( - currentConversationModel, &lrc::api::ConversationModel::modelSorted, [this]() { + currentConversationModel, &lrc::api::ConversationModel::modelChanged, [this]() { conversationSmartListModel_->fillConversationsList(); updateConversationsFilterWidget(); emit updateListViewRequested(); + auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID( + const auto& convInfo = LRCInstance::getConversationFromConvUid( LRCInstance::getCurrentConvUid()); - if (conversation.uid.isEmpty() || conversation.participants.isEmpty()) { + if (convInfo.uid.isEmpty() || convInfo.participants.isEmpty()) { return; } - const auto contactURI = conversation.participants[0]; + const auto contactURI = convInfo.participants[0]; if (contactURI.isEmpty() || convModel->owner.contactModel->getContact(contactURI).profileInfo.type == lrc::api::profile::Type::TEMPORARY) { return; } - emit modelSorted(QVariant::fromValue(conversation.uid)); + emit modelSorted(QVariant::fromValue(convInfo.uid)); }); contactProfileUpdatedConnection_ @@ -215,9 +218,7 @@ ConversationsAdapter::connectConversationModel(bool updateFilter) modelUpdatedConnection_ = QObject::connect(currentConversationModel, &lrc::api::ConversationModel::conversationUpdated, - [this](const QString& convUid) { - conversationSmartListModel_->updateConversation( - convUid); + [this](const QString&) { updateConversationsFilterWidget(); emit updateListViewRequested(); }); @@ -309,13 +310,13 @@ ConversationsAdapter::updateConversationForNewContact(const QString& convUid) if (convModel == nullptr) { return; } - const auto selectedUid = LRCInstance::getCurrentConvUid(); - const auto conversation = convModel->getConversationForUID(convUid); - if (!conversation.uid.isEmpty() && !conversation.participants.isEmpty()) { + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid); + + if (!convInfo.uid.isEmpty() && !convInfo.participants.isEmpty()) { try { - const auto contact = convModel->owner.contactModel->getContact( - conversation.participants[0]); - if (!contact.profileInfo.uri.isEmpty() && contact.profileInfo.uri == selectedUid) { + const auto contact = convModel->owner.contactModel->getContact(convInfo.participants[0]); + if (!contact.profileInfo.uri.isEmpty() + && contact.profileInfo.uri == LRCInstance::getCurrentConvUid()) { LRCInstance::setSelectedConvId(convUid); convModel->selectConversation(convUid); } diff --git a/src/lrcinstance.h b/src/lrcinstance.h index fc0efe96c..bc5aadd2b 100644 --- a/src/lrcinstance.h +++ b/src/lrcinstance.h @@ -169,8 +169,7 @@ public: static QString getCallIdForConversationUid(const QString& convUid, const QString& accountId) { - auto& accInfo = LRCInstance::getAccountInfo(accountId); - auto convInfo = accInfo.conversationModel->getConversationForUID(convUid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (convInfo.uid.isEmpty()) { return {}; } @@ -208,68 +207,31 @@ public: } } - static const conversation::Info& getConversation(const QString& accountId, - getConvPredicate pred = {}, - bool filtered = false) - { - using namespace lrc::api; - static conversation::Info invalid = {}; - try { - auto& accInfo = LRCInstance::getAccountInfo(accountId); - auto& convModel = accInfo.conversationModel; - if (filtered) { - auto& convs = convModel->allFilteredConversations(); - auto conv = std::find_if(convs.begin(), convs.end(), pred); - if (conv != convs.end()) { - return *conv; - } - } else { - for (int i = static_cast<int>(profile::Type::RING); - i <= static_cast<int>(profile::Type::TEMPORARY); - ++i) { - auto filter = static_cast<profile::Type>(i); - auto& convs = convModel->getFilteredConversations(filter); - auto conv = std::find_if(convs.begin(), convs.end(), pred); - if (conv != convs.end()) { - return *conv; - } - } - } - } catch (...) { - } - return invalid; - } - static const conversation::Info& getConversationFromConvUid(const QString& convUid, - const QString& accountId = {}, - bool filtered = false) + const QString& accountId = {}) { - return getConversation( - !accountId.isEmpty() ? accountId : getCurrAccId(), - [&](const conversation::Info& conv) -> bool { return convUid == conv.uid; }, - filtered); + auto& accInfo = LRCInstance::accountModel().getAccountInfo( + !accountId.isEmpty() ? accountId : getCurrAccId()); + auto& convModel = accInfo.conversationModel; + return convModel->getConversationForUid(convUid).value_or(instance().invalid); } - static const conversation::Info& getConversationFromCallId(const QString& callId, - const QString& accountId = {}, - bool filtered = false) + static const conversation::Info& getConversationFromPeerUri(const QString& peerUri, + const QString& accountId = {}) { - return getConversation( - !accountId.isEmpty() ? accountId : getCurrAccId(), - [&](const conversation::Info& conv) -> bool { - return callId == conv.callId or callId == conv.confId; - }, - filtered); + auto& accInfo = LRCInstance::accountModel().getAccountInfo( + !accountId.isEmpty() ? accountId : getCurrAccId()); + auto& convModel = accInfo.conversationModel; + return convModel->getConversationForPeerUri(peerUri).value_or(instance().invalid); } - static const conversation::Info& getConversationFromPeerUri(const QString& peerUri, - const QString& accountId = {}, - bool filtered = false) + static const conversation::Info& getConversationFromCallId(const QString& callId, + const QString& accountId = {}) { - return getConversation( - !accountId.isEmpty() ? accountId : getCurrAccId(), - [&](const conversation::Info& conv) -> bool { return peerUri == conv.participants[0]; }, - filtered); + auto& accInfo = LRCInstance::accountModel().getAccountInfo( + !accountId.isEmpty() ? accountId : getCurrAccId()); + auto& convModel = accInfo.conversationModel; + return convModel->getConversationForCallId(callId).value_or(instance().invalid); } static ConversationModel* getCurrentConversationModel() @@ -469,5 +431,7 @@ private: QString selectedConvUid_; MapStringString contentDrafts_; MapStringString lastConferences_; + + conversation::Info invalid {}; }; Q_DECLARE_METATYPE(LRCInstance*) diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp index d085f57b6..cb3a12c57 100644 --- a/src/messagesadapter.cpp +++ b/src/messagesadapter.cpp @@ -51,17 +51,17 @@ MessagesAdapter::safeInit() } void -MessagesAdapter::setupChatView(const QString& uid) +MessagesAdapter::setupChatView(const QString& convUid) { auto* convModel = LRCInstance::getCurrentConversationModel(); if (convModel == nullptr) { return; } - if (currentConvUid_ == uid) + if (currentConvUid_ == convUid) return; - const auto& convInfo = convModel->getConversationForUID(uid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(convUid); if (convInfo.uid.isEmpty() || convInfo.participants.isEmpty()) { return; } @@ -93,11 +93,11 @@ MessagesAdapter::setupChatView(const QString& uid) contactIsComposing(convInfo.uid, "", false); connect(LRCInstance::getCurrentConversationModel(), &ConversationModel::composingStatusChanged, - [this](const QString& uid, const QString& contactUri, bool isComposing) { + [this](const QString& convUid, const QString& contactUri, bool isComposing) { if (!AppSettingsManager::getValue(Settings::Key::EnableTypingIndicator).toBool()) { return; } - contactIsComposing(uid, contactUri, isComposing); + contactIsComposing(convUid, contactUri, isComposing); }); /* @@ -110,7 +110,7 @@ MessagesAdapter::setupChatView(const QString& uid) requestSendMessageContent(); - currentConvUid_ = uid; + currentConvUid_ = convUid; } void @@ -167,11 +167,11 @@ void MessagesAdapter::updateConversationForAddedContact() { auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto conversation = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); + const auto& convInfo = LRCInstance::getConversationFromConvUid(LRCInstance::getCurrentConvUid()); clear(); - setConversationProfileData(conversation); - printHistory(*convModel, conversation.interactions); + setConversationProfileData(convInfo); + printHistory(*convModel, convInfo.interactions); } void @@ -205,7 +205,7 @@ void MessagesAdapter::slotMessagesCleared() { auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(LRCInstance::getCurrentConvUid()); + const auto& convInfo = LRCInstance::getConversationFromConvUid(LRCInstance::getCurrentConvUid()); printHistory(*convModel, convInfo.interactions); @@ -442,15 +442,13 @@ MessagesAdapter::onComposing(bool isComposing) void MessagesAdapter::setConversationProfileData(const lrc::api::conversation::Info& convInfo) { - auto* convModel = LRCInstance::getCurrentConversationModel(); auto accInfo = &LRCInstance::getCurrentAccountInfo(); - const auto conv = convModel->getConversationForUID(convInfo.uid); - if (conv.participants.isEmpty()) { + if (convInfo.participants.isEmpty()) { return; } - auto contactUri = conv.participants.front(); + auto contactUri = convInfo.participants.front(); if (contactUri.isEmpty()) { return; } diff --git a/src/qrimageprovider.h b/src/qrimageprovider.h index 24bb25772..9293befdc 100644 --- a/src/qrimageprovider.h +++ b/src/qrimageprovider.h @@ -54,9 +54,7 @@ public: /* * For contact_xxx, xxx is "" initially */ - - auto convModel = LRCInstance::getCurrentConversationModel(); - auto convInfo = convModel->getConversationForUID(list[1]); + const auto& convInfo = LRCInstance::getConversationFromConvUid(list[1]); auto contact = LRCInstance::getCurrentAccountInfo().contactModel->getContact( convInfo.participants.at(0)); return QPair(QrType::Contact, contact.profileInfo.uri); diff --git a/src/settingsadapter.cpp b/src/settingsadapter.cpp index a4022bac4..8dbc9adc7 100644 --- a/src/settingsadapter.cpp +++ b/src/settingsadapter.cpp @@ -115,6 +115,7 @@ SettingsAdapter::getResolutions(const QString& device) auto channelCaps = get_ResRateList(currentChannel, device); for (auto [resolution, frameRateList] : channelCaps) { for (auto rate : frameRateList) { + (void) rate; resolutions.append(resolution); } } diff --git a/src/smartlistmodel.cpp b/src/smartlistmodel.cpp index c1bda7feb..d3c425b1f 100644 --- a/src/smartlistmodel.cpp +++ b/src/smartlistmodel.cpp @@ -1,4 +1,4 @@ -/* +/*! * Copyright (C) 2017-2020 by Savoir-faire Linux * Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com> * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> @@ -25,10 +25,7 @@ #include <QDateTime> -SmartListModel::SmartListModel(QObject* parent, - const QString& accId, - SmartListModel::Type listModelType, - const QString& convUid) +SmartListModel::SmartListModel(QObject* parent, SmartListModel::Type listModelType) : QAbstractListModel(parent) , listModelType_(listModelType) { @@ -79,20 +76,20 @@ SmartListModel::data(const QModelIndex& index, int role) const } try { - auto& accountInfo = LRCInstance::accountModel().getAccountInfo(LRCInstance::getCurrAccId()); - auto& convModel = accountInfo.conversationModel; - lrc::api::conversation::Info item; + auto& currentAccountInfo = LRCInstance::accountModel().getAccountInfo( + LRCInstance::getCurrAccId()); + auto& convModel = currentAccountInfo.conversationModel; if (listModelType_ == Type::TRANSFER) { - auto filterType = accountInfo.profileInfo.type; - item = convModel->getFilteredConversations(filterType).at(index.row()); - return getConversationItemData(item, accountInfo, role); + auto filterType = currentAccountInfo.profileInfo.type; + auto& item = convModel->getFilteredConversations(filterType).at(index.row()); + return getConversationItemData(item, currentAccountInfo, role); } else if (listModelType_ == Type::CONFERENCE) { auto calls = conferenceables_[ConferenceableItem::CALL]; auto contacts = conferenceables_[ConferenceableItem::CONTACT]; - QString itemConvUid {}, itemAccId {}; + QString itemConvUid {}, itemAccountId {}; if (calls.size() == 0) { itemConvUid = contacts.at(index.row()).at(0).convId; - itemAccId = contacts.at(index.row()).at(0).accountId; + itemAccountId = contacts.at(index.row()).at(0).accountId; } else { bool callsOpen = sectionState_[tr("Calls")]; bool contactsOpen = sectionState_[tr("Contacts")]; @@ -107,7 +104,7 @@ SmartListModel::data(const QModelIndex& index, int role) const } else { auto idx = index.row() - 1; itemConvUid = calls.at(idx).at(0).convId; - itemAccId = calls.at(idx).at(0).accountId; + itemAccountId = calls.at(idx).at(0).accountId; } } else if (index.row() < contactSectionEnd) { if (index.row() == callSectionEnd) { @@ -117,20 +114,20 @@ SmartListModel::data(const QModelIndex& index, int role) const } else { auto idx = index.row() - (callSectionEnd + 1); itemConvUid = contacts.at(idx).at(0).convId; - itemAccId = contacts.at(idx).at(0).accountId; + itemAccountId = contacts.at(idx).at(0).accountId; } } } if (role == Role::AccountId) { - return QVariant(itemAccId); + return QVariant(itemAccountId); } - auto& itemAccountInfo = LRCInstance::accountModel().getAccountInfo(itemAccId); - item = itemAccountInfo.conversationModel->getConversationForUID(itemConvUid); + auto& itemAccountInfo = LRCInstance::accountModel().getAccountInfo(itemAccountId); + auto& item = LRCInstance::getConversationFromConvUid(itemConvUid, itemAccountId); return getConversationItemData(item, itemAccountInfo, role); } else if (listModelType_ == Type::CONVERSATION) { - item = conversations_.at(index.row()); - return getConversationItemData(item, accountInfo, role); + auto& item = conversations_.at(index.row()); + return getConversationItemData(item, currentAccountInfo, role); } } catch (const std::exception& e) { qWarning() << e.what(); @@ -182,30 +179,12 @@ SmartListModel::fillConversationsList() fillContactAvatarUidMap(LRCInstance::getCurrentAccountInfo().contactModel->getAllContacts()); auto* convModel = LRCInstance::getCurrentConversationModel(); - conversations_.clear(); - - for (auto convSearch : convModel->getAllSearchResults()) { - conversations_.emplace_back(convSearch); - } - - for (auto convFilt : convModel->allFilteredConversations()) { - conversations_.emplace_back(convFilt); - } + using ConversationList = ConversationModel::ConversationQueueProxy; + conversations_ = ConversationList(convModel->getAllSearchResults()) + + convModel->allFilteredConversations(); endResetModel(); } -void -SmartListModel::updateConversation(const QString& convUid) -{ - auto* convModel = LRCInstance::getCurrentConversationModel(); - for (lrc::api::conversation::Info& conversation : conversations_) { - if (conversation.uid == convUid) { - conversation = convModel->getConversationForUID(convUid); - return; - } - } -} - void SmartListModel::updateContactAvatarUid(const QString& contactUri) { @@ -336,8 +315,7 @@ SmartListModel::getConversationItemData(const conversation::Info& item, case Role::UID: return QVariant(item.uid); case Role::InCall: { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(item.uid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(item.uid); if (!convInfo.uid.isEmpty()) { auto* callModel = LRCInstance::getCurrentCallModel(); return QVariant(callModel->hasCall(convInfo.callId)); @@ -345,8 +323,7 @@ SmartListModel::getConversationItemData(const conversation::Info& item, return QVariant(false); } case Role::IsAudioOnly: { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(item.uid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(item.uid); if (!convInfo.uid.isEmpty()) { auto* call = LRCInstance::getCallInfoForConversation(convInfo); if (call) { @@ -356,11 +333,10 @@ SmartListModel::getConversationItemData(const conversation::Info& item, return QVariant(); } case Role::CallStackViewShouldShow: { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(item.uid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(item.uid); if (!convInfo.uid.isEmpty()) { auto* callModel = LRCInstance::getCurrentCallModel(); - const auto call = callModel->getCall(convInfo.callId); + const auto& call = callModel->getCall(convInfo.callId); return QVariant( callModel->hasCall(convInfo.callId) && ((!call.isOutgoing @@ -372,11 +348,9 @@ SmartListModel::getConversationItemData(const conversation::Info& item, return QVariant(false); } case Role::CallState: { - auto* convModel = LRCInstance::getCurrentConversationModel(); - const auto convInfo = convModel->getConversationForUID(item.uid); + const auto& convInfo = LRCInstance::getConversationFromConvUid(item.uid); if (!convInfo.uid.isEmpty()) { - auto* call = LRCInstance::getCallInfoForConversation(convInfo); - if (call) { + if (auto* call = LRCInstance::getCallInfoForConversation(convInfo)) { return QVariant(static_cast<int>(call->status)); } } diff --git a/src/smartlistmodel.h b/src/smartlistmodel.h index ccf7a0fea..357dd0c94 100644 --- a/src/smartlistmodel.h +++ b/src/smartlistmodel.h @@ -64,9 +64,7 @@ public: Q_ENUM(Role) explicit SmartListModel(QObject* parent = 0, - const QString& accId = {}, - SmartListModel::Type listModelType = Type::CONVERSATION, - const QString& convUid = {}); + SmartListModel::Type listModelType = Type::CONVERSATION); ~SmartListModel(); /* @@ -76,15 +74,16 @@ public: int columnCount(const QModelIndex& parent) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; QHash<int, QByteArray> roleNames() const override; - QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex& child) const; - Qt::ItemFlags flags(const QModelIndex& index) const; + QModelIndex index(int row, + int column = 0, + const QModelIndex& parent = QModelIndex()) const override; + QModelIndex parent(const QModelIndex& child) const override; + Qt::ItemFlags flags(const QModelIndex& index) const override; Q_INVOKABLE void setConferenceableFilter(const QString& filter = {}); Q_INVOKABLE void toggleSection(const QString& section); Q_INVOKABLE int currentUidSmartListModelIndex(); Q_INVOKABLE void fillConversationsList(); - Q_INVOKABLE void updateConversation(const QString& conv); /* * This function is to update contact avatar uuid for current account when there's an contact @@ -109,5 +108,5 @@ private: QMap<QString, bool> sectionState_; QMap<ConferenceableItem, ConferenceableValue> conferenceables_; QMap<QString, QString> contactAvatarUidMap_; - ConversationModel::ConversationQueue conversations_; + ConversationModel::ConversationQueueProxy conversations_; }; diff --git a/src/utilsadapter.cpp b/src/utilsadapter.cpp index b25130e08..70124de99 100644 --- a/src/utilsadapter.cpp +++ b/src/utilsadapter.cpp @@ -1,4 +1,4 @@ -/* +/*! * Copyright (C) 2015-2020 by Savoir-faire Linux * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com> * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> @@ -103,7 +103,7 @@ UtilsAdapter::checkStartupLink() const QString UtilsAdapter::getBestName(const QString& accountId, const QString& uid) { - auto conv = LRCInstance::getConversationFromConvUid(uid); + const auto& conv = LRCInstance::getConversationFromConvUid(uid); if (!conv.participants.isEmpty()) return LRCInstance::getAccountInfo(accountId).contactModel->bestNameForContact( conv.participants[0]); @@ -121,7 +121,7 @@ UtilsAdapter::getBestId(const QString& accountId) const QString UtilsAdapter::getBestId(const QString& accountId, const QString& uid) { - auto conv = LRCInstance::getConversationFromConvUid(uid); + const auto& conv = LRCInstance::getConversationFromConvUid(uid); if (!conv.participants.isEmpty()) return LRCInstance::getAccountInfo(accountId).contactModel->bestIdForContact( conv.participants[0]); @@ -134,12 +134,12 @@ UtilsAdapter::getTotalUnreadMessages() int totalUnreadMessages {0}; if (LRCInstance::getCurrentAccountInfo().profileInfo.type != lrc::api::profile::Type::SIP) { auto* convModel = LRCInstance::getCurrentConversationModel(); - auto ringConversations = convModel->getFilteredConversations(lrc::api::profile::Type::RING); - std::for_each(ringConversations.begin(), - ringConversations.end(), - [&totalUnreadMessages](const auto& conversation) { - totalUnreadMessages += conversation.unreadMessages; - }); + auto ringConversations = convModel->getFilteredConversations(lrc::api::profile::Type::RING, + false); + ringConversations.for_each( + [&totalUnreadMessages](const lrc::api::conversation::Info& conversation) { + totalUnreadMessages += conversation.unreadMessages; + }); } return totalUnreadMessages; } @@ -197,7 +197,7 @@ void UtilsAdapter::setCurrentCall(const QString& accountId, const QString& convUid) { auto& accInfo = LRCInstance::getAccountInfo(accountId); - const auto convInfo = accInfo.conversationModel->getConversationForUID(convUid); + auto const& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); accInfo.callModel->setCurrentCall(convInfo.callId); } @@ -230,19 +230,16 @@ UtilsAdapter::getCallConvForAccount(const QString& accountId) const QString UtilsAdapter::getCallId(const QString& accountId, const QString& convUid) { - auto& accInfo = LRCInstance::getAccountInfo(accountId); - const auto convInfo = accInfo.conversationModel->getConversationForUID(convUid); - + auto const& convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId); if (convInfo.uid.isEmpty()) { - return ""; + return {}; } - auto call = LRCInstance::getCallInfoForConversation(convInfo, false); - if (!call) { - return ""; + if (auto* call = LRCInstance::getCallInfoForConversation(convInfo, false)) { + return call->id; } - return call->id; + return {}; } int -- GitLab