diff --git a/connector/syncthingconnectionsettings.h b/connector/syncthingconnectionsettings.h index 22d5c96..f975d78 100644 --- a/connector/syncthingconnectionsettings.h +++ b/connector/syncthingconnectionsettings.h @@ -22,6 +22,7 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingConnectionSettings { int reconnectInterval = defaultReconnectInterval; QString httpsCertPath; QList expectedSslErrors; + bool autoConnect = false; bool loadHttpsCert(); static constexpr int defaultTrafficPollInterval = 5000; diff --git a/widgets/settings/connectionoptionpage.ui b/widgets/settings/connectionoptionpage.ui index f09b250..eb47719 100644 --- a/widgets/settings/connectionoptionpage.ui +++ b/widgets/settings/connectionoptionpage.ui @@ -428,21 +428,21 @@ - + Status - + disconnected - + Apply connection settings and try to reconnect with the currently selected config @@ -453,6 +453,16 @@ + + + + Whether to connect automatically on startup. This setting might be overruled by systemd and launcher settings. + + + Connect automatically on startup + + + diff --git a/widgets/settings/settings.cpp b/widgets/settings/settings.cpp index 595cf5d..52916d2 100644 --- a/widgets/settings/settings.cpp +++ b/widgets/settings/settings.cpp @@ -136,8 +136,15 @@ Launcher::LauncherStatus Launcher::apply( const auto consideredForReconnect = considerForReconnect && isRelevant; if (currentConnectionSettings && (!considerForReconnect || !isRelevant || isRunning)) { - // ensure auto-reconnect is configured according to settings + // ensure auto-reconnect is configured according to settings and connect if auto-connect is configured connection.setAutoReconnectInterval(currentConnectionSettings->reconnectInterval); + if (currentConnectionSettings->autoConnect) { + if (reconnectRequired) { + connection.reconnect(); + } else { + connection.connect(); + } + } } else { // disable auto-reconnect regardless of the overall settings connection.setAutoReconnectInterval(0); @@ -227,6 +234,8 @@ void restore() = settings.value(QStringLiteral("errorsPollInterval"), connectionSettings->errorsPollInterval).toInt(); connectionSettings->reconnectInterval = settings.value(QStringLiteral("reconnectInterval"), connectionSettings->reconnectInterval).toInt(); + connectionSettings->autoConnect + = settings.value(QStringLiteral("autoConnect"), connectionSettings->autoConnect).toBool(); connectionSettings->httpsCertPath = settings.value(QStringLiteral("httpsCertPath")).toString(); if (!connectionSettings->loadHttpsCert()) { QMessageBox::critical(nullptr, QCoreApplication::applicationName(), @@ -336,6 +345,7 @@ void save() settings.setValue(QStringLiteral("devStatsPollInterval"), connectionSettings->devStatsPollInterval); settings.setValue(QStringLiteral("errorsPollInterval"), connectionSettings->errorsPollInterval); settings.setValue(QStringLiteral("reconnectInterval"), connectionSettings->reconnectInterval); + settings.setValue(QStringLiteral("autoConnect"), connectionSettings->autoConnect); settings.setValue(QStringLiteral("httpsCertPath"), connectionSettings->httpsCertPath); } settings.endArray(); @@ -468,8 +478,15 @@ Systemd::ServiceStatus Systemd::apply( const auto consideredForReconnect = considerForReconnect && isRelevant && unitAvailable; if (currentConnectionSettings && (!considerForReconnect || !isRelevant || isRunning)) { - // ensure auto-reconnect is configured according to settings + // ensure auto-reconnect is configured according to settings and connect if auto-connect is configured connection.setAutoReconnectInterval(currentConnectionSettings->reconnectInterval); + if (currentConnectionSettings->autoConnect) { + if (reconnectRequired) { + connection.reconnect(); + } else { + connection.connect(); + } + } } else { // disable auto-reconnect regardless of the overall settings connection.setAutoReconnectInterval(0); diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index d30bb3b..d74b149 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -176,6 +176,7 @@ bool ConnectionOptionPage::showConnectionSettings(int index) ui()->pollDevStatsSpinBox->setValue(connectionSettings.devStatsPollInterval); ui()->pollErrorsSpinBox->setValue(connectionSettings.errorsPollInterval); ui()->reconnectSpinBox->setValue(connectionSettings.reconnectInterval); + ui()->autoConnectCheckBox->setChecked(connectionSettings.autoConnect); setCurrentIndex(index); return true; } @@ -199,6 +200,7 @@ bool ConnectionOptionPage::cacheCurrentSettings(bool applying) connectionSettings.devStatsPollInterval = ui()->pollDevStatsSpinBox->value(); connectionSettings.errorsPollInterval = ui()->pollErrorsSpinBox->value(); connectionSettings.reconnectInterval = ui()->reconnectSpinBox->value(); + connectionSettings.autoConnect = ui()->autoConnectCheckBox->isChecked(); if (!connectionSettings.loadHttpsCert()) { const QString errorMessage = QCoreApplication::translate("QtGui::ConnectionOptionPage", "Unable to load specified certificate \"%1\".") .arg(connectionSettings.httpsCertPath);