Revamp handling of getting resume data from libtorrent

PR #20310.
This commit is contained in:
Vladimir Golovnev
2024-01-24 15:40:08 +03:00
committed by GitHub
parent 31d456c43b
commit bab9c15913
4 changed files with 66 additions and 79 deletions

View File

@@ -468,7 +468,7 @@ void TorrentImpl::setSavePath(const Path &path)
{
m_savePath = resolvedPath;
m_session->handleTorrentSavePathChanged(this);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
}
@@ -496,7 +496,7 @@ void TorrentImpl::setDownloadPath(const Path &path)
{
m_downloadPath = resolvedPath;
m_session->handleTorrentSavePathChanged(this);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
}
@@ -541,7 +541,7 @@ void TorrentImpl::setAutoTMMEnabled(bool enabled)
m_downloadPath = m_session->categoryDownloadPath(category());
}
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentSavingModeChanged(this);
adjustStorageLocation();
@@ -621,7 +621,7 @@ void TorrentImpl::addTrackers(QVector<TrackerEntry> trackers)
std::sort(m_trackerEntries.begin(), m_trackerEntries.end()
, [](const TrackerEntry &lhs, const TrackerEntry &rhs) { return lhs.tier < rhs.tier; });
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentTrackersAdded(this, trackers);
}
@@ -643,7 +643,7 @@ void TorrentImpl::removeTrackers(const QStringList &trackers)
{
m_nativeHandle.replace_trackers(nativeTrackers);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentTrackersRemoved(this, removedTrackers);
}
}
@@ -670,7 +670,7 @@ void TorrentImpl::replaceTrackers(QVector<TrackerEntry> trackers)
if (isPrivate())
clearPeers();
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentTrackersChanged(this);
}
@@ -714,7 +714,7 @@ void TorrentImpl::addUrlSeeds(const QVector<QUrl> &urlSeeds)
thisTorrent->m_urlSeeds = currentSeeds;
if (!addedUrlSeeds.isEmpty())
{
session->handleTorrentNeedSaveResumeData(thisTorrent);
thisTorrent->deferredRequestResumeData();
session->handleTorrentUrlSeedsAdded(thisTorrent, addedUrlSeeds);
}
});
@@ -758,7 +758,7 @@ void TorrentImpl::removeUrlSeeds(const QVector<QUrl> &urlSeeds)
if (!removedUrlSeeds.isEmpty())
{
session->handleTorrentNeedSaveResumeData(thisTorrent);
thisTorrent->deferredRequestResumeData();
session->handleTorrentUrlSeedsRemoved(thisTorrent, removedUrlSeeds);
}
});
@@ -799,10 +799,21 @@ bool TorrentImpl::needSaveResumeData() const
return m_nativeStatus.need_save_resume;
}
void TorrentImpl::saveResumeData(lt::resume_data_flags_t flags)
void TorrentImpl::requestResumeData(const lt::resume_data_flags_t flags)
{
m_nativeHandle.save_resume_data(flags);
m_session->handleTorrentSaveResumeDataRequested(this);
m_deferredRequestResumeDataInvoked = false;
m_session->handleTorrentResumeDataRequested(this);
}
void TorrentImpl::deferredRequestResumeData()
{
if (!m_deferredRequestResumeDataInvoked)
{
QMetaObject::invokeMethod(this, [this] { requestResumeData(); }, Qt::QueuedConnection);
m_deferredRequestResumeDataInvoked = true;
}
}
int TorrentImpl::filesCount() const
@@ -881,7 +892,7 @@ bool TorrentImpl::addTag(const Tag &tag)
return false;
}
m_tags.insert(tag);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentTagAdded(this, tag);
return true;
}
@@ -890,7 +901,7 @@ bool TorrentImpl::removeTag(const Tag &tag)
{
if (m_tags.remove(tag))
{
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentTagRemoved(this, tag);
return true;
}
@@ -1521,7 +1532,7 @@ void TorrentImpl::setName(const QString &name)
if (m_name != name)
{
m_name = name;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentNameChanged(this);
}
}
@@ -1535,7 +1546,7 @@ bool TorrentImpl::setCategory(const QString &category)
const QString oldCategory = m_category;
m_category = category;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentCategoryChanged(this, oldCategory);
if (m_useAutoTMM)
@@ -1600,7 +1611,7 @@ void TorrentImpl::setSequentialDownload(const bool enable)
m_nativeStatus.flags &= ~lt::torrent_flags::sequential_download; // prevent return cached value
}
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::setFirstLastPiecePriority(const bool enabled)
@@ -1615,7 +1626,7 @@ void TorrentImpl::setFirstLastPiecePriority(const bool enabled)
LogMsg(tr("Download first and last piece first: %1, torrent: '%2'")
.arg((enabled ? tr("On") : tr("Off")), name()));
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::applyFirstLastPiecePriority(const bool enabled)
@@ -1824,7 +1835,7 @@ void TorrentImpl::pause()
{
m_stopCondition = StopCondition::None;
m_isStopped = true;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentPaused(this);
}
@@ -1859,7 +1870,7 @@ void TorrentImpl::resume(const TorrentOperatingMode mode)
if (m_isStopped)
{
m_isStopped = false;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentResumed(this);
}
@@ -1918,7 +1929,7 @@ void TorrentImpl::handleMoveStorageJobFinished(const Path &path, const MoveStora
m_nativeStatus.save_path = path.toString().toStdString();
m_session->handleTorrentSavePathChanged(this);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
if (!m_storageIsMoving)
{
@@ -1976,7 +1987,7 @@ void TorrentImpl::handleTorrentCheckedAlert([[maybe_unused]] const lt::torrent_c
}
if (m_nativeStatus.need_save_resume)
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentChecked(this);
});
@@ -1993,7 +2004,7 @@ void TorrentImpl::handleTorrentFinishedAlert([[maybe_unused]] const lt::torrent_
adjustStorageLocation();
manageActualFilePaths();
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
const bool recheckTorrentsOnCompletion = Preferences::instance()->recheckTorrentsOnCompletion();
if (recheckTorrentsOnCompletion && m_unchecked)
@@ -2137,8 +2148,6 @@ void TorrentImpl::handleSaveResumeDataFailedAlert(const lt::save_resume_data_fai
LogMsg(tr("Generate resume data failed. Torrent: \"%1\". Reason: \"%2\"")
.arg(name(), QString::fromLocal8Bit(p->error.message().c_str())), Log::CRITICAL);
}
m_session->handleTorrentSaveResumeDataFailed(this);
}
void TorrentImpl::handleFastResumeRejectedAlert(const lt::fastresume_rejected_alert *p)
@@ -2216,7 +2225,7 @@ void TorrentImpl::handleFileRenamedAlert(const lt::file_renamed_alert *p)
while (!isMoveInProgress() && (m_renameCount == 0) && !m_moveFinishedTriggers.isEmpty())
m_moveFinishedTriggers.takeFirst()();
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::handleFileRenameFailedAlert(const lt::file_rename_failed_alert *p)
@@ -2231,7 +2240,7 @@ void TorrentImpl::handleFileRenameFailedAlert(const lt::file_rename_failed_alert
while (!isMoveInProgress() && (m_renameCount == 0) && !m_moveFinishedTriggers.isEmpty())
m_moveFinishedTriggers.takeFirst()();
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::handleFileCompletedAlert(const lt::file_completed_alert *p)
@@ -2274,7 +2283,7 @@ void TorrentImpl::handleFileErrorAlert(const lt::file_error_alert *p)
#ifdef QBT_USES_LIBTORRENT2
void TorrentImpl::handleFilePrioAlert(const lt::file_prio_alert *)
{
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
#endif
@@ -2290,7 +2299,7 @@ void TorrentImpl::handleMetadataReceivedAlert([[maybe_unused]] const lt::metadat
#endif
m_maintenanceJob = MaintenanceJob::HandleMetadata;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::handlePerformanceAlert(const lt::performance_alert *p) const
@@ -2540,7 +2549,7 @@ void TorrentImpl::setRatioLimit(qreal limit)
if (m_ratioLimit != limit)
{
m_ratioLimit = limit;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentShareLimitChanged(this);
}
}
@@ -2555,7 +2564,7 @@ void TorrentImpl::setSeedingTimeLimit(int limit)
if (m_seedingTimeLimit != limit)
{
m_seedingTimeLimit = limit;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentShareLimitChanged(this);
}
}
@@ -2570,7 +2579,7 @@ void TorrentImpl::setInactiveSeedingTimeLimit(int limit)
if (m_inactiveSeedingTimeLimit != limit)
{
m_inactiveSeedingTimeLimit = limit;
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
m_session->handleTorrentShareLimitChanged(this);
}
}
@@ -2583,7 +2592,7 @@ void TorrentImpl::setUploadLimit(const int limit)
m_uploadLimit = cleanValue;
m_nativeHandle.set_upload_limit(m_uploadLimit);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::setDownloadLimit(const int limit)
@@ -2594,7 +2603,7 @@ void TorrentImpl::setDownloadLimit(const int limit)
m_downloadLimit = cleanValue;
m_nativeHandle.set_download_limit(m_downloadLimit);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::setSuperSeeding(const bool enable)
@@ -2607,7 +2616,7 @@ void TorrentImpl::setSuperSeeding(const bool enable)
else
m_nativeHandle.unset_flags(lt::torrent_flags::super_seeding);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::setDHTDisabled(const bool disable)
@@ -2620,7 +2629,7 @@ void TorrentImpl::setDHTDisabled(const bool disable)
else
m_nativeHandle.unset_flags(lt::torrent_flags::disable_dht);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::setPEXDisabled(const bool disable)
@@ -2633,7 +2642,7 @@ void TorrentImpl::setPEXDisabled(const bool disable)
else
m_nativeHandle.unset_flags(lt::torrent_flags::disable_pex);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::setLSDDisabled(const bool disable)
@@ -2646,7 +2655,7 @@ void TorrentImpl::setLSDDisabled(const bool disable)
else
m_nativeHandle.unset_flags(lt::torrent_flags::disable_lsd);
m_session->handleTorrentNeedSaveResumeData(this);
deferredRequestResumeData();
}
void TorrentImpl::flushCache() const