#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(); bool isConnected() const; bool isConnectionInProgress() const; QString connectionStateText() const; public slots: void openConnection(); void closeConnection(); QString getLastConnectionError(); void onConnectionStateChanged(Vpn::ConnectionState state); void onCurrentContainerChanged(); signals: void connectToVpn(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig); void disconnectFromVpn(); void connectionStateChanged(); void connectionErrorOccurred(const QString &errorMessage); void reconnectWithChangedContainer(const QString &message); private: QSharedPointer m_serversModel; QSharedPointer m_containersModel; QSharedPointer m_vpnConnection; bool m_isConnected = false; bool m_isConnectionInProgress = false; QString m_connectionStateText = tr("Connect"); }; #endif // CONNECTIONCONTROLLER_H