#ifndef CONNECTIONCONTROLLER_H #define CONNECTIONCONTROLLER_H #include "protocols/vpnprotocol.h" #include "ui/models/containers_model.h" #include "ui/models/servers_model.h" #include "vpnconnection.h" class ConnectionController : public QObject { Q_OBJECT public: Q_PROPERTY(bool isConnected READ isConnected NOTIFY connectionStateChanged) Q_PROPERTY(bool isConnectionInProgress READ isConnectionInProgress NOTIFY connectionStateChanged) Q_PROPERTY(QString connectionStateText READ connectionStateText NOTIFY connectionStateChanged) explicit ConnectionController(const QSharedPointer &serversModel, const QSharedPointer &containersModel, const QSharedPointer &vpnConnection, QObject *parent = nullptr); ~ConnectionController() = default; bool isConnected() const; bool isConnectionInProgress() const; QString connectionStateText() const; public slots: void openConnection(); void closeConnection(); QString getLastConnectionError(); void onConnectionStateChanged(Vpn::ConnectionState state); void onCurrentContainerUpdated(); void onTranslationsUpdated(); signals: void connectToVpn(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig); void disconnectFromVpn(); void connectionStateChanged(); void connectionErrorOccurred(const QString &errorMessage); void reconnectWithUpdatedContainer(const QString &message); private: Vpn::ConnectionState getCurrentConnectionState(); QSharedPointer m_serversModel; QSharedPointer m_containersModel; QSharedPointer m_vpnConnection; bool m_isConnected = false; bool m_isConnectionInProgress = false; QString m_connectionStateText = tr("Connect"); Vpn::ConnectionState m_state; }; #endif // CONNECTIONCONTROLLER_H