From 5fbe8603eac4cf1e68a4369c1578e68eaed7f74f Mon Sep 17 00:00:00 2001 From: Christophe Deschamps Date: Tue, 27 May 2025 18:25:26 +0200 Subject: [PATCH] Move back to the lastMessage paradigm instead of lastEvent --- Linphone/core/chat/ChatCore.cpp | 37 +++++++++++++-------------------- Linphone/core/chat/ChatCore.hpp | 15 ++++++------- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/Linphone/core/chat/ChatCore.cpp b/Linphone/core/chat/ChatCore.cpp index a46e6024b..c5015a1df 100644 --- a/Linphone/core/chat/ChatCore.cpp +++ b/Linphone/core/chat/ChatCore.cpp @@ -75,8 +75,7 @@ ChatCore::ChatCore(const std::shared_ptr &chatRoom) : QObjec mChatModel = Utils::makeQObject_ptr(chatRoom); mChatModel->setSelf(mChatModel); auto lastMessage = chatRoom->getLastMessageInHistory(); - auto lastEvent = lastMessage ? chatRoom->findEventLog(lastMessage->getMessageId()) : nullptr; - mLastEvent = lastEvent ? EventLogCore::create(lastEvent) : nullptr; + mLastMessage = lastMessage ? ChatMessageCore::create(lastMessage) : nullptr; int filter = mIsGroupChat ? static_cast(linphone::ChatRoom::HistoryFilter::ChatMessage) | static_cast(linphone::ChatRoom::HistoryFilter::InfoNoDevice) @@ -191,16 +190,12 @@ void ChatCore::setSelf(QSharedPointer me) { }); mChatModelConnection->makeConnectToCore(&ChatCore::lUpdateLastMessage, [this]() { - auto lastMessageModel = - mLastEvent && mLastEvent->getChatMessageCore() ? mLastEvent->getChatMessageCore()->getModel() : nullptr; + auto lastMessageModel = mLastMessage ? mLastMessage->getModel() : nullptr; mChatModelConnection->invokeToModel([this, lastMessageModel]() { auto linphoneMessage = mChatModel->getLastChatMessage(); if (!lastMessageModel || lastMessageModel->getMonitor() != linphoneMessage) { - auto lastEvent = linphoneMessage->getChatRoom()->findEventLog(linphoneMessage->getMessageId()); - if (lastEvent) { - auto eventLogCore = EventLogCore::create(lastEvent); - mChatModelConnection->invokeToCore([this, eventLogCore]() { setLastEvent(eventLogCore); }); - } + auto chatMessageCore = ChatMessageCore::create(linphoneMessage); + mChatModelConnection->invokeToCore([this, chatMessageCore]() { setLastMessage(chatMessageCore); }); } }); }); @@ -300,12 +295,11 @@ void ChatCore::setAvatarUri(QString avatarUri) { } QString ChatCore::getLastMessageText() const { - return mLastEvent && mLastEvent->getChatMessageCore() ? mLastEvent->getChatMessageCore()->getText() : QString(); + return mLastMessage ? mLastMessage->getText() : QString(); } LinphoneEnums::ChatMessageState ChatCore::getLastMessageState() const { - return mLastEvent && mLastEvent->getChatMessageCore() ? mLastEvent->getChatMessageCore()->getMessageState() - : LinphoneEnums::ChatMessageState::StateIdle; + return mLastMessage ? mLastMessage->getMessageState() : LinphoneEnums::ChatMessageState::StateIdle; } LinphoneEnums::ChatRoomState ChatCore::getChatRoomState() const { @@ -330,19 +324,16 @@ bool ChatCore::getIsReadOnly() const { return mIsReadOnly; } -EventLogGui *ChatCore::getLastEvent() const { - return mLastEvent ? new EventLogGui(mLastEvent) : nullptr; +ChatMessageGui *ChatCore::getLastMessage() const { + return mLastMessage ? new ChatMessageGui(mLastMessage) : nullptr; } -void ChatCore::setLastEvent(QSharedPointer lastEvent) { - if (mLastEvent != lastEvent) { - auto chatCore = mLastEvent->getChatMessageCore(); - if (chatCore) disconnect(chatCore.get()); - mLastEvent = lastEvent; - if (mLastEvent->getChatMessageCore()) - connect(mLastEvent->getChatMessageCore().get(), &ChatMessageCore::messageStateChanged, this, - &ChatCore::lastEventChanged); - emit lastEventChanged(); +void ChatCore::setLastMessage(QSharedPointer lastMessage) { + if (mLastMessage != lastMessage) { + disconnect(mLastMessage.get()); + mLastMessage = lastMessage; + connect(mLastMessage.get(), &ChatMessageCore::messageStateChanged, this, &ChatCore::lastMessageChanged); + emit lastMessageChanged(); } } diff --git a/Linphone/core/chat/ChatCore.hpp b/Linphone/core/chat/ChatCore.hpp index 7854cc3b3..89dde0f65 100644 --- a/Linphone/core/chat/ChatCore.hpp +++ b/Linphone/core/chat/ChatCore.hpp @@ -22,6 +22,7 @@ #define CHAT_CORE_H_ #include "core/chat/message/EventLogGui.hpp" +#include "message/ChatMessageGui.hpp" #include "model/chat/ChatModel.hpp" #include "model/search/MagicSearchModel.hpp" #include "tool/LinphoneEnums.hpp" @@ -42,9 +43,9 @@ public: Q_PROPERTY(QString chatRoomAddress READ getChatRoomAddress CONSTANT) Q_PROPERTY(QString avatarUri READ getAvatarUri WRITE setAvatarUri NOTIFY avatarUriChanged) Q_PROPERTY(QDateTime lastUpdatedTime READ getLastUpdatedTime WRITE setLastUpdatedTime NOTIFY lastUpdatedTimeChanged) - Q_PROPERTY(QString lastMessageText READ getLastMessageText NOTIFY lastEventChanged) - Q_PROPERTY(EventLogGui *lastEvent READ getLastEvent NOTIFY lastEventChanged) - Q_PROPERTY(LinphoneEnums::ChatMessageState lastMessageState READ getLastMessageState NOTIFY lastEventChanged) + Q_PROPERTY(QString lastMessageText READ getLastMessageText NOTIFY lastMessageChanged) + Q_PROPERTY(ChatMessageGui *lastMessage READ getLastMessage NOTIFY lastMessageChanged) + Q_PROPERTY(LinphoneEnums::ChatMessageState lastMessageState READ getLastMessageState NOTIFY lastMessageChanged) Q_PROPERTY(LinphoneEnums::ChatRoomState state READ getChatRoomState NOTIFY chatRoomStateChanged) Q_PROPERTY(int unreadMessagesCount READ getUnreadMessagesCount WRITE setUnreadMessagesCount NOTIFY unreadMessagesCountChanged) @@ -76,7 +77,7 @@ public: QString getSendingText() const; void setSendingText(const QString &text); - EventLogGui *getLastEvent() const; + ChatMessageGui *getLastMessage() const; QString getLastMessageText() const; LinphoneEnums::ChatMessageState getLastMessageState() const; @@ -88,7 +89,7 @@ public: void setIsReadOnly(bool readOnly); QSharedPointer getLastMessageCore() const; - void setLastEvent(QSharedPointer lastEvent); + void setLastMessage(QSharedPointer lastMessage); int getUnreadMessagesCount() const; void setUnreadMessagesCount(int count); @@ -117,7 +118,7 @@ signals: // used to close all the notifications when one is clicked void messageOpen(); void lastUpdatedTimeChanged(QDateTime time); - void lastEventChanged(); + void lastMessageChanged(); void titleChanged(QString title); void unreadMessagesCountChanged(int count); void eventListChanged(); @@ -158,7 +159,7 @@ private: bool mIsReadOnly = false; LinphoneEnums::ChatRoomState mChatRoomState; std::shared_ptr mChatModel; - QSharedPointer mLastEvent; + QSharedPointer mLastMessage; QList> mEventLogList; QSharedPointer> mChatModelConnection;