From 510666622c4b43cecb1f999a2af3d6f4e0af1e3c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 4 Oct 2017 01:16:55 +0200 Subject: [PATCH] Renamed to failoverValidAirlineIcaoDesignator and check airline ICAO designator against swift DB --- src/blackcore/aircraftmatcher.cpp | 19 +++++++++++++++---- src/blackcore/aircraftmatcher.h | 9 +++++++-- src/blackcore/airspacemonitor.cpp | 8 +++++--- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index d6da94cf0..a382f8c93 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -47,10 +47,13 @@ namespace BlackCore CAircraftMatcher::~CAircraftMatcher() { } - CAirlineIcaoCode CAircraftMatcher::failoverValidAirlineIcao(const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, bool airlineFromCallsign, CStatusMessageList *log) + CAirlineIcaoCode CAircraftMatcher::failoverValidAirlineIcaoDesignator( + const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, + bool airlineFromCallsign, bool useWebServices, CStatusMessageList *log) { - if (CAirlineIcaoCode::isValidAirlineDesignator(primaryIcao)) { return CAirlineIcaoCode(primaryIcao); } - if (CAirlineIcaoCode::isValidAirlineDesignator(secondaryIcao)) + 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("Using secondary airline ICAO '%1', primary '%2' not valid").arg(secondaryIcao, primaryIcao), getLogCategories()); return CAirlineIcaoCode(secondaryIcao); @@ -58,7 +61,7 @@ namespace BlackCore if (airlineFromCallsign) { const QString airlineSuffix = callsign.getAirlineSuffix(); - if (CAirlineIcaoCode::isValidAirlineDesignator(airlineSuffix)) + if (CAircraftMatcher::isValidAirlineIcaoDesignator(airlineSuffix, useWebServices)) { CMatchingUtils::addLogDetailsToList(log, callsign, QString("Using airline from callsign '%1', suffix: '%2'").arg(callsign.toQString(), airlineSuffix), getLogCategories()); return CAirlineIcaoCode(airlineSuffix); @@ -1006,4 +1009,12 @@ namespace BlackCore } return str; } + + bool CAircraftMatcher::isValidAirlineIcaoDesignator(const QString &designator, bool checkAgainstSwiftDb) + { + if (!CAirlineIcaoCode::isValidAirlineDesignator(designator)) { return false; } + if (!checkAgainstSwiftDb) { return true; } + if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return true; } + return (sApp->getWebDataServices()->containsAirlineIcaoDesignator(designator)); + } } // namespace diff --git a/src/blackcore/aircraftmatcher.h b/src/blackcore/aircraftmatcher.h index 8e2076764..f3a746280 100644 --- a/src/blackcore/aircraftmatcher.h +++ b/src/blackcore/aircraftmatcher.h @@ -75,10 +75,10 @@ namespace BlackCore //! Return the airline ICAO being valid //! \threadsafe - static BlackMisc::Aviation::CAirlineIcaoCode failoverValidAirlineIcao( + static BlackMisc::Aviation::CAirlineIcaoCode failoverValidAirlineIcaoDesignator( const BlackMisc::Aviation::CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, - bool airlineFromCallsign, BlackMisc::CStatusMessageList *log = nullptr); + bool airlineFromCallsign, bool useWebServices, BlackMisc::CStatusMessageList *log = nullptr); //! Try to find the corresponding data in DB and get best information for given data //! \threadsafe @@ -206,8 +206,13 @@ namespace BlackCore static BlackMisc::Simulation::CAircraftModelList ifPossibleReduceByMilitaryFlag(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, const BlackMisc::Simulation::CAircraftModelList &inList, bool &reduced, BlackMisc::CStatusMessageList *log); //! Scores to string for debugging + //! \threadsafe static QString scoresToString(const BlackMisc::Simulation::ScoredModels &scores, int lastElements = 5); + //! Valid designator, allows to check against swift DB + //! \threadsafe + static bool isValidAirlineIcaoDesignator(const QString &designator, bool checkAgainstSwiftDb); + MatchingMode m_matchingMode = All; BlackMisc::Simulation::CAircraftModel m_defaultModel; //!< model to be used as default model BlackMisc::Simulation::CAircraftModelList m_modelSet; //!< models used for model matching diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index bb0f0921f..c6de0d167 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -926,7 +926,8 @@ namespace BlackCore CAircraftModel::ModelType type, CStatusMessageList *log) { const CFlightPlanRemarks fpRemarks = this->tryToGetFlightPlanRemarks(callsign); - CAirlineIcaoCode airlineIcao = CAircraftMatcher::failoverValidAirlineIcao(callsign, airlineIcaoString, fpRemarks.getAirlineIcao(), true, log); + CAirlineIcaoCode airlineIcao = CAircraftMatcher::failoverValidAirlineIcaoDesignator(callsign, airlineIcaoString, fpRemarks.getAirlineIcao(), true, true, log); + CAircraftIcaoCode aircraftIcao(aircraftIcaoString); if (fpRemarks.hasParsedAirlineRemarks()) { @@ -934,16 +935,17 @@ namespace BlackCore if (!airlineName.isEmpty()) { airlineIcao.setName(airlineName); - this->addReverseLookupMessage(callsign, QString("Setting airline name '%1'").arg(airlineName)); + CMatchingUtils::addLogDetailsToList(log, callsign, QString("Setting airline name '%1'").arg(airlineName), getLogCategories()); } const QString telephony = CAircraftMatcher::reverseLookupTelephonyDesignator(fpRemarks.getRadioTelephony(), callsign, log); if (!telephony.isEmpty()) { airlineIcao.setTelephonyDesignator(telephony); - this->addReverseLookupMessage(callsign, QString("Setting telephoy designator '%1'").arg(telephony)); + CMatchingUtils::addLogDetailsToList(log, callsign, QString("Setting telephoy designator '%1'").arg(telephony), getLogCategories()); } } + return CAircraftMatcher::reverseLookupModel(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); }