Handle exception when torrent file cannot be exported

Both `lt::create_torrent` constructor and `lt::create_torrent::generate()`
can throw an exception so we need to handle it to prevent the app from crashing.
This commit is contained in:
Vladimir Golovnev (Glassez)
2021-06-17 20:28:07 +03:00
committed by Vladimir Golovnev
parent 6070b41c9b
commit 3faa7226e7
7 changed files with 66 additions and 41 deletions

View File

@@ -338,18 +338,24 @@ void BitTorrent::BencodeResumeDataStorage::Worker::store(const TorrentID &id, co
if (torrentInfo)
{
const QString torrentFilepath = m_resumeDataDir.absoluteFilePath(QString::fromLatin1("%1.torrent").arg(id.toString()));
const lt::create_torrent torrentCreator = lt::create_torrent(*torrentInfo);
const lt::entry metadata = torrentCreator.generate();
try
{
const auto torrentCreator = lt::create_torrent(*torrentInfo);
const lt::entry metadata = torrentCreator.generate();
writeEntryToFile(torrentFilepath, metadata);
}
catch (const RuntimeError &err)
{
LogMsg(tr("Couldn't save torrent metadata to '%1'. Error: %2")
LogMsg(tr("Couldn't save torrent metadata to '%1'. Error: %2.")
.arg(torrentFilepath, err.message()), Log::CRITICAL);
return;
}
catch (const std::exception &err)
{
LogMsg(tr("Couldn't save torrent metadata to '%1'. Error: %2.")
.arg(torrentFilepath, QString::fromLocal8Bit(err.what())), Log::CRITICAL);
return;
}
}
lt::entry data = lt::write_resume_data(p);
@@ -371,7 +377,7 @@ void BitTorrent::BencodeResumeDataStorage::Worker::store(const TorrentID &id, co
}
catch (const RuntimeError &err)
{
LogMsg(tr("Couldn't save torrent resume data to '%1'. Error: %2")
LogMsg(tr("Couldn't save torrent resume data to '%1'. Error: %2.")
.arg(resumeFilepath, err.message()), Log::CRITICAL);
}
}