diff --git a/src/app/conversationlistmodelbase.cpp b/src/app/conversationlistmodelbase.cpp index 3a60b53d1dfd07e6f177d78ab72df41e3eca68fc..3fc5ce470f2d6005f40d22476d36635a0fe26596 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 af2620810344e89f94dbf43a59ab02a4a759e724..23dc90071f497a605c9a7e3ba2227240448b5bb0 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_; };