From 1d900c238f88c1c3d57d31eec0e30e0782319072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 19 Mar 2020 11:42:21 -0400 Subject: [PATCH] conversationmodel: send read status Change-Id: Icc8beda4859f3f29e432ce5b3edc076f8212d44a --- src/conversationmodel.cpp | 21 ++++++++++++++------- src/qtwrapper/configurationmanager_wrap.h | 4 ++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp index b72fee84..4d4bb69c 100644 --- a/src/conversationmodel.cpp +++ b/src/conversationmodel.cpp @@ -111,14 +111,16 @@ public: const std::time_t& duration = -1); /** * Add a new message from a peer in the database - * @param from the author uri - * @param body the content of the message - * @param timestamp the timestamp of the message + * @param from the author uri + * @param body the content of the message + * @param timestamp the timestamp of the message + * @param daemonId the daemon id * @return msgId generated (in db) */ int addIncomingMessage(const QString& from, const QString& body, - const uint64_t& timestamp = 0); + const uint64_t& timestamp = 0, + const QString& daemonId = ""); /** * Change the status of an interaction. Listen from callbacksHandler * @param accountId, account linked @@ -1121,6 +1123,8 @@ ConversationModel::setInteractionRead(const QString& convId, } if (emitUpdated) { pimpl_->dirtyConversations = {true, true}; + auto daemonId = storage::getDaemonIdByInteractionId(pimpl_->db, QString::number(interactionId)); + ConfigurationManager::instance().setMessageDisplayed(owner.id, pimpl_->conversations[conversationIdx].participants.front(), daemonId, 3); storage::setInteractionRead(pimpl_->db, interactionId); emit interactionStatusUpdated(convId, interactionId, itCopy); emit pimpl_->behaviorController.newReadInteraction(owner.id, convId, interactionId); @@ -1794,8 +1798,7 @@ ConversationModelPimpl::slotNewAccountMessage(const QString& accountId, for (const auto &payload : payloads.keys()) { if (payload.contains("text/plain")) { - auto dbId = addIncomingMessage(from, payloads.value(payload)); - storage::addDaemonMsgId(db, QString::number(dbId), msgId); + addIncomingMessage(from, payloads.value(payload), 0, msgId); } } } @@ -1826,7 +1829,8 @@ ConversationModelPimpl::slotIncomingCallMessage(const QString& callId, const QSt int ConversationModelPimpl::addIncomingMessage(const QString& from, const QString& body, - const uint64_t& timestamp) + const uint64_t& timestamp, + const QString& daemonId) { auto convIds = storage::getConversationsWithPeer(db, from); if (convIds.empty()) { @@ -1836,6 +1840,9 @@ ConversationModelPimpl::addIncomingMessage(const QString& from, timestamp == 0 ? std::time(nullptr) : static_cast<time_t>(timestamp), 0, interaction::Type::TEXT, interaction::Status::SUCCESS, false}; auto msgId = storage::addMessageToConversation(db, convIds[0], msg); + if (!daemonId.isEmpty()) { + storage::addDaemonMsgId(db, QString::number(msgId), daemonId); + } auto conversationIdx = indexOf(convIds[0]); // Add the conversation if not already here if (conversationIdx == -1) { diff --git a/src/qtwrapper/configurationmanager_wrap.h b/src/qtwrapper/configurationmanager_wrap.h index 4b3ec523..e8390032 100644 --- a/src/qtwrapper/configurationmanager_wrap.h +++ b/src/qtwrapper/configurationmanager_wrap.h @@ -717,6 +717,10 @@ public Q_SLOTS: // METHODS DRing::setIsComposing(accountId.toStdString(), contactId.toStdString(), isComposing); } + bool setMessageDisplayed(const QString& accountId, const QString& contactId, const QString& messageId, int status) { + DRing::setMessageDisplayed(accountId.toStdString(), contactId.toStdString(), messageId.toStdString(), status); + } + Q_SIGNALS: // SIGNALS void volumeChanged(const QString& device, double value); void accountsChanged(); -- GitLab