mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-05 17:55:45 +08:00
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"
This commit is contained in:
committed by
Mat Sutcliffe
parent
e31fa91052
commit
a4dc89a295
@@ -660,8 +660,11 @@ namespace BlackCore
|
|||||||
//! \fixme that would be the official string, can this be used?
|
//! \fixme that would be the official string, can this be used?
|
||||||
// const QString alt = flightPlan.getCruiseAltitude().asFpAltitudeString();
|
// 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;
|
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.alternateAirport = altAptTemp = toFSDnoColon(flightPlan.getAlternateAirportIcao().asString());
|
||||||
vatlibFP.cruiseAltitude = cruiseAltTemp = toFSDnoColon(alt);
|
vatlibFP.cruiseAltitude = cruiseAltTemp = toFSDnoColon(alt);
|
||||||
vatlibFP.departAirport = depAptTemp = toFSDnoColon(flightPlan.getOriginAirportIcao().asString());
|
vatlibFP.departAirport = depAptTemp = toFSDnoColon(flightPlan.getOriginAirportIcao().asString());
|
||||||
|
|||||||
@@ -672,7 +672,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
bool CAircraftIcaoCode::isValidDesignator(const QString &designator)
|
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; }
|
if (!designator[0].isUpper()) { return false; }
|
||||||
return !containsChar(designator, [](QChar c) { return !c.isUpper() && !c.isDigit(); });
|
return !containsChar(designator, [](QChar c) { return !c.isUpper() && !c.isDigit(); });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -345,6 +345,9 @@ namespace BlackMisc
|
|||||||
//! From our database JSON format
|
//! From our database JSON format
|
||||||
static CAircraftIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());
|
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:
|
private:
|
||||||
QString m_designator; //!< "B737"
|
QString m_designator; //!< "B737"
|
||||||
QString m_iataCode; //!< "320"
|
QString m_iataCode; //!< "320"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace BlackMisc
|
|||||||
CAircraftIcaoCodeList CAircraftIcaoCodeList::findByDesignator(const QString &designator, int fuzzySearch) const
|
CAircraftIcaoCodeList CAircraftIcaoCodeList::findByDesignator(const QString &designator, int fuzzySearch) const
|
||||||
{
|
{
|
||||||
if (!fuzzySearch && !CAircraftIcaoCode::isValidDesignator(designator)) { return CAircraftIcaoCodeList(); }
|
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 this->findBy([&](const CAircraftIcaoCode & code)
|
||||||
{
|
{
|
||||||
return code.matchesDesignator(designator, fuzzySearch);
|
return code.matchesDesignator(designator, fuzzySearch);
|
||||||
@@ -37,7 +37,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
CAircraftIcaoCode CAircraftIcaoCodeList::findBestFuzzyMatchOrDefault(const QString &designator, int cutoff) const
|
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 best = 0;
|
||||||
int current = 0;
|
int current = 0;
|
||||||
CAircraftIcaoCode found;
|
CAircraftIcaoCode found;
|
||||||
|
|||||||
Reference in New Issue
Block a user