Save updated resume data for completed torrents

If fastresume data was rejected we need to save updated
resume data after torrent finishes rechecking.
This commit is contained in:
Vladimir Golovnev (Glassez) 2019-07-22 14:29:14 +03:00
parent b822d2c380
commit 3d70ebfc46
No known key found for this signature in database
GPG Key ID: 52A2C7DEE2DFA6F7
4 changed files with 9 additions and 3 deletions

View File

@ -1796,7 +1796,7 @@ void Session::bottomTorrentsQueuePos(const QStringList &hashes)
saveTorrentsQueue();
}
void Session::handleTorrentSaveResumeDataRequested(TorrentHandle *const torrent)
void Session::handleTorrentSaveResumeDataRequested(const TorrentHandle *torrent)
{
qDebug("Saving resume data is requested for torrent '%s'...", qUtf8Printable(torrent->name()));
++m_numResumeData;

View File

@ -427,7 +427,7 @@ namespace BitTorrent
void bottomTorrentsQueuePos(const QStringList &hashes);
// TorrentHandle interface
void handleTorrentSaveResumeDataRequested(TorrentHandle *const torrent);
void handleTorrentSaveResumeDataRequested(const TorrentHandle *torrent);
void handleTorrentShareLimitChanged(TorrentHandle *const torrent);
void handleTorrentNameChanged(TorrentHandle *const torrent);
void handleTorrentSavePathChanged(TorrentHandle *const torrent);

View File

@ -187,6 +187,7 @@ TorrentHandle::TorrentHandle(Session *session, const lt::torrent_handle &nativeH
, m_ratioLimit(params.ratioLimit)
, m_seedingTimeLimit(params.seedingTimeLimit)
, m_tempPathDisabled(params.disableTempPath)
, m_fastresumeDataRejected(false)
, m_hasMissingFiles(false)
, m_hasRootFolder(params.hasRootFolder)
, m_needsToSetFirstLastPiecePriority(false)
@ -1652,6 +1653,8 @@ void TorrentHandle::handleTorrentCheckedAlert(const lt::torrent_checked_alert *p
else {
m_startupState = Started;
m_pauseWhenReady = false;
if (m_fastresumeDataRejected && !m_hasMissingFiles)
saveResumeData();
}
}
@ -1788,6 +1791,8 @@ void TorrentHandle::handleSaveResumeDataFailedAlert(const lt::save_resume_data_f
void TorrentHandle::handleFastResumeRejectedAlert(const lt::fastresume_rejected_alert *p)
{
m_fastresumeDataRejected = true;
if (p->error.value() == lt::errors::mismatching_file_size) {
// Mismatching file size (files were probably moved)
m_hasMissingFiles = true;
@ -1795,7 +1800,7 @@ void TorrentHandle::handleFastResumeRejectedAlert(const lt::fastresume_rejected_
}
else {
LogMsg(tr("Fast resume data was rejected for torrent '%1'. Reason: %2. Checking again...")
.arg(name(), QString::fromStdString(p->message())), Log::CRITICAL);
.arg(name(), QString::fromStdString(p->message())), Log::WARNING);
}
}

View File

@ -438,6 +438,7 @@ namespace BitTorrent
qreal m_ratioLimit;
int m_seedingTimeLimit;
bool m_tempPathDisabled;
bool m_fastresumeDataRejected;
bool m_hasMissingFiles;
bool m_hasRootFolder;
bool m_needsToSetFirstLastPiecePriority;