Added an option to customize the server poll interval in the Advanced Settings

Signed-off-by: Pablo Ariño Muñoz <progpabarino@gmail.com>
This commit is contained in:
Pablo Ariño Muñoz 2025-02-25 15:43:29 +01:00 committed by backportbot[bot]
parent 2751dde1b7
commit a087da79f0
5 changed files with 108 additions and 1 deletions

View File

@ -50,6 +50,7 @@
#include <QMessageBox>
#include <KZip>
#include <chrono>
namespace {
struct ZipEntry {
@ -187,6 +188,8 @@ GeneralSettings::GeneralSettings(QWidget *parent)
{
_ui->setupUi(this);
_ui->labelInterval->setOpenExternalLinks(true);
connect(_ui->serverNotificationsCheckBox, &QAbstractButton::toggled,
this, &GeneralSettings::slotToggleOptionalServerNotifications);
_ui->serverNotificationsCheckBox->setToolTip(tr("Server notifications that require attention."));
@ -240,7 +243,8 @@ GeneralSettings::GeneralSettings(QWidget *parent)
connect(_ui->stopExistingFolderNowBigSyncCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings);
connect(_ui->newExternalStorage, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings);
connect(_ui->moveFilesToTrashCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings);
connect(_ui->remotePollIntervalSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &GeneralSettings::slotRemotePollIntervalChanged);
connect(_ui->remotePollIntervalCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotRemotePollIntervalCheckBoxToggled);
#ifndef WITH_CRASHREPORTER
_ui->crashreporterCheckBox->setVisible(false);
#endif
@ -321,6 +325,13 @@ void GeneralSettings::loadMiscSettings()
_ui->stopExistingFolderNowBigSyncCheckBox->setChecked(_ui->existingFolderLimitCheckBox->isChecked() && cfgFile.stopSyncingExistingFoldersOverLimit());
_ui->newExternalStorage->setChecked(cfgFile.confirmExternalStorage());
_ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons());
bool hasCustomInterval = cfgFile.hasRemotePollInterval();
_ui->remotePollIntervalCheckBox->setChecked(hasCustomInterval);
auto interval = cfgFile.remotePollInterval();
_ui->remotePollIntervalSpinBox->setValue(static_cast<int>(interval.count() / 1000));
_ui->remotePollIntervalSpinBox->setEnabled(hasCustomInterval);
}
#if defined(BUILD_UPDATER)
@ -639,4 +650,31 @@ void GeneralSettings::customizeStyle()
#endif
}
void GeneralSettings::slotRemotePollIntervalCheckBoxToggled(bool checked) {
_ui->remotePollIntervalSpinBox->setEnabled(checked); // Enable/disable the spin box
ConfigFile cfgFile;
if (checked) {
slotRemotePollIntervalChanged(_ui->remotePollIntervalSpinBox->value());
} else {
// Reset to default interval when unchecked
cfgFile.resetRemotePollInterval();
// Update the spinbox with the default value
auto interval = cfgFile.remotePollInterval();
_ui->remotePollIntervalSpinBox->setValue(static_cast<int>(interval.count() / 1000));
}
}
void GeneralSettings::slotRemotePollIntervalChanged(int seconds) {
if (_currentlyLoading) return;
if (_ui->remotePollIntervalCheckBox->isChecked()) {
ConfigFile cfgFile;
std::chrono::milliseconds interval(seconds * 1000);
cfgFile.setRemotePollInterval(interval);
}
}
} // namespace OCC

View File

@ -59,6 +59,8 @@ private slots:
void slotCreateDebugArchive();
void loadMiscSettings();
void slotShowLegalNotice();
void slotRemotePollIntervalChanged(int seconds);
void slotRemotePollIntervalCheckBoxToggled(bool checked);
#if defined(BUILD_UPDATER)
void slotUpdateInfo();
void slotUpdateChannelChanged();

View File

@ -186,6 +186,50 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_remotePollInterval">
<item>
<widget class="QCheckBox" name="remotePollIntervalCheckBox">
<property name="text">
<string>Server poll interval</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="remotePollIntervalSpinBox">
<property name="minimum">
<number>30</number>
</property>
<property name="maximum">
<number>3600</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelInterval">
<property name="text">
<string extracomment="Trailing part of &quot;Server poll interval&quot; ">seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable)</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_remotePollInterval">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_trash">
<item>

View File

@ -1315,4 +1315,25 @@ void ConfigFile::setDiscoveredLegacyConfigPath(const QString &discoveredLegacyCo
_discoveredLegacyConfigPath = discoveredLegacyConfigPath;
}
bool ConfigFile::hasRemotePollInterval(const QString &connection) const
{
QString con(connection);
if (connection.isEmpty())
con = defaultConnection();
QSettings settings(configFile(), QSettings::IniFormat);
settings.beginGroup(con);
return settings.contains(QLatin1String(remotePollIntervalC));
}
void ConfigFile::resetRemotePollInterval(const QString &connection) {
QString con(connection);
if (connection.isEmpty())
con = defaultConnection();
std::chrono::milliseconds defaultInterval(DEFAULT_REMOTE_POLL_INTERVAL);
setRemotePollInterval(defaultInterval, con); // Use existing method
}
}

View File

@ -153,6 +153,8 @@ public:
[[nodiscard]] bool useNewBigFolderSizeLimit() const;
[[nodiscard]] bool confirmExternalStorage() const;
void setConfirmExternalStorage(bool);
[[nodiscard]] bool hasRemotePollInterval(const QString &connection = QString()) const;
void resetRemotePollInterval(const QString &connection = QString());
/** If we should move the files deleted on the server in the trash */
[[nodiscard]] bool moveToTrash() const;