diff --git a/src/core/positioning/egenioussreceiver.cpp b/src/core/positioning/egenioussreceiver.cpp index 70266bb154..b7471ea147 100644 --- a/src/core/positioning/egenioussreceiver.cpp +++ b/src/core/positioning/egenioussreceiver.cpp @@ -9,22 +9,18 @@ EgenioussReceiver::EgenioussReceiver( QObject *parent ) { connect( mTcpSocket, &QTcpSocket::readyRead, this, &EgenioussReceiver::onReadyRead ); connect( mTcpSocket, &QTcpSocket::errorOccurred, this, &EgenioussReceiver::handleError ); - connect( mTcpSocket, &QTcpSocket::connected, this, &EgenioussReceiver::connected ); - connect( mTcpSocket, &QTcpSocket::disconnected, this, &EgenioussReceiver::disconnected ); + connect( mTcpSocket, &QTcpSocket::stateChanged, this, &EgenioussReceiver::setSocketState ); setValid( true ); } -void EgenioussReceiver::handleConnectDevice() +EgenioussReceiver::~EgenioussReceiver() { - mTcpSocket->connectToHost( mAddress, mPort, QTcpSocket::ReadWrite ); + disconnect( mTcpSocket, &QTcpSocket::stateChanged, this, &EgenioussReceiver::setSocketState ); } -void EgenioussReceiver::connected() +void EgenioussReceiver::handleConnectDevice() { - mSocketState = QAbstractSocket::ConnectedState; - mSocketStateString = tr( "Successfully connected" ); - emit socketStateChanged( mSocketState ); - setValid( true ); + mTcpSocket->connectToHost( mAddress, mPort, QTcpSocket::ReadWrite ); } void EgenioussReceiver::handleDisconnectDevice() @@ -32,14 +28,38 @@ void EgenioussReceiver::handleDisconnectDevice() mTcpSocket->disconnectFromHost(); } -void EgenioussReceiver::disconnected() +void EgenioussReceiver::setSocketState( const QAbstractSocket::SocketState socketState ) { - if ( mTcpSocket->state() == QAbstractSocket::ConnectedState ) + if ( mSocketState == socketState ) { - mSocketState = QAbstractSocket::UnconnectedState; - mSocketStateString = tr( "Disconnected" ); - emit socketStateChanged( mSocketState ); + return; } + + switch ( socketState ) + { + case QAbstractSocket::ConnectingState: + case QAbstractSocket::HostLookupState: + { + mSocketStateString = tr( "Connecting…" ); + break; + } + case QAbstractSocket::ConnectedState: + case QAbstractSocket::BoundState: + { + mSocketStateString = tr( "Successfully connected" ); + break; + } + case QAbstractSocket::UnconnectedState: + mSocketStateString = tr( "Disconnected" ); + default: + { + mSocketStateString = tr( "Socket state %1" ).arg( static_cast( socketState ) ); + } + } + + mSocketState = socketState; + emit socketStateChanged( mSocketState ); + emit socketStateStringChanged( mSocketStateString ); } QList> EgenioussReceiver::details() diff --git a/src/core/positioning/egenioussreceiver.h b/src/core/positioning/egenioussreceiver.h index d4de3c10a7..fbca7057aa 100644 --- a/src/core/positioning/egenioussreceiver.h +++ b/src/core/positioning/egenioussreceiver.h @@ -12,10 +12,12 @@ class EgenioussReceiver : public AbstractGnssReceiver public: explicit EgenioussReceiver( QObject *parent = nullptr ); + ~EgenioussReceiver(); private: void handleConnectDevice() override; void handleDisconnectDevice() override; + void setSocketState( const QAbstractSocket::SocketState socketState ); QList> details() override; private slots: @@ -24,8 +26,6 @@ class EgenioussReceiver : public AbstractGnssReceiver private: void processReceivedData(); - void connected(); - void disconnected(); private: QTcpSocket *mTcpSocket = nullptr; diff --git a/src/qml/PositioningDeviceSettings.qml b/src/qml/PositioningDeviceSettings.qml index d6915faa7b..8425a4365d 100644 --- a/src/qml/PositioningDeviceSettings.qml +++ b/src/qml/PositioningDeviceSettings.qml @@ -49,8 +49,10 @@ Popup { }); } else { positioningDeviceTypeModel.remove(0, 1); - positioningDeviceModel.removeDevice("Egeniouss"); - positioningDeviceComboBox.currentIndex = 0; + if (positioningDeviceModel.findIndexFromDeviceId("egeniouss:") !== -1) { + positioningDeviceModel.removeDevice("Egeniouss"); + positioningDeviceComboBox.currentIndex = 0; + } } positioningDeviceType.model = positioningDeviceTypeModel; }