From a4dc89a295e26d17af4983cd094766adb274f3f5 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 6 Mar 2019 03:23:14 +0100 Subject: [PATCH] Ref T562, fix 2-letter aircraft ICAO codes * added constexpr for aircraft ICAO min/max length * use ICAO designator in FP if there is no "getCombinedPrefixIcaoSuffix" --- src/blackcore/vatsim/networkvatlib.cpp | 5 ++++- src/blackmisc/aviation/aircrafticaocode.cpp | 2 +- src/blackmisc/aviation/aircrafticaocode.h | 3 +++ src/blackmisc/aviation/aircrafticaocodelist.cpp | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/blackcore/vatsim/networkvatlib.cpp b/src/blackcore/vatsim/networkvatlib.cpp index 1776acb92..5981e085d 100644 --- a/src/blackcore/vatsim/networkvatlib.cpp +++ b/src/blackcore/vatsim/networkvatlib.cpp @@ -660,8 +660,11 @@ namespace BlackCore //! \fixme that would be the official string, can this be used? // const QString alt = flightPlan.getCruiseAltitude().asFpAltitudeString(); + QString act = flightPlan.getCombinedPrefixIcaoSuffix(); + if (act.isEmpty()) { act = flightPlan.getAircraftIcao().getDesignator(); } // fallback + QByteArray acTypeTemp, altAptTemp, cruiseAltTemp, depAptTemp, destAptTemp, routeTemp, remarksTemp; - vatlibFP.aircraftType = acTypeTemp = toFSDnoColon(flightPlan.getCombinedPrefixIcaoSuffix()); + vatlibFP.aircraftType = acTypeTemp = toFSDnoColon(act); vatlibFP.alternateAirport = altAptTemp = toFSDnoColon(flightPlan.getAlternateAirportIcao().asString()); vatlibFP.cruiseAltitude = cruiseAltTemp = toFSDnoColon(alt); vatlibFP.departAirport = depAptTemp = toFSDnoColon(flightPlan.getOriginAirportIcao().asString()); diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index 49b39467a..f8c8bc299 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -672,7 +672,7 @@ namespace BlackMisc bool CAircraftIcaoCode::isValidDesignator(const QString &designator) { - if (designator.length() < 2 || designator.length() > 5) { return false; } + if (designator.length() < DesignatorMinLength || designator.length() > DesignatorMaxLength) { return false; } if (!designator[0].isUpper()) { return false; } return !containsChar(designator, [](QChar c) { return !c.isUpper() && !c.isDigit(); }); } diff --git a/src/blackmisc/aviation/aircrafticaocode.h b/src/blackmisc/aviation/aircrafticaocode.h index 1aa4a6977..a36a4d0ec 100644 --- a/src/blackmisc/aviation/aircrafticaocode.h +++ b/src/blackmisc/aviation/aircrafticaocode.h @@ -345,6 +345,9 @@ namespace BlackMisc //! From our database JSON format static CAircraftIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString()); + static constexpr int DesignatorMinLength = 2; //!< designator length (min) + static constexpr int DesignatorMaxLength = 5; //!< designator length (max) + private: QString m_designator; //!< "B737" QString m_iataCode; //!< "320" diff --git a/src/blackmisc/aviation/aircrafticaocodelist.cpp b/src/blackmisc/aviation/aircrafticaocodelist.cpp index ad79e4bc9..2ac762b83 100644 --- a/src/blackmisc/aviation/aircrafticaocodelist.cpp +++ b/src/blackmisc/aviation/aircrafticaocodelist.cpp @@ -28,7 +28,7 @@ namespace BlackMisc CAircraftIcaoCodeList CAircraftIcaoCodeList::findByDesignator(const QString &designator, int fuzzySearch) const { if (!fuzzySearch && !CAircraftIcaoCode::isValidDesignator(designator)) { return CAircraftIcaoCodeList(); } - if (fuzzySearch && designator.length() < 3) { return CAircraftIcaoCodeList(); } + if (fuzzySearch && designator.length() < CAircraftIcaoCode::DesignatorMinLength) { return CAircraftIcaoCodeList(); } return this->findBy([&](const CAircraftIcaoCode & code) { return code.matchesDesignator(designator, fuzzySearch); @@ -37,7 +37,7 @@ namespace BlackMisc CAircraftIcaoCode CAircraftIcaoCodeList::findBestFuzzyMatchOrDefault(const QString &designator, int cutoff) const { - if (designator.length() < 3) { return CAircraftIcaoCode(); } + if (designator.length() < CAircraftIcaoCode::DesignatorMinLength) { return CAircraftIcaoCode(); } int best = 0; int current = 0; CAircraftIcaoCode found;