diff --git a/src/chat/chat-message/chat-message-p.h b/src/chat/chat-message/chat-message-p.h index f57f79cfb..2665afe0a 100644 --- a/src/chat/chat-message/chat-message-p.h +++ b/src/chat/chat-message/chat-message-p.h @@ -86,6 +86,8 @@ public: void removeSalCustomHeader(const std::string& name); std::string getSalCustomHeaderValue(const std::string& name); + void loadFileTransferUrlFromBodyToContent(); + // ----------------------------------------------------------------------------- // Deprecated methods only used for C wrapper, to be removed some day... // ----------------------------------------------------------------------------- diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index b321c6fa2..c75adc429 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -305,6 +305,12 @@ bool ChatMessagePrivate::downloadFile () { return false; } +void ChatMessagePrivate::loadFileTransferUrlFromBodyToContent() { + L_Q(); + int errorCode = 0; + fileTransferChatMessageModifier.decode(q->getSharedFromThis(), errorCode); +} + // ----------------------------------------------------------------------------- void ChatMessagePrivate::sendImdn (Imdn::Type imdnType, LinphoneReason reason) { @@ -375,7 +381,7 @@ LinphoneReason ChatMessagePrivate::receive () { lInfo() << "File download step already done, skipping"; } else { // This will check if internal content is FileTransfer and make the appropriate changes - fileTransferChatMessageModifier.decode(q->getSharedFromThis(), errorCode); + loadFileTransferUrlFromBodyToContent(); currentRecvStep |= ChatMessagePrivate::Step::FileUpload; } diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 5fd2337fa..d080f42ec 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -440,6 +440,8 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), if (!chatRoom) return nullptr; + bool hasFileTransferContent = false; + // 1 - Fetch chat message. shared_ptr chatMessage = getChatMessageFromCache(eventId); if (chatMessage) @@ -528,6 +530,12 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), } } + // 3 - Load external body url from body into FileTransferContent if needed + if (hasFileTransferContent) { + ChatMessagePrivate *dChatMessage = chatMessage->getPrivate(); + dChatMessage->loadFileTransferUrlFromBodyToContent(); + } + cache(chatMessage, eventId); end: