mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-10-22 02:36:15 +03:00
Improve received metadata handling
Avoid blocking call to libtorrent when accessing underlying torrent_info object. PR #20424.
This commit is contained in:
parent
bb8a012b1c
commit
7786e1b084
1 changed files with 13 additions and 7 deletions
|
@ -811,7 +811,12 @@ void TorrentImpl::deferredRequestResumeData()
|
||||||
{
|
{
|
||||||
if (!m_deferredRequestResumeDataInvoked)
|
if (!m_deferredRequestResumeDataInvoked)
|
||||||
{
|
{
|
||||||
QMetaObject::invokeMethod(this, [this] { requestResumeData(); }, Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, [this]
|
||||||
|
{
|
||||||
|
requestResumeData((m_maintenanceJob == MaintenanceJob::HandleMetadata)
|
||||||
|
? lt::torrent_handle::save_info_dict : lt::resume_data_flags_t());
|
||||||
|
}, Qt::QueuedConnection);
|
||||||
|
|
||||||
m_deferredRequestResumeDataInvoked = true;
|
m_deferredRequestResumeDataInvoked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1706,8 +1711,8 @@ void TorrentImpl::resetTrackerEntries()
|
||||||
|
|
||||||
std::shared_ptr<const libtorrent::torrent_info> TorrentImpl::nativeTorrentInfo() const
|
std::shared_ptr<const libtorrent::torrent_info> TorrentImpl::nativeTorrentInfo() const
|
||||||
{
|
{
|
||||||
if (m_nativeStatus.torrent_file.expired())
|
Q_ASSERT(!m_nativeStatus.torrent_file.expired());
|
||||||
m_nativeStatus.torrent_file = m_nativeHandle.torrent_file();
|
|
||||||
return m_nativeStatus.torrent_file.lock();
|
return m_nativeStatus.torrent_file.lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2041,7 +2046,7 @@ void TorrentImpl::handleSaveResumeDataAlert(const lt::save_resume_data_alert *p)
|
||||||
fetchURLSeeds([this](const QVector<QUrl> &urlSeeds) { m_urlSeeds = urlSeeds; });
|
fetchURLSeeds([this](const QVector<QUrl> &urlSeeds) { m_urlSeeds = urlSeeds; });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_maintenanceJob == MaintenanceJob::HandleMetadata)
|
if ((m_maintenanceJob == MaintenanceJob::HandleMetadata) && p->params.ti)
|
||||||
{
|
{
|
||||||
Q_ASSERT(m_indexMap.isEmpty());
|
Q_ASSERT(m_indexMap.isEmpty());
|
||||||
|
|
||||||
|
@ -2053,7 +2058,9 @@ void TorrentImpl::handleSaveResumeDataAlert(const lt::save_resume_data_alert *p)
|
||||||
m_ltAddTorrentParams.have_pieces.clear();
|
m_ltAddTorrentParams.have_pieces.clear();
|
||||||
m_ltAddTorrentParams.verified_pieces.clear();
|
m_ltAddTorrentParams.verified_pieces.clear();
|
||||||
|
|
||||||
TorrentInfo metadata = TorrentInfo(*nativeTorrentInfo());
|
m_nativeStatus.torrent_file = m_ltAddTorrentParams.ti;
|
||||||
|
|
||||||
|
const auto metadata = TorrentInfo(*m_ltAddTorrentParams.ti);
|
||||||
|
|
||||||
const auto &renamedFiles = m_ltAddTorrentParams.renamed_files;
|
const auto &renamedFiles = m_ltAddTorrentParams.renamed_files;
|
||||||
PathList filePaths = metadata.filePaths();
|
PathList filePaths = metadata.filePaths();
|
||||||
|
@ -2061,8 +2068,7 @@ void TorrentImpl::handleSaveResumeDataAlert(const lt::save_resume_data_alert *p)
|
||||||
{
|
{
|
||||||
const Path originalRootFolder = Path::findRootFolder(filePaths);
|
const Path originalRootFolder = Path::findRootFolder(filePaths);
|
||||||
const auto originalContentLayout = (originalRootFolder.isEmpty()
|
const auto originalContentLayout = (originalRootFolder.isEmpty()
|
||||||
? TorrentContentLayout::NoSubfolder
|
? TorrentContentLayout::NoSubfolder : TorrentContentLayout::Subfolder);
|
||||||
: TorrentContentLayout::Subfolder);
|
|
||||||
if (m_contentLayout != originalContentLayout)
|
if (m_contentLayout != originalContentLayout)
|
||||||
{
|
{
|
||||||
if (m_contentLayout == TorrentContentLayout::NoSubfolder)
|
if (m_contentLayout == TorrentContentLayout::NoSubfolder)
|
||||||
|
|
Loading…
Reference in a new issue