diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 289b474b..dbd4160d 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -385,7 +385,13 @@ void AmneziaApplication::initControllers() m_engine->rootContext()->setContextProperty("ApiController", m_apiController.get()); connect(m_apiController.get(), &ApiController::updateStarted, this, [this]() { emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Connecting); }); - connect(m_apiController.get(), &ApiController::errorOccurred, this, - [this]() { emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected); }); - connect(m_apiController.get(), &ApiController::updateFinished, m_connectionController.get(), &ConnectionController::toggleConnection); + connect(m_apiController.get(), &ApiController::errorOccurred, this, [this](const QString &errorMessage) { + if (m_connectionController->isConnectionInProgress()) { + emit m_pageController->showErrorMessage(errorMessage); + } + + emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected); + }); + connect(m_apiController.get(), &ApiController::updateFinished, m_connectionController.get(), + &ConnectionController::toggleConnection); } diff --git a/client/ui/controllers/apiController.cpp b/client/ui/controllers/apiController.cpp index 43bea9fc..808fd2eb 100644 --- a/client/ui/controllers/apiController.cpp +++ b/client/ui/controllers/apiController.cpp @@ -70,14 +70,17 @@ QJsonObject ApiController::fillApiPayload(const QString &protocol, const ApiCont void ApiController::updateServerConfigFromApi() { QtConcurrent::run([this]() { + if (m_isConfigUpdateStarted) { + emit updateFinished(false); + return; + } + auto serverConfig = m_serversModel->getDefaultServerConfig(); auto containerConfig = serverConfig.value(config_key::containers).toArray(); - bool isConfigUpdateStarted = false; - if (serverConfig.value(config_key::configVersion).toInt() && containerConfig.isEmpty()) { emit updateStarted(); - isConfigUpdateStarted = true; + m_isConfigUpdateStarted = true; QNetworkAccessManager manager; @@ -110,6 +113,12 @@ void ApiController::updateServerConfigFromApi() QByteArray ba = QByteArray::fromBase64(data.toUtf8(), QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals); + if (ba.isEmpty()) { + emit errorOccurred(errorString(ApiConfigDownloadError)); + m_isConfigUpdateStarted = false; + return; + } + QByteArray ba_uncompressed = qUncompress(ba); if (!ba_uncompressed.isEmpty()) { ba = ba_uncompressed; @@ -133,11 +142,13 @@ void ApiController::updateServerConfigFromApi() qDebug() << reply->error(); qDebug() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); emit errorOccurred(errorString(ApiConfigDownloadError)); + m_isConfigUpdateStarted = false; return; } } - emit updateFinished(isConfigUpdateStarted); + emit updateFinished(m_isConfigUpdateStarted); + m_isConfigUpdateStarted = false; return; }); } diff --git a/client/ui/controllers/apiController.h b/client/ui/controllers/apiController.h index c5d79ded..2a1393c4 100644 --- a/client/ui/controllers/apiController.h +++ b/client/ui/controllers/apiController.h @@ -39,6 +39,8 @@ private: QSharedPointer m_serversModel; QSharedPointer m_containersModel; + + bool m_isConfigUpdateStarted = false; }; #endif // APICONTROLLER_H diff --git a/client/ui/qml/Components/ConnectButton.qml b/client/ui/qml/Components/ConnectButton.qml index cb2b72dd..7d6b1455 100644 --- a/client/ui/qml/Components/ConnectButton.qml +++ b/client/ui/qml/Components/ConnectButton.qml @@ -138,9 +138,7 @@ Button { } onClicked: { - if (!ConnectionController.isConnectionInProgress) { - ServersModel.setCurrentlyProcessedServerIndex(ServersModel.defaultIndex) - ApiController.updateServerConfigFromApi() - } + ServersModel.setCurrentlyProcessedServerIndex(ServersModel.defaultIndex) + ApiController.updateServerConfigFromApi() } } diff --git a/client/ui/qml/Pages2/PageStart.qml b/client/ui/qml/Pages2/PageStart.qml index d7c63755..a6b79bfa 100644 --- a/client/ui/qml/Pages2/PageStart.qml +++ b/client/ui/qml/Pages2/PageStart.qml @@ -113,14 +113,6 @@ PageType { } } - Connections { - target: ApiController - - function onErrorOccurred(errorMessage) { - PageController.showErrorMessage(errorMessage) - } - } - StackViewType { id: tabBarStackView