mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-17 11:28:07 +00:00
Move back to the lastMessage paradigm instead of lastEvent
This commit is contained in:
parent
1666d7b897
commit
5fbe8603ea
2 changed files with 22 additions and 30 deletions
|
|
@ -75,8 +75,7 @@ ChatCore::ChatCore(const std::shared_ptr<linphone::ChatRoom> &chatRoom) : QObjec
|
|||
mChatModel = Utils::makeQObject_ptr<ChatModel>(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<int>(linphone::ChatRoom::HistoryFilter::ChatMessage) |
|
||||
static_cast<int>(linphone::ChatRoom::HistoryFilter::InfoNoDevice)
|
||||
|
|
@ -191,16 +190,12 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> 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<EventLogCore> 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<ChatMessageCore> lastMessage) {
|
||||
if (mLastMessage != lastMessage) {
|
||||
disconnect(mLastMessage.get());
|
||||
mLastMessage = lastMessage;
|
||||
connect(mLastMessage.get(), &ChatMessageCore::messageStateChanged, this, &ChatCore::lastMessageChanged);
|
||||
emit lastMessageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<ChatMessageCore> getLastMessageCore() const;
|
||||
void setLastEvent(QSharedPointer<EventLogCore> lastEvent);
|
||||
void setLastMessage(QSharedPointer<ChatMessageCore> 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<ChatModel> mChatModel;
|
||||
QSharedPointer<EventLogCore> mLastEvent;
|
||||
QSharedPointer<ChatMessageCore> mLastMessage;
|
||||
QList<QSharedPointer<EventLogCore>> mEventLogList;
|
||||
QSharedPointer<SafeConnection<ChatCore, ChatModel>> mChatModelConnection;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue