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,
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
size_t offset, size_t total) {
mChatMessageModelConnection->invokeToCore([this, content, offset, total] {
auto it =
std::find_if(mChatMessageContentList.begin(), mChatMessageContentList.end(),
[content](QSharedPointer<ChatMessageContentCore> item) {
return item->getContentModel()->getContent()->getName() == content->getName();
});
if (it != mChatMessageContentList.end()) {
auto contentCore = mChatMessageContentList.at(std::distance(mChatMessageContentList.begin(), it));
assert(contentCore);
contentCore->setFileOffset(offset);
}
});
try {
mChatMessageModelConnection->invokeToCore([this, content, offset, total] {
auto it =
std::find_if(mChatMessageContentList.begin(), mChatMessageContentList.end(),
[content](QSharedPointer<ChatMessageContentCore> item) {
return item->getContentModel()->getContent()->getName() == content->getName();
});
if (it != mChatMessageContentList.end()) {
auto contentCore =
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(

View file

@ -190,7 +190,11 @@ void ChatMessageModel::onFileTransferProgressIndication(const std::shared_ptr<li
const std::shared_ptr<linphone::Content> &content,
size_t offset,
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(