From e389d5ac83c2e51317151f354b287bb01b1281ac Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 7 Jul 2019 16:43:55 +0200 Subject: [PATCH] Ref T701, do NOT use FsInn data if model string iis unknown * this can overrride "swift livery strings" * FsInn only is useful with a known model string --- src/blackcore/aircraftmatcher.cpp | 17 ++++++++++++++++- src/blackcore/aircraftmatcher.h | 3 +++ src/blackcore/airspacemonitor.cpp | 9 ++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index d1406ea38..395f0b255 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -697,9 +697,10 @@ namespace BlackCore return CAircraftModel(); } CAircraftModel model = sApp->getWebDataServices()->getModelForModelString(modelString); + const bool isDBModel = model.hasValidDbKey(); if (log) { - if (model.hasValidDbKey()) + if (isDBModel) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Found model in DB for model string '%1'").arg(model.getModelStringAndDbKey())); } @@ -708,6 +709,10 @@ namespace BlackCore CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Did not find model in DB for model string '%1'").arg(modelString)); } } + + if (!isDBModel) { return CAircraftModel(); } // not found + + // found model.setCallsign(callsign); model.setModelType(CAircraftModel::TypeReverseLookup); return model; @@ -931,6 +936,16 @@ namespace BlackCore return known; } + bool CAircraftMatcher::isKnownModelString(const QString &candidate, const CCallsign &callsign, CStatusMessageList *log) + { + if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return false; } + const bool known = sApp->getWebDataServices()->containsModelString(candidate); + static const QString sKnown("Known modelstring '%1'"); + static const QString sUnknown("Unknown modelstring '%1'"); + CMatchingUtils::addLogDetailsToList(log, callsign, known ? sKnown.arg(candidate) : sUnknown.arg(candidate)); + return known; + } + CAircraftIcaoCode CAircraftMatcher::searchAmongAirlineAircraft(const QString &candidateString, const CAirlineIcaoCode &airline, const CCallsign &callsign, CStatusMessageList *log) { if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftIcaoCode(); } diff --git a/src/blackcore/aircraftmatcher.h b/src/blackcore/aircraftmatcher.h index b76415840..1cec2608f 100644 --- a/src/blackcore/aircraftmatcher.h +++ b/src/blackcore/aircraftmatcher.h @@ -205,6 +205,9 @@ namespace BlackCore const QString &candidate, const BlackMisc::Aviation::CCallsign &callsign = {}, BlackMisc::CStatusMessageList *log = nullptr); + //! Is this aircraft designator known? + //! \threadsafe + static bool isKnownModelString( const QString &candidate, const BlackMisc::Aviation::CCallsign &callsign = {}, BlackMisc::CStatusMessageList *log = nullptr); diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 5bfe8266a..d2d3d6805 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -708,10 +708,17 @@ namespace BlackCore const ReverseLookupLogging reverseLookupEnabled = this->isReverseLookupMessagesEnabled(); CStatusMessageList reverseLookupMessages; CStatusMessageList *pReverseLookupMessages = reverseLookupEnabled.testFlag(RevLogEnabled) ? &reverseLookupMessages : nullptr; + if (!CAircraftMatcher::isKnownModelString(modelString, callsign, pReverseLookupMessages)) + { + // from the T701 test, do NOT use if model string is unknown + // this can overrride "swift livery strings", FsInn here only is useful with a known model string + CMatchingUtils::addLogDetailsToList(pReverseLookupMessages, callsign, + QStringLiteral("FsInn data ignored, as modelstring '%1' is not known").arg(modelString)); + return; + } CMatchingUtils::addLogDetailsToList(pReverseLookupMessages, callsign, QStringLiteral("FsInn data from network: aircraft '%1', airline '%2', model '%3', combined '%4'"). arg(aircraftIcaoDesignator, airlineIcaoDesignator, modelString, combinedAircraftType)); - this->addOrUpdateAircraftInRange(callsign, aircraftIcaoDesignator, airlineIcaoDesignator, "", modelString, CAircraftModel::TypeFSInnData, pReverseLookupMessages); this->addReverseLookupMessages(callsign, reverseLookupMessages); this->sendReadyForModelMatching(callsign); // from FSInn