From 95b02bbb2ef6b46cc5504fc626dd30af54f42749 Mon Sep 17 00:00:00 2001 From: thalieht Date: Thu, 23 Aug 2018 07:38:08 +0300 Subject: [PATCH] Save fastresumes when changing torrent priorities --- src/base/bittorrent/session.cpp | 20 ++++++++++++++++++++ src/base/bittorrent/session.h | 1 + 2 files changed, 21 insertions(+) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 74f401b0c..01daf8da7 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -1998,6 +1998,8 @@ void Session::increaseTorrentsPriority(const QStringList &hashes) torrentQueuePositionUp(torrent->nativeHandle()); torrentQueue.pop(); } + + handleTorrentsPrioritiesChanged(); } void Session::decreaseTorrentsPriority(const QStringList &hashes) @@ -2022,6 +2024,8 @@ void Session::decreaseTorrentsPriority(const QStringList &hashes) for (auto i = m_loadedMetadata.cbegin(); i != m_loadedMetadata.cend(); ++i) torrentQueuePositionBottom(m_nativeSession->find_torrent(i.key())); + + handleTorrentsPrioritiesChanged(); } void Session::topTorrentsPriority(const QStringList &hashes) @@ -2043,6 +2047,8 @@ void Session::topTorrentsPriority(const QStringList &hashes) torrentQueuePositionTop(torrent->nativeHandle()); torrentQueue.pop(); } + + handleTorrentsPrioritiesChanged(); } void Session::bottomTorrentsPriority(const QStringList &hashes) @@ -2067,6 +2073,8 @@ void Session::bottomTorrentsPriority(const QStringList &hashes) for (auto i = m_loadedMetadata.cbegin(); i != m_loadedMetadata.cend(); ++i) torrentQueuePositionBottom(m_nativeSession->find_torrent(i.key())); + + handleTorrentsPrioritiesChanged(); } QHash Session::torrents() const @@ -3531,6 +3539,18 @@ void Session::handleTorrentShareLimitChanged(TorrentHandle *const torrent) updateSeedingLimitTimer(); } +void Session::handleTorrentsPrioritiesChanged() +{ + // Save fastresume for the torrents that changed queue position + for (TorrentHandle *const torrent : torrents()) { + if (!torrent->isSeed()) { + // cached vs actual queue position, qBt starts queue at 1 + if (torrent->queuePosition() != (torrent->nativeHandle().queue_position() + 1)) + saveTorrentResumeData(torrent); + } + } +} + void Session::saveTorrentResumeData(TorrentHandle *const torrent) { qDebug("Saving fastresume data for %s", qUtf8Printable(torrent->name())); diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index cd43b0158..c4cd2185f 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -481,6 +481,7 @@ namespace BitTorrent // TorrentHandle interface void handleTorrentShareLimitChanged(TorrentHandle *const torrent); + void handleTorrentsPrioritiesChanged(); void handleTorrentNameChanged(TorrentHandle *const torrent); void handleTorrentSavePathChanged(TorrentHandle *const torrent); void handleTorrentCategoryChanged(TorrentHandle *const torrent, const QString &oldCategory);