From d0ca9c36ef33f2b24b362087a7092ac2578bf469 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Mon, 3 Oct 2022 17:07:39 +0200 Subject: [PATCH] Synchronize markAsRead from devices. --- linphone-app/src/components/core/CoreHandlers.cpp | 4 ++++ linphone-app/src/components/core/CoreHandlers.hpp | 3 +++ .../src/components/timeline/TimelineListModel.cpp | 13 +++++++++++++ .../src/components/timeline/TimelineListModel.hpp | 1 + 4 files changed, 21 insertions(+) diff --git a/linphone-app/src/components/core/CoreHandlers.cpp b/linphone-app/src/components/core/CoreHandlers.cpp index 135942be7..e77da4514 100644 --- a/linphone-app/src/components/core/CoreHandlers.cpp +++ b/linphone-app/src/components/core/CoreHandlers.cpp @@ -124,6 +124,10 @@ void CoreHandlers::onCallCreated(const shared_ptr &, emit callCreated(call); } +void CoreHandlers::onChatRoomRead(const std::shared_ptr & core, const std::shared_ptr & chatRoom){ + emit chatRoomRead(chatRoom); +} + void CoreHandlers::onChatRoomStateChanged( const std::shared_ptr & core, const std::shared_ptr & chatRoom, diff --git a/linphone-app/src/components/core/CoreHandlers.hpp b/linphone-app/src/components/core/CoreHandlers.hpp index 92717d58a..8331a6f4f 100644 --- a/linphone-app/src/components/core/CoreHandlers.hpp +++ b/linphone-app/src/components/core/CoreHandlers.hpp @@ -46,6 +46,7 @@ signals: void callTransferFailed (const std::shared_ptr &call); void callTransferSucceeded (const std::shared_ptr &call); void callCreated(const std::shared_ptr & call); + void chatRoomRead(const std::shared_ptr &chatRoom); void chatRoomStateChanged(const std::shared_ptr &chatRoom,linphone::ChatRoom::State state); void coreStarting(); void coreStarted (); @@ -103,6 +104,8 @@ private: const std::shared_ptr & lc, const std::shared_ptr & call ) override; + + void onChatRoomRead(const std::shared_ptr & core, const std::shared_ptr & chatRoom) override; void onChatRoomStateChanged( const std::shared_ptr & core, diff --git a/linphone-app/src/components/timeline/TimelineListModel.cpp b/linphone-app/src/components/timeline/TimelineListModel.cpp index 2b483e2bc..642026600 100644 --- a/linphone-app/src/components/timeline/TimelineListModel.cpp +++ b/linphone-app/src/components/timeline/TimelineListModel.cpp @@ -41,6 +41,7 @@ TimelineListModel::TimelineListModel (QObject *parent) : ProxyListModel(parent) { mSelectedCount = 0; CoreHandlers* coreHandlers= CoreManager::getInstance()->getHandlers().get(); + connect(coreHandlers, &CoreHandlers::chatRoomRead, this, &TimelineListModel::onChatRoomRead); connect(coreHandlers, &CoreHandlers::chatRoomStateChanged, this, &TimelineListModel::onChatRoomStateChanged); connect(coreHandlers, &CoreHandlers::messagesReceived, this, &TimelineListModel::update); connect(coreHandlers, &CoreHandlers::messagesReceived, this, &TimelineListModel::updated); @@ -56,6 +57,7 @@ TimelineListModel::TimelineListModel (QObject *parent) : ProxyListModel(parent) TimelineListModel::TimelineListModel(const TimelineListModel* model){ mSelectedCount = model->mSelectedCount; CoreHandlers* coreHandlers= CoreManager::getInstance()->getHandlers().get(); + connect(coreHandlers, &CoreHandlers::chatRoomRead, this, &TimelineListModel::onChatRoomRead); connect(coreHandlers, &CoreHandlers::chatRoomStateChanged, this, &TimelineListModel::onChatRoomStateChanged); connect(coreHandlers, &CoreHandlers::messagesReceived, this, &TimelineListModel::update); connect(coreHandlers, &CoreHandlers::messagesReceived, this, &TimelineListModel::updated); @@ -330,6 +332,17 @@ void TimelineListModel::select(ChatRoomModel * chatRoomModel){ } } +void TimelineListModel::onChatRoomRead(const std::shared_ptr &chatRoom){ + auto timeline = getTimeline(chatRoom, false); + if(timeline) { + if(timeline->getChatRoomModel()){ + timeline->getChatRoomModel()->enableMarkAsRead(true); + timeline->getChatRoomModel()->resetMessageCount(); + timeline->getChatRoomModel()->enableMarkAsRead(false); + } + } +} + void TimelineListModel::onChatRoomStateChanged(const std::shared_ptr &chatRoom,linphone::ChatRoom::State state){ if( state == linphone::ChatRoom::State::Created && !getTimeline(chatRoom, false)){// Create a new Timeline if needed diff --git a/linphone-app/src/components/timeline/TimelineListModel.hpp b/linphone-app/src/components/timeline/TimelineListModel.hpp index 271e85cdf..7e560c62f 100644 --- a/linphone-app/src/components/timeline/TimelineListModel.hpp +++ b/linphone-app/src/components/timeline/TimelineListModel.hpp @@ -62,6 +62,7 @@ public slots: void update(); void removeChatRoomModel(QSharedPointer model); void onSelectedHasChanged(bool selected); + void onChatRoomRead(const std::shared_ptr &chatRoom); void onChatRoomStateChanged(const std::shared_ptr &chatRoom,linphone::ChatRoom::State state); void onCallStateChanged (const std::shared_ptr &call, linphone::Call::State state) ; void onCallCreated(const std::shared_ptr &call);