add try/catch to fileTransferProgressIndication callback in case of crash while downloading attachment

This commit is contained in:
Gaelle Braud 2026-02-19 12:26:10 +01:00
parent a4602236df
commit 164d8ab4b1
2 changed files with 24 additions and 13 deletions

View file

@ -304,18 +304,25 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
&ChatMessageModel::fileTransferProgressIndication, &ChatMessageModel::fileTransferProgressIndication,
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content, [this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
size_t offset, size_t total) { size_t offset, size_t total) {
mChatMessageModelConnection->invokeToCore([this, content, offset, total] { try {
auto it = mChatMessageModelConnection->invokeToCore([this, content, offset, total] {
std::find_if(mChatMessageContentList.begin(), mChatMessageContentList.end(), auto it =
[content](QSharedPointer<ChatMessageContentCore> item) { std::find_if(mChatMessageContentList.begin(), mChatMessageContentList.end(),
return item->getContentModel()->getContent()->getName() == content->getName(); [content](QSharedPointer<ChatMessageContentCore> item) {
}); return item->getContentModel()->getContent()->getName() == content->getName();
if (it != mChatMessageContentList.end()) { });
auto contentCore = mChatMessageContentList.at(std::distance(mChatMessageContentList.begin(), it)); if (it != mChatMessageContentList.end()) {
assert(contentCore); auto contentCore =
contentCore->setFileOffset(offset); mChatMessageContentList.at(std::distance(mChatMessageContentList.begin(), it));
} assert(contentCore);
}); contentCore->setFileOffset(offset);
}
});
} catch (const std::exception &ex) {
lFatal() << log()
.arg("Exception has been catch in signal fileTransferProgressIndication : %1")
.arg(ex.what());
}
}); });
mChatMessageModelConnection->makeConnectToModel( mChatMessageModelConnection->makeConnectToModel(

View file

@ -190,7 +190,11 @@ void ChatMessageModel::onFileTransferProgressIndication(const std::shared_ptr<li
const std::shared_ptr<linphone::Content> &content, const std::shared_ptr<linphone::Content> &content,
size_t offset, size_t offset,
size_t total) { size_t total) {
emit fileTransferProgressIndication(message, content, offset, total); try {
emit fileTransferProgressIndication(message, content, offset, total);
} catch (const std::exception &ex) {
lFatal() << log().arg("Exception has been catch in signal fileTransferProgressIndication : %1").arg(ex.what());
}
} }
void ChatMessageModel::onParticipantImdnStateChanged( void ChatMessageModel::onParticipantImdnStateChanged(