From 8f57939134ced39c853c7987b46bb01d7091c3fb Mon Sep 17 00:00:00 2001 From: Raine Makelainen Date: Wed, 27 Nov 2019 15:29:27 +0200 Subject: [PATCH] [settings-vpn] Update VPN best state also when connections are refreshed. Fixes JB#48254 --- src/settingsvpnmodel.cpp | 40 +++++++++++++++++++++++++++------------- src/settingsvpnmodel.h | 1 + 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/settingsvpnmodel.cpp b/src/settingsvpnmodel.cpp index 5e20bad..158af7f 100644 --- a/src/settingsvpnmodel.cpp +++ b/src/settingsvpnmodel.cpp @@ -49,8 +49,16 @@ const auto legacyDefaultDomain(QStringLiteral("merproject.org")); int numericValue(VpnConnection::ConnectionState state) { return (state == VpnConnection::Ready ? 3 : - (state == VpnConnection::Configuration ? 2 : - (state == VpnConnection::Failure ? 1 : 0))); + (state == VpnConnection::Configuration ? 2 : 0)); +} + +VpnConnection::ConnectionState getMaxState(VpnConnection::ConnectionState newState, VpnConnection::ConnectionState oldState) +{ + if (numericValue(newState) > numericValue(oldState)) { + return newState; + } + + return oldState; } } // end anonymous namespace @@ -324,11 +332,18 @@ void SettingsVpnModel::connectionsRefreshed() { qCDebug(lcVpnLog) << "VPN connections refreshed"; QVector connections = vpnManager()->connections(); + + // Check to see if the best state has changed + VpnConnection::ConnectionState maxState = VpnConnection::Idle; for (VpnConnection *conn : connections) { connect(conn, &VpnConnection::nameChanged, this, &SettingsVpnModel::updatedConnectionPosition, Qt::UniqueConnection); connect(conn, &VpnConnection::connectedChanged, this, &SettingsVpnModel::connectedChanged, Qt::UniqueConnection); connect(conn, &VpnConnection::stateChanged, this, &SettingsVpnModel::stateChanged, Qt::UniqueConnection); + + maxState = getMaxState(conn->state(), maxState); } + + updateBestState(maxState); } void SettingsVpnModel::stateChanged() @@ -338,17 +353,8 @@ void SettingsVpnModel::stateChanged() emit connectionStateChanged(conn->path(), conn->state()); // Check to see if the best state has changed - VpnConnection::ConnectionState maxState = VpnConnection::Idle; - for (VpnConnection *conn : connections()) { - VpnConnection::ConnectionState state(conn->state()); - if (numericValue(state) > numericValue(maxState)) { - maxState = state; - } - } - if (bestState_ != maxState) { - bestState_ = maxState; - emit bestStateChanged(); - } + VpnConnection::ConnectionState maxState = getMaxState(conn->state(), VpnConnection::Idle); + updateBestState(maxState); } // ========================================================================== @@ -830,3 +836,11 @@ QVariantMap SettingsVpnModel::processOpenVpnProvisioningFile(QFile &provisioning return rv; } + +void SettingsVpnModel::updateBestState(VpnConnection::ConnectionState maxState) +{ + if (bestState_ != maxState) { + bestState_ = maxState; + emit bestStateChanged(); + } +} diff --git a/src/settingsvpnmodel.h b/src/settingsvpnmodel.h index ee167fd..a8cd298 100644 --- a/src/settingsvpnmodel.h +++ b/src/settingsvpnmodel.h @@ -98,6 +98,7 @@ class SYSTEMSETTINGS_EXPORT SettingsVpnModel : public VpnModel virtual void orderConnections(QVector &connections) override; bool compareConnections(const VpnConnection *i, const VpnConnection *j); QVariantMap processOpenVpnProvisioningFile(QFile &provisioningFile); + void updateBestState(VpnConnection::ConnectionState maxState); private Q_SLOTS: void connectionAdded(const QString &path);