From 12f0e6c1ed2dda32f0d0db5ee41b7bfd5324187b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 7 Mar 2018 13:29:15 +0100 Subject: [PATCH] Fixed issue when downloading a file from a chat message loaded from database (and thus locked) --- src/chat/chat-message/chat-message-p.h | 3 +++ src/chat/chat-message/chat-message.cpp | 14 +++++++++++--- .../file-transfer-chat-message-modifier.cpp | 4 ++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/chat/chat-message/chat-message-p.h b/src/chat/chat-message/chat-message-p.h index 730270265..fb3a15d0b 100644 --- a/src/chat/chat-message/chat-message-p.h +++ b/src/chat/chat-message/chat-message-p.h @@ -138,6 +138,9 @@ public: LinphoneContent *getFileTransferInformation () const; void setFileTransferInformation (const LinphoneContent *content); + + void addContent (Content &content); + void removeContent (const Content &content); bool downloadFile (); diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index dd6fa43f9..e5d1a8db6 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -371,6 +371,14 @@ bool ChatMessagePrivate::downloadFile () { return false; } +void ChatMessagePrivate::addContent (Content &content) { + getContents().push_back(&content); +} + +void ChatMessagePrivate::removeContent (const Content &content) { + getContents().remove(&const_cast(content)); +} + void ChatMessagePrivate::loadFileTransferUrlFromBodyToContent() { L_Q(); int errorCode = 0; @@ -718,7 +726,7 @@ void ChatMessagePrivate::send () { if (content->getContentType() == ContentType::FileTransfer) { FileTransferContent *fileTransferContent = (FileTransferContent *)content; it = contents.erase(it); - q->addContent(*fileTransferContent->getFileContent()); + addContent(*fileTransferContent->getFileContent()); delete fileTransferContent; } else { it++; @@ -962,13 +970,13 @@ const list &ChatMessage::getContents () const { void ChatMessage::addContent (Content &content) { L_D(); if (!d->isReadOnly) - d->getContents().push_back(&content); + d->addContent(content); } void ChatMessage::removeContent (const Content &content) { L_D(); if (!d->isReadOnly) - d->getContents().remove(&const_cast(content)); + d->removeContent(content); } const Content &ChatMessage::getInternalContent () const { diff --git a/src/chat/modifier/file-transfer-chat-message-modifier.cpp b/src/chat/modifier/file-transfer-chat-message-modifier.cpp index 41ffa66c8..f0293d67a 100644 --- a/src/chat/modifier/file-transfer-chat-message-modifier.cpp +++ b/src/chat/modifier/file-transfer-chat-message-modifier.cpp @@ -750,12 +750,12 @@ void FileTransferChatMessageModifier::onRecvEnd (belle_sip_user_body_handler_t * if (retval <= 0 && message->getState() != ChatMessage::State::FileTransferError) { // Remove the FileTransferContent from the message and store the FileContent FileContent *fileContent = currentFileContentToTransfer; - message->addContent(*fileContent); + message->getPrivate()->addContent(*fileContent); for (Content *content : message->getContents()) { if (content->getContentType() == ContentType::FileTransfer) { FileTransferContent *fileTransferContent = (FileTransferContent*)content; if (fileTransferContent->getFileContent() == fileContent) { - message->removeContent(*content); + message->getPrivate()->removeContent(*content); delete fileTransferContent; break; }