Browse Source

If briefing evaluation returns no authorization, assume none is required. This is reflected in the UI as "Authorization Not Required".

QGC4.4
Gus Grubba 7 years ago
parent
commit
e25f7af63b
  1. 75
      src/Airmap/AirMapFlightPlanManager.cc
  2. 6
      src/Airmap/FlightBrief.qml
  3. 1
      src/AirspaceManagement/AirspaceFlightPlanProvider.h
  4. 4
      src/FlightDisplay/FlightDisplayView.qml

75
src/Airmap/AirMapFlightPlanManager.cc

@ -754,46 +754,47 @@ AirMapFlightPlanManager::_pollBriefing() @@ -754,46 +754,47 @@ AirMapFlightPlanManager::_pollBriefing()
qCDebug(AirMapManagerLog) << "Adding briefing ruleset" << pRuleSet->id();
}
//-- Evaluate briefing status
bool rejected = false;
bool accepted = false;
bool pending = false;
for (const auto& authorization : briefing.evaluation.authorizations) {
AirMapFlightAuthorization* pAuth = new AirMapFlightAuthorization(authorization, this);
_authorizations.append(pAuth);
qCDebug(AirMapManagerLog) << "Autorization:" << pAuth->name() << " (" << pAuth->message() << ")" << static_cast<int>(pAuth->status());
switch (authorization.status) {
case Evaluation::Authorization::Status::accepted:
case Evaluation::Authorization::Status::accepted_upon_submission:
accepted = true;
break;
case Evaluation::Authorization::Status::rejected:
case Evaluation::Authorization::Status::rejected_upon_submission:
rejected = true;
break;
case Evaluation::Authorization::Status::pending:
pending = true;
break;
}
}
if (briefing.evaluation.authorizations.size() == 0) {
// If we don't get any authorizations, we assume it's accepted
accepted = true;
}
emit advisoryChanged();
emit rulesChanged();
qCDebug(AirMapManagerLog) << "Flight approval: accepted=" << accepted << "rejected" << rejected << "pending" << pending;
_state = State::Idle;
if ((rejected || accepted) && !pending) {
if (rejected) { // rejected has priority
_flightPermitStatus = AirspaceFlightPlanProvider::PermitRejected;
} else {
_flightPermitStatus = AirspaceFlightPlanProvider::PermitAccepted;
}
_flightPermitStatus = AirspaceFlightPlanProvider::PermitNotRequired;
emit flightPermitStatusChanged();
} else {
//-- Pending. Try again.
_pollTimer.setSingleShot(true);
_pollTimer.start(1000);
bool rejected = false;
bool accepted = false;
bool pending = false;
for (const auto& authorization : briefing.evaluation.authorizations) {
AirMapFlightAuthorization* pAuth = new AirMapFlightAuthorization(authorization, this);
_authorizations.append(pAuth);
qCDebug(AirMapManagerLog) << "Autorization:" << pAuth->name() << " (" << pAuth->message() << ")" << static_cast<int>(pAuth->status());
switch (authorization.status) {
case Evaluation::Authorization::Status::accepted:
case Evaluation::Authorization::Status::accepted_upon_submission:
accepted = true;
break;
case Evaluation::Authorization::Status::rejected:
case Evaluation::Authorization::Status::rejected_upon_submission:
rejected = true;
break;
case Evaluation::Authorization::Status::pending:
pending = true;
break;
}
}
emit advisoryChanged();
emit rulesChanged();
qCDebug(AirMapManagerLog) << "Flight approval: accepted=" << accepted << "rejected" << rejected << "pending" << pending;
_state = State::Idle;
if ((rejected || accepted) && !pending) {
if (rejected) { // rejected has priority
_flightPermitStatus = AirspaceFlightPlanProvider::PermitRejected;
} else {
_flightPermitStatus = AirspaceFlightPlanProvider::PermitAccepted;
}
emit flightPermitStatusChanged();
} else {
//-- Pending. Try again.
_pollTimer.setSingleShot(true);
_pollTimer.start(1000);
}
}
} else {
_state = State::Idle;

6
src/Airmap/FlightBrief.qml

@ -113,7 +113,7 @@ Item { @@ -113,7 +113,7 @@ Item {
color: {
if(_flightPermit === AirspaceFlightPlanProvider.PermitPending)
return _colorOrange
if(_flightPermit === AirspaceFlightPlanProvider.PermitAccepted)
if(_flightPermit === AirspaceFlightPlanProvider.PermitAccepted || _flightPermit === AirspaceFlightPlanProvider.PermitNotRequired)
return _colorGreen
if(_flightPermit === AirspaceFlightPlanProvider.PermitRejected)
return _colorRed
@ -129,6 +129,8 @@ Item { @@ -129,6 +129,8 @@ Item {
return qsTr("Authorization Accepted")
if(_flightPermit === AirspaceFlightPlanProvider.PermitRejected)
return qsTr("Authorization Rejected")
if(_flightPermit === AirspaceFlightPlanProvider.PermitNotRequired)
return qsTr("Authorization Not Required")
return qsTr("Authorization Unknown")
}
anchors.centerIn: parent
@ -209,7 +211,7 @@ Item { @@ -209,7 +211,7 @@ Item {
backRadius: 4
heightFactor: 0.3333
showBorder: true
enabled: _flightPermit === AirspaceFlightPlanProvider.PermitAccepted
enabled: _flightPermit === AirspaceFlightPlanProvider.PermitAccepted || _flightPermit === AirspaceFlightPlanProvider.PermitNotRequired
width: ScreenTools.defaultFontPixelWidth * 12
visible: planView
onClicked: {

1
src/AirspaceManagement/AirspaceFlightPlanProvider.h

@ -135,6 +135,7 @@ public: @@ -135,6 +135,7 @@ public:
PermitPending,
PermitAccepted,
PermitRejected,
PermitNotRequired,
};
Q_ENUM(PermitStatus)

4
src/FlightDisplay/FlightDisplayView.qml

@ -689,7 +689,7 @@ QGCView { @@ -689,7 +689,7 @@ QGCView {
if(airspaceIndicator.flightPermit) {
if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitPending)
return qsTr("Approval Pending")
if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitAccepted)
if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitAccepted || airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitNotRequired)
return qsTr("Flight Approved")
if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitRejected)
return qsTr("Flight Rejected")
@ -700,7 +700,7 @@ QGCView { @@ -700,7 +700,7 @@ QGCView {
if(airspaceIndicator.flightPermit) {
if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitPending)
return qgcPal.colorOrange
if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitAccepted)
if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitAccepted || airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitNotRequired)
return qgcPal.colorGreen
}
return qgcPal.colorRed

Loading…
Cancel
Save