From e10ab7b9deb8e6df1e1233cdec295d9dc78f94f7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 26 Jun 2017 01:39:33 +0200 Subject: [PATCH] Ref T26, preparing to use flight plan data * stub utility class (no function yet) * use value objects in matcher signature instead of strings) * removed initNewAircraft, use reverseLookupModelWithFlightplanData --- src/blackcore/aircraftmatcher.cpp | 4 +-- src/blackcore/aircraftmatcher.h | 9 +++--- src/blackcore/airspacemonitor.cpp | 31 +++++++++++--------- src/blackcore/airspacemonitor.h | 11 ++++--- src/blackmisc/aviation/flightplanutils.cpp | 22 ++++++++++++++ src/blackmisc/aviation/flightplanutils.h | 34 ++++++++++++++++++++++ 6 files changed, 85 insertions(+), 26 deletions(-) create mode 100644 src/blackmisc/aviation/flightplanutils.cpp create mode 100644 src/blackmisc/aviation/flightplanutils.h diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index b9dd13957..8139424a6 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -114,11 +114,11 @@ namespace BlackCore return matchedModel; } - CAircraftModel CAircraftMatcher::reverselLookupModel(const CCallsign &callsign, const QString &networkAircraftIcao, const QString &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString, CAircraftModel::ModelType type, CStatusMessageList *log) + CAircraftModel CAircraftMatcher::reverselLookupModel(const CCallsign &callsign, const CAircraftIcaoCode &networkAircraftIcao, const CAirlineIcaoCode &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString, CAircraftModel::ModelType type, CStatusMessageList *log) { CLivery livery; livery.setAirlineIcaoCode(networkAirlineIcao); - CAircraftModel model(networkModelString, type, "", CAircraftIcaoCode(networkAircraftIcao), livery); + CAircraftModel model(networkModelString, type, "", networkAircraftIcao, livery); model.setCallsign(callsign); model = CAircraftMatcher::reverselLookupModel(model, networkLiveryInfo, log); return model; diff --git a/src/blackcore/aircraftmatcher.h b/src/blackcore/aircraftmatcher.h index 2d2f758b1..04d0cc82d 100644 --- a/src/blackcore/aircraftmatcher.h +++ b/src/blackcore/aircraftmatcher.h @@ -73,11 +73,10 @@ namespace BlackCore //! Try to find the corresponding data in DB and get best information for given data //! \threadsafe - static BlackMisc::Simulation::CAircraftModel reverselLookupModel( - const BlackMisc::Aviation::CCallsign &callsign, - const QString &networkAircraftIcao, const QString &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString, - BlackMisc::Simulation::CAircraftModel::ModelType type, - BlackMisc::CStatusMessageList *log = nullptr); + static BlackMisc::Simulation::CAircraftModel reverselLookupModel(const BlackMisc::Aviation::CCallsign &callsign, + const BlackMisc::Aviation::CAircraftIcaoCode &networkAircraftIcao, const BlackMisc::Aviation::CAirlineIcaoCode &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString, + BlackMisc::Simulation::CAircraftModel::ModelType type, + BlackMisc::CStatusMessageList *log = nullptr); //! Try to find the corresponding data in DB and get best information for following matching //! \threadsafe diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 8aa4f9f81..baf686cee 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -22,6 +22,7 @@ #include "blackmisc/aviation/comsystem.h" #include "blackmisc/aviation/modulator.h" #include "blackmisc/aviation/transponder.h" +#include "blackmisc/aviation/flightplanutils.h" #include "blackmisc/geo/elevationplane.h" #include "blackmisc/network/user.h" #include "blackmisc/network/voicecapabilities.h" @@ -914,6 +915,16 @@ namespace BlackCore this->addReverseLookupMessage(callsign, m); } + CAircraftModel CAirspaceMonitor::reverseLookupModelWithFlightplanData(const CCallsign &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery, const QString &modelString, CAircraftModel::ModelType type, CStatusMessageList *log) const + { + const QString fpRemarks = this->tryToGetFlightPlanRemarks(callsign); + if (!fpRemarks.isEmpty()) + { + CFlightPlanUtils::parseFlightPlanRemarks(fpRemarks); + } + return CAircraftMatcher::reverselLookupModel(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); + } + bool CAirspaceMonitor::addNewAircraftInRange(const CSimulatedAircraft &aircraft) { const CCallsign callsign = aircraft.getCallsign(); @@ -1008,10 +1019,11 @@ namespace BlackCore CSimulatedAircraft CAirspaceMonitor::addOrUpdateAircraftInRange(const CCallsign &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery, const QString &modelString, CAircraftModel::ModelType type, CStatusMessageList *log) { - CSimulatedAircraft aircraft = this->getAircraftInRangeForCallsign(callsign); + CAircraftModel model = this->reverseLookupModelWithFlightplanData(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); + const CSimulatedAircraft aircraft = this->getAircraftInRangeForCallsign(callsign); + if (aircraft.hasValidCallsign()) { - CAircraftModel model = CAircraftMatcher::reverselLookupModel(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); model.updateMissingParts(aircraft.getModel()); // Use anonymous as originator here, since the remote aircraft provider is ourselves and the call to updateAircraftModel() would // return without doing anything. @@ -1020,19 +1032,12 @@ namespace BlackCore } else { - aircraft = CAirspaceMonitor::initNewAircraft(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); - this->addNewAircraftInRange(aircraft); + const CSimulatedAircraft initAircraft(model); + this->addNewAircraftInRange(initAircraft); } return aircraft; } - CSimulatedAircraft CAirspaceMonitor::initNewAircraft(const CCallsign &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery, const QString &modelString, CAircraftModel::ModelType type, CStatusMessageList *log) - { - const CAircraftModel model = CAircraftMatcher::reverselLookupModel(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); - const CSimulatedAircraft aircraft(model); - return aircraft; - } - void CAirspaceMonitor::ps_aircraftUpdateReceived(const CAircraftSituation &situation, const CTransponder &transponder) { Q_ASSERT_X(CThreadUtils::isCurrentThreadObjectThread(this), Q_FUNC_INFO, "Called in different thread"); @@ -1058,8 +1063,8 @@ namespace BlackCore this->sendInitialPilotQueries(callsign, true, !hasFsInnPacket); // new client, there is a chance it has been already created by custom packet - const CClient c(callsign); - this->addNewClient(c); + const CClient client(callsign); + this->addNewClient(client); } else { diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index f4df54f6b..a80743ca4 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -360,12 +360,11 @@ namespace BlackCore const BlackMisc::Aviation::CCallsign &callsign, const QString &message, BlackMisc::CStatusMessage::StatusSeverity severity = BlackMisc::CStatusMessage::SeverityInfo); - //! Init a new aircraft - //! \threadsafe - static BlackMisc::Simulation::CSimulatedAircraft initNewAircraft( - const BlackMisc::Aviation::CCallsign &callsign, - const QString &aircraftIcao, const QString &airlineIcao, const QString &livery, - const QString &modelString, BlackMisc::Simulation::CAircraftModel::ModelType type, BlackMisc::CStatusMessageList *log = nullptr); + //! Reverse lookup, if available flight plan data are considered + BlackMisc::Simulation::CAircraftModel reverseLookupModelWithFlightplanData( + const BlackMisc::Aviation::CCallsign &callsign, const QString &aircraftIcao, + const QString &airlineIcao, const QString &livery, const QString &modelString, + BlackMisc::Simulation::CAircraftModel::ModelType type, BlackMisc::CStatusMessageList *log) const; private slots: //! Create aircraft in range, this is the only place where a new aircraft should be added diff --git a/src/blackmisc/aviation/flightplanutils.cpp b/src/blackmisc/aviation/flightplanutils.cpp new file mode 100644 index 000000000..b85ad82f4 --- /dev/null +++ b/src/blackmisc/aviation/flightplanutils.cpp @@ -0,0 +1,22 @@ +/* Copyright (C) 2017 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "flightplanutils.h" +#include + +namespace BlackMisc +{ + namespace Aviation + { + void CFlightPlanUtils::parseFlightPlanRemarks(const QString &remarks) + { + if (remarks.isEmpty()) { return; } + } + } // namespace +} // namespace diff --git a/src/blackmisc/aviation/flightplanutils.h b/src/blackmisc/aviation/flightplanutils.h new file mode 100644 index 000000000..ac7f3acb3 --- /dev/null +++ b/src/blackmisc/aviation/flightplanutils.h @@ -0,0 +1,34 @@ +/* Copyright (C) 2017 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKMISC_AVIATION_FLIGHTPLANUTILS_H +#define BLACKMISC_AVIATION_FLIGHTPLANUTILS_H + +#include "blackmisc/blackmiscexport.h" + +namespace BlackMisc +{ + namespace Aviation + { + //! Flight plan utils + class BLACKMISC_EXPORT CFlightPlanUtils + { + public: + //! Constructor + CFlightPlanUtils() = delete; + + //! Parse remarks from a flight plan + static void parseFlightPlanRemarks(const QString &remarks); + }; + } // namespace +} // namespace + +#endif // guard