mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-04 16:56:53 +08:00
Ref T129, use new functions in matcher / airspace monitor
* if ICAO codes are unique, directly use those * if already using a DB object, no need to search further
This commit is contained in:
committed by
Mathew Sutcliffe
parent
2dfb6770da
commit
193565e27c
@@ -51,24 +51,39 @@ namespace BlackCore
|
||||
const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao,
|
||||
bool airlineFromCallsign, bool useWebServices, CStatusMessageList *log)
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Find airline designator from 1st: '%1' 2nd: '%2', callsign airline: %3 web service: %4").arg(primaryIcao, secondaryIcao, boolToYesNo(airlineFromCallsign), boolToYesNo(useWebServices)), getLogCategories());
|
||||
if (CAircraftMatcher::isValidAirlineIcaoDesignator(primaryIcao, useWebServices)) { return CAirlineIcaoCode(primaryIcao); }
|
||||
if (CAircraftMatcher::isValidAirlineIcaoDesignator(secondaryIcao, useWebServices))
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign,
|
||||
QString("Find airline designator from 1st: '%1' 2nd: '%2' callsign: '%3', use airline callsign: %4, use web service: %5").
|
||||
arg(primaryIcao, secondaryIcao, callsign.getAirlineSuffix(), boolToYesNo(airlineFromCallsign), boolToYesNo(useWebServices)), getLogCategories());
|
||||
CAirlineIcaoCode code;
|
||||
do
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Using secondary airline ICAO '%1', primary '%2' not valid").arg(secondaryIcao, primaryIcao), getLogCategories());
|
||||
return CAirlineIcaoCode(secondaryIcao);
|
||||
}
|
||||
if (airlineFromCallsign)
|
||||
{
|
||||
const QString airlineSuffix = callsign.getAirlineSuffix();
|
||||
if (CAircraftMatcher::isValidAirlineIcaoDesignator(airlineSuffix, useWebServices))
|
||||
if (CAircraftMatcher::isValidAirlineIcaoDesignator(primaryIcao, useWebServices))
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Using airline from callsign '%1', suffix: '%2'").arg(callsign.toQString(), airlineSuffix), getLogCategories());
|
||||
return CAirlineIcaoCode(airlineSuffix);
|
||||
code = stringToAirlineIcaoObject(primaryIcao, useWebServices);
|
||||
break;
|
||||
}
|
||||
if (CAircraftMatcher::isValidAirlineIcaoDesignator(secondaryIcao, useWebServices))
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Using secondary airline ICAO '%1', primary '%2' not valid").arg(secondaryIcao, primaryIcao), getLogCategories());
|
||||
code = stringToAirlineIcaoObject(secondaryIcao, useWebServices);
|
||||
break;
|
||||
}
|
||||
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Two invalid airline ICAO codes '%1', '%2'").arg(primaryIcao, secondaryIcao), getLogCategories());
|
||||
if (airlineFromCallsign)
|
||||
{
|
||||
const QString airlineSuffix = callsign.getAirlineSuffix();
|
||||
if (CAircraftMatcher::isValidAirlineIcaoDesignator(airlineSuffix, useWebServices))
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Using airline from callsign '%1', suffix: '%2'").arg(callsign.toQString(), airlineSuffix), getLogCategories());
|
||||
code = stringToAirlineIcaoObject(airlineSuffix, useWebServices);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Two invalid airline ICAO codes '%1', '%2'").arg(primaryIcao, secondaryIcao), getLogCategories());
|
||||
return CAirlineIcaoCode();
|
||||
while (false);
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Resolved to airline designator: %1").arg(code.toQString(true)));
|
||||
return code;
|
||||
}
|
||||
|
||||
CAircraftModel CAircraftMatcher::getClosestMatch(const CSimulatedAircraft &remoteAircraft, CStatusMessageList *log) const
|
||||
@@ -318,7 +333,7 @@ namespace BlackCore
|
||||
else if (foundIcaos.size() == 1)
|
||||
{
|
||||
const CAircraftIcaoCode icao(foundIcaos.front());
|
||||
CMatchingUtils::addLogDetailsToList(log, logCallsign, QString("Reverse lookup of aircraft ICAO '%1'', found one manufacturer '%2'").arg(designator, icao.getDesignatorManufacturer()), CAircraftMatcher::getLogCategories());
|
||||
CMatchingUtils::addLogDetailsToList(log, logCallsign, QString("Reverse lookup of aircraft ICAO '%1'', found one manufacturer '%2' in DB").arg(designator, icao.getDesignatorManufacturer()), CAircraftMatcher::getLogCategories());
|
||||
return icao;
|
||||
}
|
||||
else
|
||||
@@ -347,8 +362,8 @@ namespace BlackCore
|
||||
const CAirlineIcaoCode icao = sApp->getWebDataServices()->smartAirlineIcaoSelector(icaoPattern, callsign);
|
||||
if (log)
|
||||
{
|
||||
if (icao.hasValidDbKey()) { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Reverse lookup of airline ICAO '%1' and callsign '%2' found '%3' '%4'").arg(icaoPattern.getDesignator(), callsign.asString(), icao.getVDesignatorDbKey(), icao.getName()), CAircraftMatcher::getLogCategories()); }
|
||||
else { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Reverse lookup of airline ICAO '%1' and callsign '%2', nothing found").arg(icaoPattern.getDesignator(), callsign.asString()), CAircraftMatcher::getLogCategories()); }
|
||||
if (icao.hasValidDbKey()) { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Reverse lookup of airline ICAO '%1' and callsign '%2' found '%3' '%4' in DB").arg(icaoPattern.getDesignator(), callsign.asString(), icao.getVDesignatorDbKey(), icao.getName()), CAircraftMatcher::getLogCategories()); }
|
||||
else { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Reverse lookup of airline ICAO '%1' and callsign '%2', nothing found in DB").arg(icaoPattern.getDesignator(), callsign.asString()), CAircraftMatcher::getLogCategories()); }
|
||||
}
|
||||
return icao;
|
||||
}
|
||||
@@ -368,7 +383,7 @@ namespace BlackCore
|
||||
if (log)
|
||||
{
|
||||
if (livery.hasValidDbKey()) { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Reverse lookup of standard livery for '%1' found '%2'").arg(airline.getDesignator(), livery.getCombinedCode()), CAircraftMatcher::getLogCategories()); }
|
||||
else { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Not standard livery for airline '%1'").arg(airline.getDesignator()), CAircraftMatcher::getLogCategories()); }
|
||||
else { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Not standard livery for airline '%1' in DB").arg(airline.getDesignator()), CAircraftMatcher::getLogCategories()); }
|
||||
}
|
||||
return livery;
|
||||
}
|
||||
@@ -381,11 +396,11 @@ namespace BlackCore
|
||||
const QStringList names = sApp->getWebDataServices()->getAirlineNames();
|
||||
if (names.contains(candidate, Qt::CaseInsensitive))
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Airline name '%1' found").arg(candidate));
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Airline name '%1' found in DB").arg(candidate));
|
||||
return candidate;
|
||||
}
|
||||
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Airline name '%1' not found").arg(candidate));
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Airline name '%1' not found in DB").arg(candidate));
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -1010,6 +1025,14 @@ namespace BlackCore
|
||||
return str;
|
||||
}
|
||||
|
||||
CAirlineIcaoCode CAircraftMatcher::stringToAirlineIcaoObject(const QString &designator, bool useSwiftDbData)
|
||||
{
|
||||
if (!useSwiftDbData) { return CAirlineIcaoCode(designator); }
|
||||
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAirlineIcaoCode(designator); }
|
||||
CAirlineIcaoCode code = sApp->getWebDataServices()->getAirlineIcaoCodeForUniqueDesignatorOrDefault(designator, true);
|
||||
return code.isLoadedFromDb() ? code : CAirlineIcaoCode(designator);
|
||||
}
|
||||
|
||||
bool CAircraftMatcher::isValidAirlineIcaoDesignator(const QString &designator, bool checkAgainstSwiftDb)
|
||||
{
|
||||
if (!CAirlineIcaoCode::isValidAirlineDesignator(designator)) { return false; }
|
||||
|
||||
@@ -209,6 +209,10 @@ namespace BlackCore
|
||||
//! \threadsafe
|
||||
static QString scoresToString(const BlackMisc::Simulation::ScoredModels &scores, int lastElements = 5);
|
||||
|
||||
//! Designator to object
|
||||
//! \threadsafe
|
||||
static BlackMisc::Aviation::CAirlineIcaoCode stringToAirlineIcaoObject(const QString &designator, bool useSwiftDbData);
|
||||
|
||||
//! Valid designator, allows to check against swift DB
|
||||
//! \threadsafe
|
||||
static bool isValidAirlineIcaoDesignator(const QString &designator, bool checkAgainstSwiftDb);
|
||||
|
||||
@@ -926,26 +926,43 @@ namespace BlackCore
|
||||
CAircraftModel::ModelType type, CStatusMessageList *log)
|
||||
{
|
||||
const CFlightPlanRemarks fpRemarks = this->tryToGetFlightPlanRemarks(callsign);
|
||||
CAirlineIcaoCode airlineIcao = CAircraftMatcher::failoverValidAirlineIcaoDesignator(callsign, airlineIcaoString, fpRemarks.getAirlineIcao(), true, true, log);
|
||||
if (fpRemarks.isEmpty())
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("No flight plan remarks"));
|
||||
}
|
||||
else
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("FP remarks: '%1'").arg(fpRemarks.getRemarks()));
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("FP rem.parsed: '%1'").arg(fpRemarks.toQString(true)));
|
||||
}
|
||||
|
||||
CAircraftIcaoCode aircraftIcao(aircraftIcaoString);
|
||||
if (fpRemarks.hasParsedAirlineRemarks())
|
||||
CAirlineIcaoCode airlineIcao = CAircraftMatcher::failoverValidAirlineIcaoDesignator(callsign, airlineIcaoString, fpRemarks.getAirlineIcao().getDesignator(), true, true, log);
|
||||
if (!airlineIcao.isLoadedFromDb() && fpRemarks.hasParsedAirlineRemarks())
|
||||
{
|
||||
const QString airlineName = CAircraftMatcher::reverseLookupAirlineName(fpRemarks.getFlightOperator(), callsign, log);
|
||||
if (!airlineName.isEmpty())
|
||||
{
|
||||
airlineIcao.setName(airlineName);
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Setting airline name '%1'").arg(airlineName), getLogCategories());
|
||||
const QString resolvedAirlineName = CAircraftMatcher::reverseLookupAirlineName(airlineName);
|
||||
airlineIcao.setName(resolvedAirlineName);
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Setting resolved airline name '%1' from '%2'").arg(resolvedAirlineName, airlineName), getLogCategories());
|
||||
}
|
||||
|
||||
const QString telephony = CAircraftMatcher::reverseLookupTelephonyDesignator(fpRemarks.getRadioTelephony(), callsign, log);
|
||||
if (!telephony.isEmpty())
|
||||
{
|
||||
airlineIcao.setTelephonyDesignator(telephony);
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Setting telephoy designator '%1'").arg(telephony), getLogCategories());
|
||||
const QString resolvedTelephony = CAircraftMatcher::reverseLookupTelephonyDesignator(telephony);
|
||||
airlineIcao.setTelephonyDesignator(resolvedTelephony);
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QString("Setting resolved telephoy designator '%1' from '%2'").arg(resolvedTelephony, telephony), getLogCategories());
|
||||
}
|
||||
}
|
||||
|
||||
if (!airlineIcao.isLoadedFromDb())
|
||||
{
|
||||
// already try to resolve at this stage by a smart lookup with all the filled data from above
|
||||
airlineIcao = CAircraftMatcher::reverseLookupAirlineIcao(airlineIcao, callsign, log);
|
||||
}
|
||||
|
||||
const CAircraftIcaoCode aircraftIcao(aircraftIcaoString);
|
||||
return CAircraftMatcher::reverseLookupModel(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user