From 3c9d4546385fd6e9a441ee3cae0ebbddec76976c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 3 Oct 2017 19:13:46 +0200 Subject: [PATCH] Ref T129, return CFlightPlanRemarks from CAirspaceMonitor::tryToGetFlightPlanRemarks, not only string Uses utility function in CAircraftMatcher --- src/blackcore/aircraftmatcher.cpp | 21 +++++++++++++ src/blackcore/aircraftmatcher.h | 11 ++++++- src/blackcore/airspacemonitor.cpp | 49 +++++++++++++++++-------------- src/blackcore/airspacemonitor.h | 8 ++--- 4 files changed, 62 insertions(+), 27 deletions(-) diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index f32874b88..d794d0bfd 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -47,6 +47,27 @@ namespace BlackCore CAircraftMatcher::~CAircraftMatcher() { } + CAirlineIcaoCode CAircraftMatcher::failoverValidAirlineIcao(const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, bool airlineFromCallsign, CStatusMessageList *log) + { + if (CAirlineIcaoCode::isValidAirlineDesignator(primaryIcao)) { return CAirlineIcaoCode(primaryIcao); } + if (CAirlineIcaoCode::isValidAirlineDesignator(secondaryIcao)) + { + 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 (CAirlineIcaoCode::isValidAirlineDesignator(airlineSuffix)) + { + CMatchingUtils::addLogDetailsToList(log, callsign, QString("Using airline from callsign '%1', suffix: '%2'").arg(callsign.toQString(), airlineSuffix), getLogCategories()); + return CAirlineIcaoCode(airlineSuffix); + } + } + CMatchingUtils::addLogDetailsToList(log, callsign, QString("Two invalid airline ICAO codes '%1', '%2'").arg(primaryIcao, secondaryIcao), getLogCategories()); + return CAirlineIcaoCode(); + } + CAircraftModel CAircraftMatcher::getClosestMatch(const CSimulatedAircraft &remoteAircraft, CStatusMessageList *log) const { const CAircraftModelList modelSet(m_modelSet); // Models for this matching diff --git a/src/blackcore/aircraftmatcher.h b/src/blackcore/aircraftmatcher.h index 5e1c4f397..b30fb89dc 100644 --- a/src/blackcore/aircraftmatcher.h +++ b/src/blackcore/aircraftmatcher.h @@ -69,7 +69,16 @@ namespace BlackCore //! Result depends on enabled modes. //! \sa MatchingModeFlag //! \threadsafe - BlackMisc::Simulation::CAircraftModel getClosestMatch(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, BlackMisc::CStatusMessageList *log = nullptr) const; + BlackMisc::Simulation::CAircraftModel getClosestMatch( + const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, + BlackMisc::CStatusMessageList *log = nullptr) const; + + //! Return the airline ICAO being valid + //! \threadsafe + static BlackMisc::Aviation::CAirlineIcaoCode failoverValidAirlineIcao( + const BlackMisc::Aviation::CCallsign &callsign, + const QString &primaryIcao, const QString &secondaryIcao, + bool airlineFromCallsign, BlackMisc::CStatusMessageList *log = nullptr); //! Try to find the corresponding data in DB and get best information for given data //! \threadsafe diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index c7295cf7f..11a05b059 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -306,12 +306,18 @@ namespace BlackCore return plan; } - QString CAirspaceMonitor::tryToGetFlightPlanRemarks(const CCallsign &callsign) const + CFlightPlanRemarks CAirspaceMonitor::tryToGetFlightPlanRemarks(const CCallsign &callsign) const { - if (callsign.isEmpty()) { return ""; } - if (m_flightPlanCache.contains(callsign)) { return m_flightPlanCache[callsign].getRemarks(); } + if (callsign.isEmpty()) { return CFlightPlanRemarks(); } + + // full flight plan's remarks + if (m_flightPlanCache.contains(callsign)) { return m_flightPlanCache[callsign].getFlightPlanRemarks(); } + + // remarks only if (this->supportsVatsimDataFile()) { return sApp->getWebDataServices()->getVatsimDataFileReader()->getFlightPlanRemarksForCallsign(callsign); } - return ""; + + // unsupported + return CFlightPlanRemarks(); } CUserList CAirspaceMonitor::getUsers() const @@ -915,29 +921,28 @@ namespace BlackCore this->addReverseLookupMessage(callsign, m); } - CAircraftModel CAirspaceMonitor::reverseLookupModelWithFlightplanData(const CCallsign &callsign, const QString &aircraftIcaoString, const QString &airlineIcaoString, const QString &livery, const QString &modelString, CAircraftModel::ModelType type, CStatusMessageList *log) + CAircraftModel CAirspaceMonitor::reverseLookupModelWithFlightplanData( + const CCallsign &callsign, const QString &aircraftIcaoString, + const QString &airlineIcaoString, const QString &livery, const QString &modelString, + CAircraftModel::ModelType type, CStatusMessageList *log) { - const QString fpRemarks = this->tryToGetFlightPlanRemarks(callsign); + const CFlightPlanRemarks fpRemarks = this->tryToGetFlightPlanRemarks(callsign); + CAirlineIcaoCode airlineIcao = CAircraftMatcher::failoverValidAirlineIcao(callsign, airlineIcaoString, fpRemarks.getAirlineIcao(), true, log); CAircraftIcaoCode aircraftIcao(aircraftIcaoString); - CAirlineIcaoCode airlineIcao(airlineIcaoString); - if (!fpRemarks.isEmpty()) + if (fpRemarks.hasParsedAirlineRemarks()) { - const CFlightPlanRemarks ar(fpRemarks); - if (ar.hasParsedAirlineRemarks()) + const QString airlineName = CAircraftMatcher::reverseLookupAirlineName(fpRemarks.getFlightOperator(), callsign, log); + if (!airlineName.isEmpty()) { - const QString airlineName = CAircraftMatcher::reverseLookupAirlineName(ar.getFlightOperator(), callsign, log); - if (!airlineName.isEmpty()) - { - airlineIcao.setName(airlineName); - this->addReverseLookupMessage(callsign, QString("Setting airline name '%1'").arg(airlineName)); - } + airlineIcao.setName(airlineName); + this->addReverseLookupMessage(callsign, QString("Setting airline name '%1'").arg(airlineName)); + } - const QString telephony = CAircraftMatcher::reverseLookupTelephonyDesignator(ar.getRadioTelephony(), callsign, log); - if (!telephony.isEmpty()) - { - airlineIcao.setTelephonyDesignator(telephony); - this->addReverseLookupMessage(callsign, QString("Setting telephoy designator '%1'").arg(telephony)); - } + 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)); } } return CAircraftMatcher::reverselLookupModel(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index 1bc930870..c91575c5c 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -123,9 +123,9 @@ namespace BlackCore BlackMisc::Aviation::CFlightPlan loadFlightPlanFromNetwork(const BlackMisc::Aviation::CCallsign &callsign); //! Try to get flight plan remarks - //! \remarks returns a value only if the flight plan is already cached + //! \remarks returns a value only if the flight plan is already cached or can be obtained from VATSIM reader //! \threadsafe - QString tryToGetFlightPlanRemarks(const BlackMisc::Aviation::CCallsign &callsign) const; + BlackMisc::Aviation::CFlightPlanRemarks tryToGetFlightPlanRemarks(const BlackMisc::Aviation::CCallsign &callsign) const; //! Returns this list of other clients we know about //! \threadsafe @@ -220,7 +220,7 @@ namespace BlackCore void airspaceAircraftSnapshot(const BlackMisc::Simulation::CAirspaceAircraftSnapshot &snapshot); private: - //! Used to temp store FsInn data + //! Used to temporary store FsInn data struct FsInnPacket { //! Default ctor @@ -250,7 +250,7 @@ namespace BlackCore QMap m_flightPlanCache; //!< flight plan information retrieved from network and cached - INetwork *m_network = nullptr; //!< corresponding network interface + INetwork *m_network = nullptr; //!< corresponding network interface CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts