diff --git a/src/api/conversationmodel.h b/src/api/conversationmodel.h index fe229198926fc4d1615f362925fc90ab8e2cdf37..26db622e984b12453c3960145c6e10987eaea05f 100644 --- a/src/api/conversationmodel.h +++ b/src/api/conversationmodel.h @@ -358,6 +358,10 @@ public: * @return number of conversations requests */ int pendingRequestCount() const; + /** + * @return number of conversations requests + unread + */ + int notificationsCount() const; const VectorString peersForConversation(const QString& conversationId); // Presentation diff --git a/src/api/newaccountmodel.h b/src/api/newaccountmodel.h index bd65a2f4b8bbd10b3853f5fc21fdd950ce7e7815..0d1c23c6a1114e85ea6f419b154fd64382062614 100644 --- a/src/api/newaccountmodel.h +++ b/src/api/newaccountmodel.h @@ -255,6 +255,10 @@ public: * @return if all moderator is enabled */ bool isAllModerators(const QString& accountID); + /** + * Get notifications count across accounts + */ + int notificationsCount() const; Q_SIGNALS: /** diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp index 18d6ba4bd437e932b2e04907f09c89b5a22f20a5..efe545321261d482f7184ae767817dd86da43099 100644 --- a/src/conversationmodel.cpp +++ b/src/conversationmodel.cpp @@ -992,6 +992,22 @@ ConversationModel::pendingRequestCount() const return pendingRequestCount; } +int +ConversationModel::notificationsCount() const +{ + int notificationsCount = 0; + std::for_each(pimpl_->conversations.begin(), + pimpl_->conversations.end(), + [¬ificationsCount](const auto& c) { + if (c.isRequest) + notificationsCount += 1; + else { + notificationsCount += c.unreadMessages; + } + }); + return notificationsCount; +} + QString ConversationModel::title(const QString& conversationId) const { @@ -2872,7 +2888,10 @@ ConversationModelPimpl::indexOfContact(const QString& uri) const if (!conversations.at(i).isCoreDialog()) { continue; } - if (peersForConversation(conversations.at(i)).front() == uri) + auto peers = peersForConversation(conversations.at(i)); + if (peers.isEmpty()) + continue; + if (peers.front() == uri) return i; } return -1; diff --git a/src/newaccountmodel.cpp b/src/newaccountmodel.cpp index 230c096758b61dcc32c35619c16a6bb9e526f2b8..3b1b67ed7e899fae6d20ffa76f6177d33921cc26 100644 --- a/src/newaccountmodel.cpp +++ b/src/newaccountmodel.cpp @@ -1209,6 +1209,16 @@ NewAccountModel::isAllModerators(const QString& accountID) return ConfigurationManager::instance().isAllModerators(accountID); } +int +NewAccountModel::notificationsCount() const +{ + auto total = 0; + for (const auto& [_id, account] : pimpl_->accounts) { + total += account.first.conversationModel->notificationsCount(); + } + return total; +} + } // namespace lrc #include "api/moc_newaccountmodel.cpp"