From 53296fb8cb01a12e0360a16c2378d6a0592688e5 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 26 Feb 2018 10:28:32 +0100 Subject: [PATCH] fix(ChatMessage): improve check of loaded contents --- src/chat/chat-message/chat-message-p.h | 13 ++++++++- src/chat/chat-message/chat-message.cpp | 39 ++++++++++---------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/chat/chat-message/chat-message-p.h b/src/chat/chat-message/chat-message-p.h index b6182c94f..ebca8138c 100644 --- a/src/chat/chat-message/chat-message-p.h +++ b/src/chat/chat-message/chat-message-p.h @@ -83,6 +83,16 @@ public: void loadContentsFromDatabase () const; + std::list &getContents () { + loadContentsFromDatabase(); + return contents; + } + + const std::list &getContents () const { + loadContentsFromDatabase(); + return contents; + } + belle_http_request_t *getHttpRequest () const; void setHttpRequest (belle_http_request_t *request); @@ -149,7 +159,6 @@ private: std::string rttMessage; bool isSecured = false; mutable bool isReadOnly = false; - std::list contents; Content internalContent; std::unordered_map customHeaders; mutable LinphoneErrorInfo * errorInfo = nullptr; @@ -180,6 +189,8 @@ private: ChatMessage::State state = ChatMessage::State::Idle; ChatMessage::Direction direction = ChatMessage::Direction::Incoming; + std::list contents; + bool encryptionPrevented = false; bool toBeStored = true; mutable bool contentsNotLoadedFromDatabase = false; diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index de582fcab..1e3bf9e8d 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -183,8 +183,7 @@ string ChatMessagePrivate::getSalCustomHeaderValue (const string &name) { // ----------------------------------------------------------------------------- bool ChatMessagePrivate::hasTextContent() const { - loadContentsFromDatabase(); - for (const Content *c : contents) { + for (const Content *c : getContents()) { if (c->getContentType() == ContentType::PlainText) { return true; } @@ -193,8 +192,7 @@ bool ChatMessagePrivate::hasTextContent() const { } const Content* ChatMessagePrivate::getTextContent() const { - loadContentsFromDatabase(); - for (const Content *c : contents) { + for (const Content *c : getContents()) { if (c->getContentType() == ContentType::PlainText) { return c; } @@ -203,8 +201,7 @@ const Content* ChatMessagePrivate::getTextContent() const { } bool ChatMessagePrivate::hasFileTransferContent() const { - loadContentsFromDatabase(); - for (const Content *c : contents) { + for (const Content *c : getContents()) { if (c->getContentType() == ContentType::FileTransfer) { return true; } @@ -213,7 +210,7 @@ bool ChatMessagePrivate::hasFileTransferContent() const { } const Content* ChatMessagePrivate::getFileTransferContent() const { - for (const Content *c : contents) { + for (const Content *c : getContents()) { if (c->getContentType() == ContentType::FileTransfer) { return c; } @@ -230,8 +227,7 @@ void ChatMessagePrivate::setFileTransferFilepath (const string &path) { } const string &ChatMessagePrivate::getAppdata () const { - loadContentsFromDatabase(); - for (const Content *c : contents) { + for (const Content *c : getContents()) { if (c->isFile()) { FileContent *fileContent = (FileContent *)c; return fileContent->getAppData("legacy"); @@ -241,8 +237,7 @@ const string &ChatMessagePrivate::getAppdata () const { } void ChatMessagePrivate::setAppdata (const string &data) { - loadContentsFromDatabase(); - for (const Content *c : contents) { + for (const Content *c : getContents()) { if (c->isFile()) { FileContent *fileContent = (FileContent *)c; fileContent->setAppData("legacy", data); @@ -338,13 +333,13 @@ LinphoneContent *ChatMessagePrivate::getFileTransferInformation () const { if (hasFileTransferContent()) { return getFileTransferContent()->toLinphoneContent(); } - for (const Content *c : contents) { + for (const Content *c : getContents()) { if (c->isFile()) { FileContent *fileContent = (FileContent *)c; return fileContent->toLinphoneContent(); } } - return NULL; + return nullptr; } void ChatMessagePrivate::setFileTransferInformation (const LinphoneContent *c_content) { @@ -356,7 +351,7 @@ void ChatMessagePrivate::setFileTransferInformation (const LinphoneContent *c_co fileContent->setContentType(contentType); fileContent->setFileSize(linphone_content_get_size(c_content)); fileContent->setFileName(linphone_content_get_name(c_content)); - if (linphone_content_get_string_buffer(c_content) != NULL) { + if (linphone_content_get_string_buffer(c_content)) { fileContent->setBody(linphone_content_get_string_buffer(c_content)); } @@ -365,9 +360,8 @@ void ChatMessagePrivate::setFileTransferInformation (const LinphoneContent *c_co bool ChatMessagePrivate::downloadFile () { L_Q(); - loadContentsFromDatabase(); - for (auto &content : contents) + for (auto &content : getContents()) if (content->getContentType() == ContentType::FileTransfer) return q->downloadFile(*static_cast(content)); @@ -961,22 +955,19 @@ bool ChatMessage::isReadOnly () const { const list &ChatMessage::getContents () const { L_D(); - d->loadContentsFromDatabase(); - return d->contents; + return d->getContents(); } void ChatMessage::addContent (Content &content) { L_D(); - if (d->isReadOnly) return; - - d->contents.push_back(&content); + if (!d->isReadOnly) + d->getContents().push_back(&content); } void ChatMessage::removeContent (const Content &content) { L_D(); - if (d->isReadOnly) return; - - d->contents.remove(&const_cast(content)); + if (!d->isReadOnly) + d->getContents().remove(&const_cast(content)); } const Content &ChatMessage::getInternalContent () const {