From b2a66c806b5fa520a2143953f37ac22c6f5862dc Mon Sep 17 00:00:00 2001 From: Martchus Date: Thu, 12 Jan 2017 22:18:40 +0100 Subject: [PATCH] Don't connect to local instance when not running Prevent connection attempt to local instance at startup or after applying settings when Syncthing systemd unit isn't running --- tray/gui/traywidget.cpp | 32 +++++++++++++++++++++----------- tray/gui/traywidget.h | 2 +- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/tray/gui/traywidget.cpp b/tray/gui/traywidget.cpp index d957cac..5b5a3f3 100644 --- a/tray/gui/traywidget.cpp +++ b/tray/gui/traywidget.cpp @@ -36,7 +36,7 @@ #include #include -#include + using namespace ApplicationUtilities; using namespace ConversionUtilities; using namespace ChronoUtilities; @@ -378,7 +378,17 @@ void TrayWidget::applySettings() instance->m_connectionsMenu->actions().at(0)->setChecked(true); } instance->m_ui->connectionsPushButton->setText(instance->m_selectedConnection->label); - instance->m_connection.connect(*instance->m_selectedConnection); + const bool reconnectRequired = instance->m_connection.applySettings(*instance->m_selectedConnection); + + // reconnect to apply settings considering systemd +#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD + const bool couldReconnect = instance->handleSystemdStatusChanged(); + if(reconnectRequired && couldReconnect) { + instance->m_connection.reconnect(); + } +#else + instances->m_connection.reconnect(); +#endif // web view #ifndef SYNCTHINGTRAY_NO_WEBVIEW @@ -387,11 +397,6 @@ void TrayWidget::applySettings() } #endif - // systemd -#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD - instance->handleSystemdStatusChanged(); -#endif - // update visual appearance instance->m_ui->trafficFormWidget->setVisible(settings.appearance.showTraffic); instance->m_ui->trafficIconLabel->setVisible(settings.appearance.showTraffic); @@ -497,11 +502,12 @@ void TrayWidget::updateTraffic() } #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD -void TrayWidget::handleSystemdStatusChanged() +bool TrayWidget::handleSystemdStatusChanged() { const SyncthingService &service = syncthingService(); const Settings::Systemd &settings = Settings::values().systemd; const bool serviceRelevant = service.isSystemdAvailable() && isLocal(QUrl(m_connection.syncthingUrl())); + bool couldConnectNow = true; if(serviceRelevant) { const bool isRunning = service.isRunning(); @@ -521,12 +527,14 @@ void TrayWidget::handleSystemdStatusChanged() if(isRunning && m_selectedConnection) { // auto-reconnect might have been disabled when unit was inactive before, so re-enable it according current connection settings m_connection.setAutoReconnectInterval(m_selectedConnection->reconnectInterval); - // and reconnect in 8 seconds (Syncthing needs a few seconds till the API becomes available) - QTimer::singleShot(8000, Qt::VeryCoarseTimer, this, &TrayWidget::connectIfServiceRunning); + if(!m_connection.isConnected()) { + // FIXME: This will fail if Syncthing has just been started and isn't ready yet + m_connection.connect(); + } } else { // disable auto-reconnect if unit isn't running - std::cout << "disabling reconnect" << std::endl; m_connection.setAutoReconnectInterval(0); + couldConnectNow = false; } } } @@ -537,6 +545,8 @@ void TrayWidget::handleSystemdStatusChanged() if((!settings.considerForReconnect || !serviceRelevant) && m_selectedConnection) { m_connection.setAutoReconnectInterval(m_selectedConnection->reconnectInterval); } + + return couldConnectNow; } void TrayWidget::connectIfServiceRunning() diff --git a/tray/gui/traywidget.h b/tray/gui/traywidget.h index 4427a9d..4c3ed2d 100644 --- a/tray/gui/traywidget.h +++ b/tray/gui/traywidget.h @@ -72,7 +72,7 @@ private slots: void changeStatus(); void updateTraffic(); #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD - void handleSystemdStatusChanged(); + bool handleSystemdStatusChanged(); void connectIfServiceRunning(); #endif #ifndef SYNCTHINGTRAY_NO_WEBVIEW