From 9207dfcd5b1c3ec10eb091ffd85c2f06437895dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Mon, 13 Mar 2023 10:31:13 -0400 Subject: [PATCH] conversationlist: save linked account This avoid some "contact not found" messages if a delegate is checked while changing the account. Change-Id: I05c4affa93a972ac95578507bd8263706e90298b --- src/app/conversationlistmodelbase.cpp | 30 +++++++++++++++------------ src/app/conversationlistmodelbase.h | 1 + 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/app/conversationlistmodelbase.cpp b/src/app/conversationlistmodelbase.cpp index 3a60b53d1..3fc5ce470 100644 --- a/src/app/conversationlistmodelbase.cpp +++ b/src/app/conversationlistmodelbase.cpp @@ -23,7 +23,12 @@ ConversationListModelBase::ConversationListModelBase(LRCInstance* instance, QObj : AbstractListModelBase(parent) { lrcInstance_ = instance; - model_ = lrcInstance_->getCurrentConversationModel(); + try { + auto& accInfo = lrcInstance_->getCurrentAccountInfo(); + accountId_ = accInfo.id; + model_ = accInfo.conversationModel.get(); + } catch (...) { + } } int @@ -47,12 +52,12 @@ ConversationListModelBase::roleNames() const QVariant ConversationListModelBase::dataForItem(item_t item, int role) const { + auto& accInfo = lrcInstance_->getAccountInfo(accountId_); switch (role) { case Role::InCall: { const auto& convInfo = lrcInstance_->getConversationFromConvUid(item.uid); if (!convInfo.uid.isEmpty()) { - auto* callModel = lrcInstance_->getCurrentCallModel(); - return QVariant(callModel->hasCall(convInfo.callId)); + return QVariant(accInfo.callModel->hasCall(convInfo.callId)); } return QVariant(false); } @@ -69,9 +74,8 @@ ConversationListModelBase::dataForItem(item_t item, int role) const case Role::CallStackViewShouldShow: { const auto& convInfo = lrcInstance_->getConversationFromConvUid(item.uid); if (!convInfo.uid.isEmpty() && !convInfo.callId.isEmpty()) { - auto* callModel = lrcInstance_->getCurrentCallModel(); - const auto& call = callModel->getCall(convInfo.callId); - return QVariant(callModel->hasCall(convInfo.callId) + const auto& call = accInfo.callModel->getCall(convInfo.callId); + return QVariant(accInfo.callModel->hasCall(convInfo.callId) && ((!call.isOutgoing && (call.status == call::Status::IN_PROGRESS || call.status == call::Status::PAUSED @@ -141,7 +145,7 @@ ConversationListModelBase::dataForItem(item_t item, int role) const QStringList ret; Q_FOREACH (const auto& peerUri, model_->peersForConversation(item.uid)) try { - auto& accInfo = lrcInstance_->getCurrentAccountInfo(); + auto& accInfo = lrcInstance_->getAccountInfo(accountId_); auto contact = accInfo.contactModel->getContact(peerUri); ret << contact.profileInfo.alias << contact.registeredName; } catch (const std::exception&) { @@ -152,7 +156,7 @@ ConversationListModelBase::dataForItem(item_t item, int role) const // The conversation can show a green dot if at least one peer is present Q_FOREACH (const auto& peerUri, model_->peersForConversation(item.uid)) try { - auto& accInfo = lrcInstance_->getCurrentAccountInfo(); + auto& accInfo = lrcInstance_->getAccountInfo(accountId_); if (peerUri == accInfo.profileInfo.uri) return true; // Self account auto contact = accInfo.contactModel->getContact(peerUri); @@ -171,7 +175,7 @@ ConversationListModelBase::dataForItem(item_t item, int role) const if (peerUriList.isEmpty()) return {}; auto peerUri = peerUriList.at(0); - auto& accInfo = lrcInstance_->getCurrentAccountInfo(); + auto& accInfo = lrcInstance_->getAccountInfo(accountId_); if (peerUri == accInfo.profileInfo.uri) { // Conversation alone with self switch (role) { @@ -186,8 +190,7 @@ ConversationListModelBase::dataForItem(item_t item, int role) const case Role::IsBanned: return QVariant(false); case Role::ContactType: - return QVariant( - static_cast<int>(accInfo.profileInfo.type)); + return QVariant(static_cast<int>(accInfo.profileInfo.type)); } } ContactModel* contactModel; @@ -196,8 +199,9 @@ ConversationListModelBase::dataForItem(item_t item, int role) const try { contact = contactModel->getContact(peerUri); } catch (const std::exception&) { - qWarning() << Q_FUNC_INFO << "Can't find contact" << peerUri - << " this is a bug, please report"; + qWarning() << Q_FUNC_INFO << "Can't find contact" << peerUri << " for account " + << lrcInstance_->accountModel().bestNameForAccount(accInfo.id) + << " - Conv: " << item.uid; } switch (role) { diff --git a/src/app/conversationlistmodelbase.h b/src/app/conversationlistmodelbase.h index af2620810..23dc90071 100644 --- a/src/app/conversationlistmodelbase.h +++ b/src/app/conversationlistmodelbase.h @@ -81,4 +81,5 @@ protected: // Convenience pointer to be pulled from lrcinstance ConversationModel* model_; + QString accountId_; }; -- GitLab