From 9f2db02565e9d4deb7fcccb859d3f0d3912daa87 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Thu, 9 Nov 2017 15:42:09 +0100 Subject: [PATCH] fix(MainDb): fetch correctly chat messages (no contents), no all chat messages for one message!!! --- src/chat/chat-message/chat-message-p.h | 10 +++++----- src/chat/chat-message/chat-message.cpp | 5 ++++- src/db/main-db.cpp | 11 +++++------ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/chat/chat-message/chat-message-p.h b/src/chat/chat-message/chat-message-p.h index f512f5abc..10f572bca 100644 --- a/src/chat/chat-message/chat-message-p.h +++ b/src/chat/chat-message/chat-message-p.h @@ -61,7 +61,7 @@ public: void setDirection (ChatMessage::Direction dir); - void setState(ChatMessage::State state); + void setState(ChatMessage::State state, bool force = false); void setTime(time_t time); @@ -100,16 +100,16 @@ public: void setAppdata (const std::string &appData); const std::string &getExternalBodyUrl () const; - + bool hasTextContent() const; const Content* getTextContent() const; - + bool hasFileTransferContent() const; const Content* getFileTransferContent() const; LinphoneContent *getFileTransferInformation() const; void setFileTransferInformation(const LinphoneContent *content); - + int downloadFile (); void sendImdn(Imdn::Type imdnType, LinphoneReason reason); @@ -148,7 +148,7 @@ private: std::string cText; // ----------------------------------------------------------------------------- - + std::string createImdnXml(Imdn::Type imdnType, LinphoneReason reason); L_DECLARE_PUBLIC(ChatMessage); diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index b1fcd5d47..2ea06ec53 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -75,9 +75,12 @@ void ChatMessagePrivate::setIsReadOnly (bool readOnly) { isReadOnly = readOnly; } -void ChatMessagePrivate::setState (ChatMessage::State s) { +void ChatMessagePrivate::setState (ChatMessage::State s, bool force) { L_Q(); + if (force) + state = s; + if (s == state || !q->getChatRoom()) return; diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 44fd21390..89b2a475d 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -300,18 +300,17 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), *session << "SELECT local_sip_address.value, remote_sip_address.value, imdn_message_id, state, direction, is_secured" " FROM event, conference_chat_message_event, sip_address AS local_sip_address," " sip_address AS remote_sip_address" - " WHERE event_id = event.id" + " WHERE event_id = :eventId" + " AND event_id = event.id" " AND local_sip_address_id = local_sip_address.id" - " AND remote_sip_address_id = remote_sip_address.id" - " AND remote_sip_address.value = :peerAddress", soci::into(localSipAddress), soci::into(remoteSipAddress), - soci::into(imdnMessageId), soci::into(state), soci::into(direction), soci::into(isSecured), - soci::use(peerAddress); + " AND remote_sip_address_id = remote_sip_address.id", soci::into(localSipAddress), soci::into(remoteSipAddress), + soci::into(imdnMessageId), soci::into(state), soci::into(direction), soci::into(isSecured), soci::use(eventId); // TODO: Create me. // TODO: Use cache, do not fetch the same message twice. shared_ptr chatMessage = make_shared(chatRoom); - chatMessage->getPrivate()->setState(static_cast(state)); + chatMessage->getPrivate()->setState(static_cast(state), true); chatMessage->getPrivate()->setDirection(static_cast(direction)); chatMessage->setIsSecured(static_cast(isSecured));