Restoration of bandwidth meter after closing of GUI

This commit is contained in:
Dmitriy Karpushin 2023-03-15 16:46:59 +03:00
parent 7167c2f20d
commit 8fa409d6c1
4 changed files with 67 additions and 15 deletions

View file

@ -54,6 +54,10 @@ AndroidController::AndroidController() : QObject()
isConnected = doc.object()["connected"].toBool();
if (isConnected) {
emit scheduleStatusCheckSignal();
}
emit initialized(
true, isConnected,
time > 0 ? QDateTime::fromMSecsSinceEpoch(time) : QDateTime());
@ -66,9 +70,11 @@ AndroidController::AndroidController() : QObject()
Q_UNUSED(parcelBody);
qDebug() << "Transact: connected";
isConnected = true;
if (!isConnected) {
emit scheduleStatusCheckSignal();
}
emit scheduleStatusCheckSignal();
isConnected = true;
emit connectionStateChanged(VpnProtocol::Connected);
}, Qt::QueuedConnection);

View file

@ -133,6 +133,7 @@ void UiLogic::initalizeUiLogic()
connect(AndroidController::instance(), &AndroidController::initialized, [this](bool status, bool connected, const QDateTime& connectionDate) {
if (connected) {
pageLogic<VpnLogic>()->onConnectionStateChanged(VpnProtocol::Connected);
m_vpnConnection->restoreConnection();
}
});
if (!AndroidController::instance()->initialize(pageLogic<StartPageLogic>())) {

View file

@ -20,7 +20,6 @@
#ifdef Q_OS_ANDROID
#include "../../platforms/android/android_controller.h"
#include "protocols/android_vpnprotocol.h"
#endif
#ifdef Q_OS_IOS
@ -353,10 +352,8 @@ void VpnConnection::connectToVpn(int serverIndex,
}
m_vpnProtocol->prepare();
#elif defined Q_OS_ANDROID
Proto proto = ContainerProps::defaultProtocol(container);
AndroidVpnProtocol *androidVpnProtocol = new AndroidVpnProtocol(proto, m_vpnConfiguration);
connect(AndroidController::instance(), &AndroidController::connectionStateChanged, androidVpnProtocol, &AndroidVpnProtocol::setConnectionState);
connect(AndroidController::instance(), &AndroidController::statusUpdated, androidVpnProtocol, &AndroidVpnProtocol::connectionDataUpdated);
androidVpnProtocol = createDefaultAndroidVpnProtocol(container);
createAndroidConnections(container);
m_vpnProtocol.reset(androidVpnProtocol);
#elif defined Q_OS_IOS
@ -373,9 +370,7 @@ void VpnConnection::connectToVpn(int serverIndex,
m_vpnProtocol.reset(iosVpnProtocol);
#endif
connect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError);
connect(m_vpnProtocol.data(), SIGNAL(connectionStateChanged(VpnProtocol::VpnConnectionState)), this, SLOT(onConnectionStateChanged(VpnProtocol::VpnConnectionState)));
connect(m_vpnProtocol.data(), SIGNAL(bytesChanged(quint64, quint64)), this, SLOT(onBytesChanged(quint64, quint64)));
createProtocolConnections();
m_serverController->disconnectFromHost(credentials);
@ -383,6 +378,44 @@ void VpnConnection::connectToVpn(int serverIndex,
if (e) emit VpnProtocol::Error;
}
void VpnConnection::restoreConnection() {
createAndroidConnections();
m_vpnProtocol.reset(androidVpnProtocol);
createProtocolConnections();
}
void VpnConnection::createAndroidConnections()
{
int serverIndex = m_settings->defaultServerIndex();
DockerContainer container = m_settings->defaultContainer(serverIndex);
createAndroidConnections(container);
}
void VpnConnection::createAndroidConnections(DockerContainer container)
{
androidVpnProtocol = createDefaultAndroidVpnProtocol(container);
connect(AndroidController::instance(), &AndroidController::connectionStateChanged, androidVpnProtocol, &AndroidVpnProtocol::setConnectionState);
connect(AndroidController::instance(), &AndroidController::statusUpdated, androidVpnProtocol, &AndroidVpnProtocol::connectionDataUpdated);
}
void VpnConnection::createProtocolConnections() {
connect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError);
connect(m_vpnProtocol.data(), SIGNAL(connectionStateChanged(VpnProtocol::VpnConnectionState)), this, SLOT(onConnectionStateChanged(VpnProtocol::VpnConnectionState)));
connect(m_vpnProtocol.data(), SIGNAL(bytesChanged(quint64, quint64)), this, SLOT(onBytesChanged(quint64, quint64)));
}
AndroidVpnProtocol* VpnConnection::createDefaultAndroidVpnProtocol(DockerContainer container)
{
Proto proto = ContainerProps::defaultProtocol(container);
AndroidVpnProtocol *androidVpnProtocol = new AndroidVpnProtocol(proto, m_vpnConfiguration);
return androidVpnProtocol;
}
QString VpnConnection::bytesPerSecToText(quint64 bytes)
{
double mbps = bytes * 8 / 1e6;
@ -401,8 +434,6 @@ void VpnConnection::disconnectFromVpn()
}
#endif
if (!m_vpnProtocol.data()) {
emit connectionStateChanged(VpnProtocol::Disconnected);
#ifdef Q_OS_ANDROID
@ -415,11 +446,8 @@ void VpnConnection::disconnectFromVpn()
VpnProtocol::VpnConnectionState VpnConnection::connectionState()
{
if (!m_vpnProtocol) return VpnProtocol::Disconnected;
return m_vpnProtocol->connectionState();
}
bool VpnConnection::isConnected() const

View file

@ -18,6 +18,10 @@
#include "core/ipcclient.h"
#endif
#ifdef Q_OS_ANDROID
#include "protocols/android_vpnprotocol.h"
#endif
class VpnConfigurator;
class ServerController;
@ -61,6 +65,10 @@ public:
const QString &remoteAddress() const;
void addSitesRoutes(const QString &gw, Settings::RouteMode mode);
#ifdef Q_OS_ANDROID
void restoreConnection();
#endif
public slots:
void connectToVpn(int serverIndex,
const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig);
@ -101,6 +109,15 @@ private:
#ifdef Q_OS_IOS
IOSVpnProtocol * iosVpnProtocol{nullptr};
#endif
#ifdef Q_OS_ANDROID
AndroidVpnProtocol* androidVpnProtocol = nullptr;
AndroidVpnProtocol* createDefaultAndroidVpnProtocol(DockerContainer container);
void createAndroidConnections();
void createAndroidConnections(DockerContainer container);
#endif
void createProtocolConnections();
};
#endif // VPNCONNECTION_H