Fill in initial data in add_torrent_alert handler

libtorrent < 2.0.7 has a bug that add_torrent_alert is posted too early
(before torrent is fully initialized and torrent extensions are created)
so we have to fill initial torrent data in add_torrent_alert handler.

PR #17491.
This commit is contained in:
Vladimir Golovnev
2022-08-06 06:09:35 +03:00
committed by GitHub
parent 33e6ca6778
commit 7f40602da9
2 changed files with 36 additions and 3 deletions

View File

@@ -35,6 +35,26 @@
namespace
{
void handleAddTorrentAlert(const lt::add_torrent_alert *alert)
{
#ifndef QBT_USES_LIBTORRENT2
if (alert->error)
return;
// libtorrent < 2.0.7 has a bug that add_torrent_alert is posted too early
// (before torrent is fully initialized and torrent extensions are created)
// so we have to fill "extension data" in add_torrent_alert handler
// NOTE: `data` may not exist if a torrent is added behind the scenes to download metadata
auto *data = static_cast<ExtensionData *>(alert->params.userdata);
if (data)
{
data->status = alert->handle.status({});
data->trackers = alert->handle.trackers();
}
#endif
}
void handleFastresumeRejectedAlert(const lt::fastresume_rejected_alert *alert)
{
alert->handle.unset_flags(lt::torrent_flags::auto_managed);
@@ -56,8 +76,13 @@ void NativeSessionExtension::on_alert(const lt::alert *alert)
{
switch (alert->type())
{
case lt::add_torrent_alert::alert_type:
handleAddTorrentAlert(static_cast<const lt::add_torrent_alert *>(alert));
break;
case lt::fastresume_rejected_alert::alert_type:
handleFastresumeRejectedAlert(static_cast<const lt::fastresume_rejected_alert *>(alert));
break;
default:
break;
}
}