diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp index 81bedf9eaa4a4de1feee82c0ea3dc0522314b444..e7dac7fe2e34d2f59f2e27e1d375ec9db637b240 100644 --- a/src/conversationmodel.cpp +++ b/src/conversationmodel.cpp @@ -1177,22 +1177,25 @@ ConversationModel::clearUnreadInteractions(const QString& convId) { return; } bool emitUpdated = false; + QString lastDisplayed; { std::lock_guard<std::mutex> lk(pimpl_->interactionsLocks[convId]); auto& interactions = pimpl_->conversations[conversationIdx].interactions; std::for_each(interactions.begin(), interactions.end(), - [&] (decltype(*interactions.begin())& it) { - if (!it.second.isRead) { - emitUpdated = true; - it.second.isRead = true; - if (owner.profileInfo.type != profile::Type::SIP) { - auto daemonId = storage::getDaemonIdByInteractionId(pimpl_->db, QString::number(it.first)); - ConfigurationManager::instance().setMessageDisplayed(owner.id, pimpl_->conversations[conversationIdx].participants.front(), daemonId, 3); - } - storage::setInteractionRead(pimpl_->db, it.first); - } - }); - } + [&] (decltype(*interactions.begin())& it) { + if (!it.second.isRead) { + emitUpdated = true; + it.second.isRead = true; + if (owner.profileInfo.type != profile::Type::SIP) + lastDisplayed = storage::getDaemonIdByInteractionId(pimpl_->db, QString::number(it.first)); + storage::setInteractionRead(pimpl_->db, it.first); + } + }); + } + if (!lastDisplayed.isEmpty()) + ConfigurationManager::instance().setMessageDisplayed( + owner.id, pimpl_->conversations[conversationIdx].participants.front(), lastDisplayed, 3 + ); if (emitUpdated) { pimpl_->conversations[conversationIdx].unreadMessages = 0; pimpl_->dirtyConversations = {true, true};