Commit bc10a8d2 authored by Gus Grubba's avatar Gus Grubba

Connection management

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