mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-23 04:54:18 +00:00
Inhibit sleep regardless of activity
"Active torrents" is a somewhat unintuitive concept as a basis for preventing sleep, as torrents can become active or inactive on the network at any time. This brings some predictability to the inhibit sleep option, and will inhibit sleep as long as there are unpaused downloads or uploads, regardless of network activity. Closes #1696, #4592, #4655, #7019, #7159, #7452
This commit is contained in:
parent
e59841d35c
commit
48cd993c92
@ -1863,20 +1863,26 @@ TorrentHandle *Session::findTorrent(const InfoHash &hash) const
|
|||||||
|
|
||||||
bool Session::hasActiveTorrents() const
|
bool Session::hasActiveTorrents() const
|
||||||
{
|
{
|
||||||
foreach (TorrentHandle *const torrent, m_torrents)
|
return std::any_of(m_torrents.begin(), m_torrents.end(), [](TorrentHandle *torrent)
|
||||||
if (TorrentFilter::ActiveTorrent.match(torrent))
|
{
|
||||||
return true;
|
return TorrentFilter::ActiveTorrent.match(torrent);
|
||||||
|
});
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Session::hasUnfinishedTorrents() const
|
bool Session::hasUnfinishedTorrents() const
|
||||||
{
|
{
|
||||||
foreach (TorrentHandle *const torrent, m_torrents)
|
return std::any_of(m_torrents.begin(), m_torrents.end(), [](const TorrentHandle *torrent)
|
||||||
if (!torrent->isSeed() && !torrent->isPaused())
|
{
|
||||||
return true;
|
return (!torrent->isSeed() && !torrent->isPaused());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
bool Session::hasRunningSeed() const
|
||||||
|
{
|
||||||
|
return std::any_of(m_torrents.begin(), m_torrents.end(), [](const TorrentHandle *torrent)
|
||||||
|
{
|
||||||
|
return (torrent->isSeed() && !torrent->isPaused());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Session::banIP(const QString &ip)
|
void Session::banIP(const QString &ip)
|
||||||
|
@ -454,6 +454,7 @@ namespace BitTorrent
|
|||||||
TorrentStatusReport torrentStatusReport() const;
|
TorrentStatusReport torrentStatusReport() const;
|
||||||
bool hasActiveTorrents() const;
|
bool hasActiveTorrents() const;
|
||||||
bool hasUnfinishedTorrents() const;
|
bool hasUnfinishedTorrents() const;
|
||||||
|
bool hasRunningSeed() const;
|
||||||
const SessionStatus &status() const;
|
const SessionStatus &status() const;
|
||||||
const CacheStatus &cacheStatus() const;
|
const CacheStatus &cacheStatus() const;
|
||||||
quint64 getAlltimeDL() const;
|
quint64 getAlltimeDL() const;
|
||||||
|
@ -235,14 +235,24 @@ void Preferences::setSplashScreenDisabled(bool b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Preventing from system suspend while active torrents are presented.
|
// Preventing from system suspend while active torrents are presented.
|
||||||
bool Preferences::preventFromSuspend() const
|
bool Preferences::preventFromSuspendWhenDownloading() const
|
||||||
{
|
{
|
||||||
return value("Preferences/General/PreventFromSuspend", false).toBool();
|
return value("Preferences/General/PreventFromSuspendWhenDownloading", false).toBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Preferences::setPreventFromSuspend(bool b)
|
void Preferences::setPreventFromSuspendWhenDownloading(bool b)
|
||||||
{
|
{
|
||||||
setValue("Preferences/General/PreventFromSuspend", b);
|
setValue("Preferences/General/PreventFromSuspendWhenDownloading", b);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Preferences::preventFromSuspendWhenSeeding() const
|
||||||
|
{
|
||||||
|
return value("Preferences/General/PreventFromSuspendWhenSeeding", false).toBool();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Preferences::setPreventFromSuspendWhenSeeding(bool b)
|
||||||
|
{
|
||||||
|
setValue("Preferences/General/PreventFromSuspendWhenSeeding", b);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
@ -1552,6 +1562,8 @@ void Preferences::setSpeedWidgetGraphEnable(int id, const bool enable)
|
|||||||
|
|
||||||
void Preferences::upgrade()
|
void Preferences::upgrade()
|
||||||
{
|
{
|
||||||
|
SettingsStorage *settingsStorage = SettingsStorage::instance();
|
||||||
|
|
||||||
QStringList labels = value("TransferListFilters/customLabels").toStringList();
|
QStringList labels = value("TransferListFilters/customLabels").toStringList();
|
||||||
if (!labels.isEmpty()) {
|
if (!labels.isEmpty()) {
|
||||||
QVariantMap categories = value("BitTorrent/Session/Categories").toMap();
|
QVariantMap categories = value("BitTorrent/Session/Categories").toMap();
|
||||||
@ -1560,10 +1572,17 @@ void Preferences::upgrade()
|
|||||||
categories[label] = "";
|
categories[label] = "";
|
||||||
}
|
}
|
||||||
setValue("BitTorrent/Session/Categories", categories);
|
setValue("BitTorrent/Session/Categories", categories);
|
||||||
SettingsStorage::instance()->removeValue("TransferListFilters/customLabels");
|
settingsStorage->removeValue("TransferListFilters/customLabels");
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsStorage::instance()->removeValue("Preferences/Downloads/AppendLabel");
|
settingsStorage->removeValue("Preferences/Downloads/AppendLabel");
|
||||||
|
|
||||||
|
// Inhibit sleep based on running downloads/available seeds rather than network activity.
|
||||||
|
if (value("Preferences/General/PreventFromSuspend", false).toBool()) {
|
||||||
|
setPreventFromSuspendWhenDownloading(true);
|
||||||
|
setPreventFromSuspendWhenSeeding(true);
|
||||||
|
}
|
||||||
|
settingsStorage->removeValue("Preferences/General/PreventFromSuspend");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Preferences::apply()
|
void Preferences::apply()
|
||||||
|
@ -123,8 +123,10 @@ public:
|
|||||||
void setStartMinimized(bool b);
|
void setStartMinimized(bool b);
|
||||||
bool isSplashScreenDisabled() const;
|
bool isSplashScreenDisabled() const;
|
||||||
void setSplashScreenDisabled(bool b);
|
void setSplashScreenDisabled(bool b);
|
||||||
bool preventFromSuspend() const;
|
bool preventFromSuspendWhenDownloading() const;
|
||||||
void setPreventFromSuspend(bool b);
|
void setPreventFromSuspendWhenDownloading(bool b);
|
||||||
|
bool preventFromSuspendWhenSeeding() const;
|
||||||
|
void setPreventFromSuspendWhenSeeding(bool b);
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
bool WinStartup() const;
|
bool WinStartup() const;
|
||||||
void setWinStartup(bool b);
|
void setWinStartup(bool b);
|
||||||
|
@ -342,7 +342,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
|
|
||||||
m_pwr = new PowerManagement(this);
|
m_pwr = new PowerManagement(this);
|
||||||
m_preventTimer = new QTimer(this);
|
m_preventTimer = new QTimer(this);
|
||||||
connect(m_preventTimer, &QTimer::timeout, this, &MainWindow::checkForActiveTorrents);
|
connect(m_preventTimer, &QTimer::timeout, this, &MainWindow::updatePowerManagementState);
|
||||||
|
|
||||||
// Configure BT session according to options
|
// Configure BT session according to options
|
||||||
loadPreferences(false);
|
loadPreferences(false);
|
||||||
@ -1445,7 +1445,7 @@ void MainWindow::loadPreferences(bool configureSession)
|
|||||||
|
|
||||||
showStatusBar(pref->isStatusbarDisplayed());
|
showStatusBar(pref->isStatusbarDisplayed());
|
||||||
|
|
||||||
if (pref->preventFromSuspend() && !m_preventTimer->isActive()) {
|
if ((pref->preventFromSuspendWhenDownloading() || pref->preventFromSuspendWhenSeeding()) && !m_preventTimer->isActive()) {
|
||||||
m_preventTimer->start(PREVENT_SUSPEND_INTERVAL);
|
m_preventTimer->start(PREVENT_SUSPEND_INTERVAL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1971,9 +1971,11 @@ void MainWindow::on_actionAutoShutdown_toggled(bool enabled)
|
|||||||
Preferences::instance()->setShutdownWhenDownloadsComplete(enabled);
|
Preferences::instance()->setShutdownWhenDownloadsComplete(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::checkForActiveTorrents()
|
void MainWindow::updatePowerManagementState()
|
||||||
{
|
{
|
||||||
m_pwr->setActivityState(BitTorrent::Session::instance()->hasActiveTorrents());
|
const bool inhibitSuspend = (Preferences::instance()->preventFromSuspendWhenDownloading() && BitTorrent::Session::instance()->hasUnfinishedTorrents())
|
||||||
|
|| (Preferences::instance()->preventFromSuspendWhenSeeding() && BitTorrent::Session::instance()->hasRunningSeed());
|
||||||
|
m_pwr->setActivityState(inhibitSuspend);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef Q_OS_MAC
|
#ifndef Q_OS_MAC
|
||||||
|
@ -173,8 +173,8 @@ private slots:
|
|||||||
void on_actionDownloadFromURL_triggered();
|
void on_actionDownloadFromURL_triggered();
|
||||||
void on_actionExit_triggered();
|
void on_actionExit_triggered();
|
||||||
void on_actionLock_triggered();
|
void on_actionLock_triggered();
|
||||||
// Check for active torrents and set preventing from suspend state
|
// Check for unpaused downloading or seeding torrents and prevent system suspend/sleep according to preferences
|
||||||
void checkForActiveTorrents();
|
void updatePowerManagementState();
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||||
void checkProgramUpdate();
|
void checkProgramUpdate();
|
||||||
#endif
|
#endif
|
||||||
|
@ -225,10 +225,12 @@ OptionsDialog::OptionsDialog(QWidget *parent)
|
|||||||
connect(m_ui->checkShowSplash, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
connect(m_ui->checkShowSplash, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
||||||
connect(m_ui->checkProgramExitConfirm, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
connect(m_ui->checkProgramExitConfirm, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
||||||
connect(m_ui->checkProgramAutoExitConfirm, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
connect(m_ui->checkProgramAutoExitConfirm, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
||||||
connect(m_ui->checkPreventFromSuspend, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
connect(m_ui->checkPreventFromSuspendWhenDownloading, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
||||||
|
connect(m_ui->checkPreventFromSuspendWhenSeeding, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
||||||
connect(m_ui->comboTrayIcon, qComboBoxCurrentIndexChanged, this, &ThisType::enableApplyButton);
|
connect(m_ui->comboTrayIcon, qComboBoxCurrentIndexChanged, this, &ThisType::enableApplyButton);
|
||||||
#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) && !defined(QT_DBUS_LIB)
|
#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) && !defined(QT_DBUS_LIB)
|
||||||
m_ui->checkPreventFromSuspend->setDisabled(true);
|
m_ui->checkPreventFromSuspendWhenDownloading->setDisabled(true);
|
||||||
|
m_ui->checkPreventFromSuspendWhenSeeding->setDisabled(true);
|
||||||
#endif
|
#endif
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||||
connect(m_ui->checkAssociateTorrents, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
connect(m_ui->checkAssociateTorrents, &QAbstractButton::toggled, this, &ThisType::enableApplyButton);
|
||||||
@ -556,7 +558,8 @@ void OptionsDialog::saveOptions()
|
|||||||
pref->setSplashScreenDisabled(isSplashScreenDisabled());
|
pref->setSplashScreenDisabled(isSplashScreenDisabled());
|
||||||
pref->setConfirmOnExit(m_ui->checkProgramExitConfirm->isChecked());
|
pref->setConfirmOnExit(m_ui->checkProgramExitConfirm->isChecked());
|
||||||
pref->setDontConfirmAutoExit(!m_ui->checkProgramAutoExitConfirm->isChecked());
|
pref->setDontConfirmAutoExit(!m_ui->checkProgramAutoExitConfirm->isChecked());
|
||||||
pref->setPreventFromSuspend(preventFromSuspend());
|
pref->setPreventFromSuspendWhenDownloading(m_ui->checkPreventFromSuspendWhenDownloading->isChecked());
|
||||||
|
pref->setPreventFromSuspendWhenSeeding(m_ui->checkPreventFromSuspendWhenSeeding->isChecked());
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
pref->setWinStartup(WinStartup());
|
pref->setWinStartup(WinStartup());
|
||||||
// Windows: file association settings
|
// Windows: file association settings
|
||||||
@ -793,7 +796,8 @@ void OptionsDialog::loadOptions()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_ui->checkPreventFromSuspend->setChecked(pref->preventFromSuspend());
|
m_ui->checkPreventFromSuspendWhenDownloading->setChecked(pref->preventFromSuspendWhenDownloading());
|
||||||
|
m_ui->checkPreventFromSuspendWhenSeeding->setChecked(pref->preventFromSuspendWhenSeeding());
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
m_ui->checkStartup->setChecked(pref->WinStartup());
|
m_ui->checkStartup->setChecked(pref->WinStartup());
|
||||||
@ -1407,11 +1411,6 @@ bool OptionsDialog::WinStartup() const
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool OptionsDialog::preventFromSuspend() const
|
|
||||||
{
|
|
||||||
return m_ui->checkPreventFromSuspend->isChecked();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OptionsDialog::preAllocateAllFiles() const
|
bool OptionsDialog::preAllocateAllFiles() const
|
||||||
{
|
{
|
||||||
return m_ui->checkPreallocateAll->isChecked();
|
return m_ui->checkPreallocateAll->isChecked();
|
||||||
|
@ -122,7 +122,6 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
bool startMinimized() const;
|
bool startMinimized() const;
|
||||||
bool isSplashScreenDisabled() const;
|
bool isSplashScreenDisabled() const;
|
||||||
bool preventFromSuspend() const;
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
bool WinStartup() const;
|
bool WinStartup() const;
|
||||||
#endif
|
#endif
|
||||||
|
@ -479,9 +479,16 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_16">
|
<layout class="QVBoxLayout" name="verticalLayout_16">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="checkPreventFromSuspend">
|
<widget class="QCheckBox" name="checkPreventFromSuspendWhenDownloading">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Inhibit system sleep when torrents are active</string>
|
<string>Inhibit system sleep when torrents are downloading</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="checkPreventFromSuspendWhenSeeding">
|
||||||
|
<property name="text">
|
||||||
|
<string>Inhibit system sleep when torrents are seeding</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -3369,7 +3376,8 @@ Use ';' to split multiple entries. Can use wildcard '*'.</string>
|
|||||||
<tabstop>comboTrayIcon</tabstop>
|
<tabstop>comboTrayIcon</tabstop>
|
||||||
<tabstop>checkAssociateTorrents</tabstop>
|
<tabstop>checkAssociateTorrents</tabstop>
|
||||||
<tabstop>checkAssociateMagnetLinks</tabstop>
|
<tabstop>checkAssociateMagnetLinks</tabstop>
|
||||||
<tabstop>checkPreventFromSuspend</tabstop>
|
<tabstop>checkPreventFromSuspendWhenDownloading</tabstop>
|
||||||
|
<tabstop>checkPreventFromSuspendWhenSeeding</tabstop>
|
||||||
<tabstop>checkAdditionDialog</tabstop>
|
<tabstop>checkAdditionDialog</tabstop>
|
||||||
<tabstop>checkAdditionDialogFront</tabstop>
|
<tabstop>checkAdditionDialogFront</tabstop>
|
||||||
<tabstop>checkPreallocateAll</tabstop>
|
<tabstop>checkPreallocateAll</tabstop>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user