From f6ed605414ad9807f2951aa9b70c7ada8dd72c82 Mon Sep 17 00:00:00 2001 From: Administrator account Date: Tue, 11 Sep 2018 13:43:08 +0200 Subject: [PATCH] Don't recheck just checked torrent Closes #8743. Closes #9370. --- src/base/bittorrent/torrenthandle.cpp | 22 ++++++++++++++++------ src/base/bittorrent/torrenthandle.h | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/base/bittorrent/torrenthandle.cpp b/src/base/bittorrent/torrenthandle.cpp index 3c6cb1f38..da5520a33 100644 --- a/src/base/bittorrent/torrenthandle.cpp +++ b/src/base/bittorrent/torrenthandle.cpp @@ -807,7 +807,10 @@ TorrentState TorrentHandle::state() const void TorrentHandle::updateState() { - if (isMoveInProgress()) { + if (m_nativeStatus.state == libt::torrent_status::checking_resume_data) { + m_state = TorrentState::CheckingResumeData; + } + else if (isMoveInProgress()) { m_state = TorrentState::Moving; } else if (isPaused()) { @@ -839,9 +842,6 @@ void TorrentHandle::updateState() m_state = TorrentState::QueuedForChecking; break; #endif - case libt::torrent_status::checking_resume_data: - m_state = TorrentState::CheckingResumeData; - break; case libt::torrent_status::checking_files: m_state = m_hasSeedStatus ? TorrentState::CheckingUploading : TorrentState::CheckingDownloading; break; @@ -1270,6 +1270,9 @@ void TorrentHandle::forceRecheck() { if (!hasMetadata()) return; + m_nativeHandle.force_recheck(); + m_unchecked = false; + if (isPaused()) { m_pauseAfterRecheck = true; resume_impl(true, true); @@ -1587,13 +1590,13 @@ void TorrentHandle::handleTorrentFinishedAlert(const libtorrent::torrent_finishe manageIncompleteFiles(); const bool recheckTorrentsOnCompletion = Preferences::instance()->recheckTorrentsOnCompletion(); - if (isMoveInProgress() || m_renameCount > 0) { + if (isMoveInProgress() || (m_renameCount > 0)) { if (recheckTorrentsOnCompletion) m_moveFinishedTriggers.append(boost::bind(&TorrentHandle::forceRecheck, this)); m_moveFinishedTriggers.append(boost::bind(&Session::handleTorrentFinished, m_session, this)); } else { - if (recheckTorrentsOnCompletion) + if (recheckTorrentsOnCompletion && m_unchecked) forceRecheck(); m_session->handleTorrentFinished(this); } @@ -1933,6 +1936,13 @@ void TorrentHandle::updateStatus(const libtorrent::torrent_status &nativeStatus) updateState(); updateTorrentInfo(); + + // NOTE: Don't change the order of these conditionals! + // Otherwise it will not work properly since torrent can be CheckingDownloading. + if (isChecking()) + m_unchecked = false; + else if (isDownloading()) + m_unchecked = true; } void TorrentHandle::setRatioLimit(qreal limit) diff --git a/src/base/bittorrent/torrenthandle.h b/src/base/bittorrent/torrenthandle.h index 3569ad91c..3bca82867 100644 --- a/src/base/bittorrent/torrenthandle.h +++ b/src/base/bittorrent/torrenthandle.h @@ -465,6 +465,7 @@ namespace BitTorrent QHash m_trackerInfos; bool m_started = false; + bool m_unchecked = false; }; }