diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index 464023f5f..f78abccf8 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -403,9 +403,6 @@ namespace BitTorrent virtual Torrent *findTorrent(const InfoHash &infoHash) const = 0; virtual QVector torrents() const = 0; virtual qsizetype torrentsCount() const = 0; - virtual bool hasActiveTorrents() const = 0; - virtual bool hasUnfinishedTorrents() const = 0; - virtual bool hasRunningSeed() const = 0; virtual const SessionStatus &status() const = 0; virtual const CacheStatus &cacheStatus() const = 0; virtual bool isListening() const = 0; diff --git a/src/base/bittorrent/sessionimpl.cpp b/src/base/bittorrent/sessionimpl.cpp index 8450b756b..14a5735fe 100644 --- a/src/base/bittorrent/sessionimpl.cpp +++ b/src/base/bittorrent/sessionimpl.cpp @@ -2228,30 +2228,6 @@ Torrent *SessionImpl::findTorrent(const InfoHash &infoHash) const return m_torrents.value(altID); } -bool SessionImpl::hasActiveTorrents() const -{ - return std::any_of(m_torrents.begin(), m_torrents.end(), [](TorrentImpl *torrent) - { - return TorrentFilter::ActiveTorrent.match(torrent); - }); -} - -bool SessionImpl::hasUnfinishedTorrents() const -{ - return std::any_of(m_torrents.begin(), m_torrents.end(), [](const TorrentImpl *torrent) - { - return (!torrent->isSeed() && !torrent->isPaused() && !torrent->isErrored() && torrent->hasMetadata()); - }); -} - -bool SessionImpl::hasRunningSeed() const -{ - return std::any_of(m_torrents.begin(), m_torrents.end(), [](const TorrentImpl *torrent) - { - return (torrent->isSeed() && !torrent->isPaused()); - }); -} - void SessionImpl::banIP(const QString &ip) { if (m_bannedIPs.get().contains(ip)) @@ -4771,7 +4747,11 @@ void SessionImpl::handleTorrentFinished(TorrentImpl *const torrent) } } - if (!hasUnfinishedTorrents()) + const bool hasUnfinishedTorrents = std::any_of(m_torrents.cbegin(), m_torrents.cend(), [](const TorrentImpl *torrent) + { + return !(torrent->isSeed() || torrent->isPaused() || torrent->isErrored()); + }); + if (!hasUnfinishedTorrents) emit allTorrentsFinished(); } diff --git a/src/base/bittorrent/sessionimpl.h b/src/base/bittorrent/sessionimpl.h index a75a47b95..e1df5ce81 100644 --- a/src/base/bittorrent/sessionimpl.h +++ b/src/base/bittorrent/sessionimpl.h @@ -380,9 +380,6 @@ namespace BitTorrent Torrent *findTorrent(const InfoHash &infoHash) const override; QVector torrents() const override; qsizetype torrentsCount() const override; - bool hasActiveTorrents() const override; - bool hasUnfinishedTorrents() const override; - bool hasRunningSeed() const override; const SessionStatus &status() const override; const CacheStatus &cacheStatus() const override; bool isListening() const override; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 38a2b108a..448a0ab41 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1134,7 +1134,12 @@ void MainWindow::closeEvent(QCloseEvent *e) } #endif // Q_OS_MACOS - if (pref->confirmOnExit() && BitTorrent::Session::instance()->hasActiveTorrents()) + const QVector allTorrents = BitTorrent::Session::instance()->torrents(); + const bool hasActiveTorrents = std::any_of(allTorrents.cbegin(), allTorrents.cend(), [](BitTorrent::Torrent *torrent) + { + return torrent->isActive(); + }); + if (pref->confirmOnExit() && hasActiveTorrents) { if (e->spontaneous() || m_forceExit) { @@ -1898,8 +1903,17 @@ void MainWindow::on_actionAutoShutdown_toggled(bool enabled) void MainWindow::updatePowerManagementState() { - const bool inhibitSuspend = (Preferences::instance()->preventFromSuspendWhenDownloading() && BitTorrent::Session::instance()->hasUnfinishedTorrents()) - || (Preferences::instance()->preventFromSuspendWhenSeeding() && BitTorrent::Session::instance()->hasRunningSeed()); + const QVector allTorrents = BitTorrent::Session::instance()->torrents(); + const bool hasUnfinishedTorrents = std::any_of(allTorrents.cbegin(), allTorrents.cend(), [](const BitTorrent::Torrent *torrent) + { + return (!torrent->isSeed() && !torrent->isPaused() && !torrent->isErrored() && torrent->hasMetadata()); + }); + const bool hasRunningSeed = std::any_of(allTorrents.cbegin(), allTorrents.cend(), [](const BitTorrent::Torrent *torrent) + { + return (torrent->isSeed() && !torrent->isPaused()); + }); + const bool inhibitSuspend = (Preferences::instance()->preventFromSuspendWhenDownloading() && hasUnfinishedTorrents) + || (Preferences::instance()->preventFromSuspendWhenSeeding() && hasRunningSeed); m_pwr->setActivityState(inhibitSuspend); }