Commit bc10a8d2 authored by Gus Grubba's avatar Gus Grubba

Connection management

parent 1c29e15e
...@@ -42,9 +42,9 @@ AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox) ...@@ -42,9 +42,9 @@ AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox)
{ {
_logger = std::make_shared<qt::Logger>(); _logger = std::make_shared<qt::Logger>();
qt::register_types(); // TODO: still needed? qt::register_types(); // TODO: still needed?
_logger->logging_category().setEnabled(QtDebugMsg, false); _logger->logging_category().setEnabled(QtDebugMsg, true);
_logger->logging_category().setEnabled(QtInfoMsg, false); _logger->logging_category().setEnabled(QtInfoMsg, true);
_logger->logging_category().setEnabled(QtWarningMsg, false); _logger->logging_category().setEnabled(QtWarningMsg, true);
_dispatchingLogger = std::make_shared<qt::DispatchingLogger>(_logger); _dispatchingLogger = std::make_shared<qt::DispatchingLogger>(_logger);
connect(&_shared, &AirMapSharedState::error, this, &AirMapManager::_error); connect(&_shared, &AirMapSharedState::error, this, &AirMapManager::_error);
} }
...@@ -63,6 +63,7 @@ AirMapManager::setToolbox(QGCToolbox* toolbox) ...@@ -63,6 +63,7 @@ AirMapManager::setToolbox(QGCToolbox* toolbox)
{ {
AirspaceManager::setToolbox(toolbox); AirspaceManager::setToolbox(toolbox);
AirMapSettings* ap = toolbox->settingsManager()->airMapSettings(); AirMapSettings* ap = toolbox->settingsManager()->airMapSettings();
connect(ap->enableAirMap(), &Fact::rawValueChanged, this, &AirMapManager::_settingsChanged);
connect(ap->usePersonalApiKey(),&Fact::rawValueChanged, this, &AirMapManager::_settingsChanged); connect(ap->usePersonalApiKey(),&Fact::rawValueChanged, this, &AirMapManager::_settingsChanged);
connect(ap->apiKey(), &Fact::rawValueChanged, this, &AirMapManager::_settingsChanged); connect(ap->apiKey(), &Fact::rawValueChanged, this, &AirMapManager::_settingsChanged);
connect(ap->clientID(), &Fact::rawValueChanged, this, &AirMapManager::_settingsChanged); connect(ap->clientID(), &Fact::rawValueChanged, this, &AirMapManager::_settingsChanged);
...@@ -71,6 +72,13 @@ AirMapManager::setToolbox(QGCToolbox* toolbox) ...@@ -71,6 +72,13 @@ AirMapManager::setToolbox(QGCToolbox* toolbox)
_settingsChanged(); _settingsChanged();
} }
//-----------------------------------------------------------------------------
bool
AirMapManager::connected() const
{
return _shared.client() != NULL;
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
AirMapManager::_error(const QString& what, const QString& airmapdMessage, const QString& airmapdDetails) AirMapManager::_error(const QString& what, const QString& airmapdMessage, const QString& airmapdDetails)
...@@ -84,29 +92,41 @@ void ...@@ -84,29 +92,41 @@ void
AirMapManager::_settingsChanged() AirMapManager::_settingsChanged()
{ {
qCDebug(AirMapManagerLog) << "AirMap settings changed"; qCDebug(AirMapManagerLog) << "AirMap settings changed";
_connectStatus.clear();
emit connectStatusChanged();
AirMapSettings* ap = _toolbox->settingsManager()->airMapSettings(); AirMapSettings* ap = _toolbox->settingsManager()->airMapSettings();
//-- If we are disabled, there is nothing else to do.
if (!ap->enableAirMap()->rawValue().toBool()) {
if(_shared.client()) {
delete _shared.client();
_shared.setClient(nullptr);
emit connectedChanged();
}
return;
}
AirMapSharedState::Settings settings; AirMapSharedState::Settings settings;
settings.apiKey = ap->apiKey()->rawValueString(); if(ap->usePersonalApiKey()->rawValue().toBool()) {
#if defined(QGC_AIRMAP_KEY_AVAILABLE) settings.apiKey = ap->apiKey()->rawValueString();
bool apiKeyChanged = settings.apiKey != _shared.settings().apiKey || settings.apiKey.isEmpty(); settings.clientID = ap->clientID()->rawValueString();
#else }
bool apiKeyChanged = settings.apiKey != _shared.settings().apiKey;
#endif
settings.clientID = ap->clientID()->rawValueString();
settings.userName = ap->userName()->rawValueString(); settings.userName = ap->userName()->rawValueString();
settings.password = ap->password()->rawValueString(); settings.password = ap->password()->rawValueString();
//-- If we have a hardwired key (and no custom key is present or enabled), set it. //-- If we have a hardwired key (and no custom key is present), set it.
#if defined(QGC_AIRMAP_KEY_AVAILABLE) #if defined(QGC_AIRMAP_KEY_AVAILABLE)
if(!ap->usePersonalApiKey()->rawValue().toBool() && (settings.apiKey.isEmpty() || settings.clientID.isEmpty())) { if(!ap->usePersonalApiKey()->rawValue().toBool()) {
settings.apiKey = kAirmapAPIKey; settings.apiKey = kAirmapAPIKey;
settings.clientID = kAirmapClientID; settings.clientID = kAirmapClientID;
} }
bool apiKeyChanged = settings.apiKey != _shared.settings().apiKey || settings.apiKey.isEmpty();
#else
bool apiKeyChanged = settings.apiKey != _shared.settings().apiKey;
#endif #endif
_shared.setSettings(settings); _shared.setSettings(settings);
//-- Need to re-create the client if the API key changed //-- Need to re-create the client if the API key changed
if (_shared.client() && apiKeyChanged) { if ((_shared.client() && apiKeyChanged) || !ap->enableAirMap()->rawValue().toBool()) {
delete _shared.client(); delete _shared.client();
_shared.setClient(nullptr); _shared.setClient(nullptr);
emit connectedChanged();
} }
if (!_shared.client() && settings.apiKey != "") { if (!_shared.client() && settings.apiKey != "") {
qCDebug(AirMapManagerLog) << "Creating AirMap client"; qCDebug(AirMapManagerLog) << "Creating AirMap client";
...@@ -119,16 +139,28 @@ AirMapManager::_settingsChanged() ...@@ -119,16 +139,28 @@ AirMapManager::_settingsChanged()
if (result) { if (result) {
qCDebug(AirMapManagerLog) << "Successfully created airmap::qt::Client instance"; qCDebug(AirMapManagerLog) << "Successfully created airmap::qt::Client instance";
_shared.setClient(result.value()); _shared.setClient(result.value());
emit connectedChanged();
_connectStatus = tr("AirMap Enabled");
emit connectStatusChanged();
} else { } else {
qWarning("Failed to create airmap::qt::Client instance"); qWarning("Failed to create airmap::qt::Client instance");
QString description = QString::fromStdString(result.error().description() ? result.error().description().get() : ""); QString description = QString::fromStdString(result.error().description() ? result.error().description().get() : "");
_error("Failed to create airmap::qt::Client instance", QString error = QString::fromStdString(result.error().message());
QString::fromStdString(result.error().message()), description); _error(tr("Failed to create airmap::qt::Client instance"),
error, description);
_connectStatus = error;
if(!description.isEmpty()) {
_connectStatus += "\n";
_connectStatus += description;
}
emit connectStatusChanged();
} }
}); });
} else { } else {
if(settings.apiKey == "") { if(settings.apiKey == "") {
qCDebug(AirMapManagerLog) << "No API key for AirMap"; _connectStatus = tr("No API key for AirMap");
emit connectStatusChanged();
qCDebug(AirMapManagerLog) << _connectStatus;
} }
} }
} }
......
...@@ -39,6 +39,8 @@ public: ...@@ -39,6 +39,8 @@ public:
QString providerName () const override { return QString("AirMap"); } QString providerName () const override { return QString("AirMap"); }
AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) override; AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) override;
bool connected () const override;
QString connectStatus () const override { return _connectStatus; }
protected: protected:
AirspaceRulesetsProvider* _instantiateRulesetsProvider () override; AirspaceRulesetsProvider* _instantiateRulesetsProvider () override;
...@@ -52,6 +54,7 @@ private slots: ...@@ -52,6 +54,7 @@ private slots:
void _settingsChanged (); void _settingsChanged ();
private: private:
QString _connectStatus;
AirMapSharedState _shared; AirMapSharedState _shared;
std::shared_ptr<airmap::qt::Logger> _logger; std::shared_ptr<airmap::qt::Logger> _logger;
std::shared_ptr<airmap::qt::DispatchingLogger> _dispatchingLogger; std::shared_ptr<airmap::qt::DispatchingLogger> _dispatchingLogger;
......
This diff is collapsed.
...@@ -24,11 +24,11 @@ Item { ...@@ -24,11 +24,11 @@ Item {
property bool planView: true property bool planView: true
property color _airspaceColor: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray property color _airspaceColor: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray
property bool _validRules: QGroundControl.airspaceManager.ruleSets.valid property bool _validRules: QGroundControl.airspaceManager.connected && QGroundControl.airspaceManager.ruleSets.valid
property bool _validAdvisories: QGroundControl.airspaceManager.advisories.valid property bool _validAdvisories: QGroundControl.airspaceManager.connected && QGroundControl.airspaceManager.advisories.valid
property color _textColor: qgcPal.text property color _textColor: qgcPal.text
property bool _colapsed: !QGroundControl.airspaceManager.airspaceVisible property bool _colapsed: !QGroundControl.airspaceManager.airspaceVisible || !QGroundControl.airspaceManager.connected
property var _flightPermit: QGroundControl.airspaceManager.flightPlan.flightPermitStatus property int _flightPermit: QGroundControl.airspaceManager.flightPlan.flightPermitStatus
property bool _dirty: false property bool _dirty: false
readonly property real _radius: ScreenTools.defaultFontPixelWidth * 0.5 readonly property real _radius: ScreenTools.defaultFontPixelWidth * 0.5
...@@ -84,7 +84,7 @@ Item { ...@@ -84,7 +84,7 @@ Item {
id: colapsedRect id: colapsedRect
width: parent.width width: parent.width
height: _colapsed ? colapsedRow.height + ScreenTools.defaultFontPixelHeight : 0 height: _colapsed ? colapsedRow.height + ScreenTools.defaultFontPixelHeight : 0
color: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray color: QGroundControl.airspaceManager.connected ? (_validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray) : _colorGray
radius: _radius radius: _radius
visible: _colapsed visible: _colapsed
Row { Row {
...@@ -121,10 +121,16 @@ Item { ...@@ -121,10 +121,16 @@ Item {
} }
AirspaceWeather { AirspaceWeather {
iconHeight: ScreenTools.defaultFontPixelHeight * 2 iconHeight: ScreenTools.defaultFontPixelHeight * 2
visible: QGroundControl.airspaceManager.weatherInfo.valid visible: QGroundControl.airspaceManager.weatherInfo.valid && QGroundControl.airspaceManager.connected
contentColor: _textColor contentColor: _textColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
QGCLabel {
text: qsTr("Not Connected")
color: qgcPal.text
visible: !QGroundControl.airspaceManager.connected
anchors.verticalCenter: parent.verticalCenter
}
} }
QGCColoredImage { QGCColoredImage {
width: height width: height
...@@ -133,12 +139,14 @@ Item { ...@@ -133,12 +139,14 @@ Item {
source: "qrc:/airmap/expand.svg" source: "qrc:/airmap/expand.svg"
color: _textColor color: _textColor
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
visible: QGroundControl.airspaceManager.connected
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
enabled: QGroundControl.airspaceManager.connected
onClicked: { onClicked: {
QGroundControl.airspaceManager.airspaceVisible = true QGroundControl.airspaceManager.airspaceVisible = true
} }
......
...@@ -63,6 +63,8 @@ public: ...@@ -63,6 +63,8 @@ public:
Q_PROPERTY(AirspaceRulesetsProvider* ruleSets READ ruleSets CONSTANT) Q_PROPERTY(AirspaceRulesetsProvider* ruleSets READ ruleSets CONSTANT)
Q_PROPERTY(AirspaceRestrictionProvider* airspaces READ airspaces CONSTANT) Q_PROPERTY(AirspaceRestrictionProvider* airspaces READ airspaces CONSTANT)
Q_PROPERTY(AirspaceFlightPlanProvider* flightPlan READ flightPlan CONSTANT) Q_PROPERTY(AirspaceFlightPlanProvider* flightPlan READ flightPlan CONSTANT)
Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
Q_PROPERTY(QString connectStatus READ connectStatus NOTIFY connectStatusChanged)
Q_PROPERTY(bool airspaceVisible READ airspaceVisible WRITE setAirspaceVisible NOTIFY airspaceVisibleChanged) Q_PROPERTY(bool airspaceVisible READ airspaceVisible WRITE setAirspaceVisible NOTIFY airspaceVisibleChanged)
Q_INVOKABLE void setROI (const QGeoCoordinate& pointNW, const QGeoCoordinate& pointSE, bool planView); Q_INVOKABLE void setROI (const QGeoCoordinate& pointNW, const QGeoCoordinate& pointSE, bool planView);
...@@ -79,6 +81,8 @@ public: ...@@ -79,6 +81,8 @@ public:
virtual bool airspaceVisible () { return _airspaceVisible; } virtual bool airspaceVisible () { return _airspaceVisible; }
virtual void setAirspaceVisible (bool set) { _airspaceVisible = set; emit airspaceVisibleChanged(); } virtual void setAirspaceVisible (bool set) { _airspaceVisible = set; emit airspaceVisibleChanged(); }
virtual bool connected () const = 0;
virtual QString connectStatus () const { return QString(); }
/** /**
* Factory method to create an AirspaceVehicleManager object * Factory method to create an AirspaceVehicleManager object
...@@ -87,6 +91,8 @@ public: ...@@ -87,6 +91,8 @@ public:
signals: signals:
void airspaceVisibleChanged (); void airspaceVisibleChanged ();
void connectedChanged ();
void connectStatusChanged ();
protected: protected:
/** /**
......
...@@ -51,7 +51,7 @@ FlightMap { ...@@ -51,7 +51,7 @@ FlightMap {
property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
property var _activeVehicleCoordinate: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate() property var _activeVehicleCoordinate: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate()
property real _toolButtonTopMargin: parent.height - ScreenTools.availableHeight + (ScreenTools.defaultFontPixelHeight / 2) property real _toolButtonTopMargin: parent.height - ScreenTools.availableHeight + (ScreenTools.defaultFontPixelHeight / 2)
property bool _airspaceEnabled: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false property bool _airspaceEnabled: QGroundControl.airmapSupported ? (QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue && QGroundControl.airspaceManager.connected): false
property bool _disableVehicleTracking: false property bool _disableVehicleTracking: false
property bool _keepVehicleCentered: _mainIsMap ? false : true property bool _keepVehicleCentered: _mainIsMap ? false : true
...@@ -87,6 +87,10 @@ FlightMap { ...@@ -87,6 +87,10 @@ FlightMap {
} }
} }
on_AirspaceEnabledChanged: {
updateAirspace()
}
function pointInRect(point, rect) { function pointInRect(point, rect) {
return point.x > rect.x && return point.x > rect.x &&
point.x < rect.x + rect.width && point.x < rect.x + rect.width &&
......
Subproject commit d7854b7bcf1610bb42d89f4bae553744cbe4408c Subproject commit e84bb0a7a702320fedade6c83bbdf2324e3be8fb
...@@ -47,7 +47,7 @@ QGCView { ...@@ -47,7 +47,7 @@ QGCView {
readonly property var _defaultVehicleCoordinate: QtPositioning.coordinate(37.803784, -122.462276) readonly property var _defaultVehicleCoordinate: QtPositioning.coordinate(37.803784, -122.462276)
readonly property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly readonly property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly
property bool _airspaceEnabled: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false property bool _airspaceEnabled: QGroundControl.airmapSupported ? (QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue && QGroundControl.airspaceManager.connected): false
property var _planMasterController: masterController property var _planMasterController: masterController
property var _missionController: _planMasterController.missionController property var _missionController: _planMasterController.missionController
property var _geoFenceController: _planMasterController.geoFenceController property var _geoFenceController: _planMasterController.geoFenceController
...@@ -115,6 +115,7 @@ QGCView { ...@@ -115,6 +115,7 @@ QGCView {
if(QGroundControl.airmapSupported) { if(QGroundControl.airmapSupported) {
if(_airspaceEnabled) { if(_airspaceEnabled) {
planControlColapsed = QGroundControl.airspaceManager.airspaceVisible planControlColapsed = QGroundControl.airspaceManager.airspaceVisible
updateAirspace()
} else { } else {
planControlColapsed = false planControlColapsed = false
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment