From b6e64c13d8b2ea7535b593560b6d3a3372701455 Mon Sep 17 00:00:00 2001 From: Eugene Shalygin Date: Wed, 18 Jan 2017 17:23:57 +0100 Subject: [PATCH] Fetch torrent status when generating final fastresume data This is done to get correct queue position, which has to be written into the fastresume file. See discussion in #6154. --- src/base/bittorrent/session.cpp | 6 +++--- src/base/bittorrent/session.h | 2 +- src/base/bittorrent/torrenthandle.cpp | 5 ++++- src/base/bittorrent/torrenthandle.h | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 3c3716a78..0885819a0 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -1858,7 +1858,7 @@ void Session::generateResumeData(bool final) if (torrent->isChecking() || torrent->hasError()) continue; if (!final && !torrent->needSaveResumeData()) continue; - saveTorrentResumeData(torrent); + saveTorrentResumeData(torrent, final); qDebug("Saving fastresume data for %s", qPrintable(torrent->name())); } } @@ -2782,9 +2782,9 @@ void Session::handleTorrentRatioLimitChanged(TorrentHandle *const torrent) updateRatioTimer(); } -void Session::saveTorrentResumeData(TorrentHandle *const torrent) +void Session::saveTorrentResumeData(TorrentHandle *const torrent, bool finalSave) { - torrent->saveResumeData(); + torrent->saveResumeData(finalSave); ++m_numResumeData; } diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index 0ec3dc038..32ccbec11 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -467,7 +467,7 @@ namespace BitTorrent void updateRatioTimer(); void exportTorrentFile(TorrentHandle *const torrent, TorrentExportFolder folder = TorrentExportFolder::Regular); - void saveTorrentResumeData(TorrentHandle *const torrent); + void saveTorrentResumeData(TorrentHandle *const torrent, bool finalSave = false); void handleAlert(libtorrent::alert *a); void dispatchTorrentAlert(libtorrent::alert *a); diff --git a/src/base/bittorrent/torrenthandle.cpp b/src/base/bittorrent/torrenthandle.cpp index b03bf90af..6e6dfafbd 100644 --- a/src/base/bittorrent/torrenthandle.cpp +++ b/src/base/bittorrent/torrenthandle.cpp @@ -485,8 +485,11 @@ bool TorrentHandle::needSaveResumeData() const SAFE_RETURN(bool, need_save_resume_data, false); } -void TorrentHandle::saveResumeData() +void TorrentHandle::saveResumeData(bool updateStatus) { + if (updateStatus) // to update queue_position, see discussion in PR #6154 + this->updateStatus(); + SAFE_CALL(save_resume_data); m_needSaveResumeData = false; } diff --git a/src/base/bittorrent/torrenthandle.h b/src/base/bittorrent/torrenthandle.h index aad66f001..a0837d09f 100644 --- a/src/base/bittorrent/torrenthandle.h +++ b/src/base/bittorrent/torrenthandle.h @@ -351,7 +351,7 @@ namespace BitTorrent void handleTempPathChanged(); void handleCategorySavePathChanged(); void handleAppendExtensionToggled(); - void saveResumeData(); + void saveResumeData(bool updateStatus = false); private: typedef boost::function EventTrigger;