From 042f725e5409f071dc109ed006efebfcf0dcbdd8 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 25 Jun 2017 19:45:10 +0200 Subject: [PATCH] Ref T27, store flight plan remarks in VATSIM reader This can be used in airspace monitor --- src/blackcore/airspacemonitor.cpp | 15 +++++++- src/blackcore/airspacemonitor.h | 8 +++++ src/blackcore/vatsim/vatsimdatafilereader.cpp | 36 ++++++++++--------- src/blackcore/vatsim/vatsimdatafilereader.h | 11 ++++-- 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index f1f355b1d..8aa4f9f81 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -103,7 +103,7 @@ namespace BlackCore this->connect(sApp->getWebDataServices()->getBookingReader(), &CVatsimBookingReader::atcBookingsReadUnchanged, this, &CAirspaceMonitor::onReadUnchangedAtcBookings); } - if (sApp->getWebDataServices()->getVatsimDataFileReader()) + if (this->supportsVatsimDataFile()) { this->connect(sApp->getWebDataServices()->getVatsimDataFileReader(), &CVatsimDataFileReader::dataFileRead, this, &CAirspaceMonitor::onReceivedDataFile); } @@ -305,6 +305,14 @@ namespace BlackCore return plan; } + QString CAirspaceMonitor::tryToGetFlightPlanRemarks(const CCallsign &callsign) const + { + if (callsign.isEmpty()) { return ""; } + if (m_flightPlanCache.contains(callsign)) { return m_flightPlanCache[callsign].getRemarks(); } + if (this->supportsVatsimDataFile()) { return sApp->getWebDataServices()->getVatsimDataFileReader()->getFlightPlanRemarksForCallsign(callsign); } + return ""; + } + CUserList CAirspaceMonitor::getUsers() const { CUserList users; @@ -1293,6 +1301,11 @@ namespace BlackCore return this->m_network && this->m_network->isConnected(); } + bool CAirspaceMonitor::supportsVatsimDataFile() const + { + return sApp && sApp->getWebDataServices() && sApp->getWebDataServices()->getVatsimDataFileReader(); + } + CLength CAirspaceMonitor::calculateDistanceToOwnAircraft(const CAircraftSituation &situation) const { CLength distance = getOwnAircraft().calculateGreatCircleDistance(situation); diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index ffba44b86..f4df54f6b 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -121,6 +121,11 @@ namespace BlackCore //! \remarks pseudo synchronous, call the async functions and waits for result 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 + //! \threadsafe + QString tryToGetFlightPlanRemarks(const BlackMisc::Aviation::CCallsign &callsign) const; + //! Returns this list of other clients we know about //! \threadsafe BlackMisc::Network::CClientList getOtherClients() const; @@ -286,6 +291,9 @@ namespace BlackCore //! Connected with network? bool isConnected() const; + //! Supports VATSIM data file + bool supportsVatsimDataFile() const; + //! Distance calculation BlackMisc::PhysicalQuantities::CLength calculateDistanceToOwnAircraft(const BlackMisc::Aviation::CAircraftSituation &situation) const; diff --git a/src/blackcore/vatsim/vatsimdatafilereader.cpp b/src/blackcore/vatsim/vatsimdatafilereader.cpp index 347d1eb4a..0caabac93 100644 --- a/src/blackcore/vatsim/vatsimdatafilereader.cpp +++ b/src/blackcore/vatsim/vatsimdatafilereader.cpp @@ -121,14 +121,16 @@ namespace BlackCore CVoiceCapabilities CVatsimDataFileReader::getVoiceCapabilityForCallsign(const CCallsign &callsign) { QReadLocker rl(&this->m_lock); - if (this->m_voiceCapabilities.contains(callsign)) - { - return m_voiceCapabilities[callsign]; - } - else - { - return CVoiceCapabilities::fromVoiceCapabilities(CVoiceCapabilities::Unknown); - } + return (this->m_voiceCapabilities.contains(callsign)) ? + m_voiceCapabilities[callsign] : + CVoiceCapabilities::fromVoiceCapabilities(CVoiceCapabilities::Unknown); + } + + QString CVatsimDataFileReader::getFlightPlanRemarksForCallsign(const CCallsign &callsign) + { + QReadLocker rl(&this->m_lock); + return (this->m_flightPlanRemarks.contains(callsign)) ? + m_flightPlanRemarks[callsign] : ""; } void CVatsimDataFileReader::updateWithVatsimDataFileData(CSimulatedAircraft &aircraftToBeUdpated) const @@ -237,7 +239,8 @@ namespace BlackCore CServerList fsdServers; CAtcStationList atcStations; CSimulatedAircraftList aircraft; - QMap voiceCapabilities; + QMap voiceCapabilitiesMap; + QMap flightPlanRemarksMap; QDateTime updateTimestampFromFile; QStringList clientSectionAttributes; @@ -289,16 +292,17 @@ namespace BlackCore const double alt = clientPartsMap["altitude"].toDouble(); const CFrequency frequency = CFrequency(clientPartsMap["frequency"].toDouble(), CFrequencyUnit::MHz()); CCoordinateGeodetic position(lat, lng, alt); - CAltitude altitude(alt, CAltitude::MeanSeaLevel, CLengthUnit::ft()); - QString flightPlanRemarks = clientPartsMap["planned_remarks"]; + const CAltitude altitude(alt, CAltitude::MeanSeaLevel, CLengthUnit::ft()); + const QString flightPlanRemarks = clientPartsMap["planned_remarks"].trimmed(); // Voice capabilities if (!flightPlanRemarks.isEmpty()) { - CVoiceCapabilities vc(flightPlanRemarks); + flightPlanRemarksMap[callsign] = flightPlanRemarks; + const CVoiceCapabilities vc(flightPlanRemarks); if (!vc.isUnknown()) { - voiceCapabilities.insert(callsign, vc); + voiceCapabilitiesMap.insert(callsign, vc); } } @@ -403,9 +407,8 @@ namespace BlackCore this->setUpdateTimestamp(updateTimestampFromFile); this->m_aircraft = aircraft; this->m_atcStations = atcStations; - this->m_voiceCapabilities = voiceCapabilities; - - // check if we need to save in cache + this->m_voiceCapabilities = voiceCapabilitiesMap; + this->m_flightPlanRemarks = flightPlanRemarksMap; } // update cache itself is thread safe @@ -417,7 +420,6 @@ namespace BlackCore this->m_lastGoodSetup.set(vs); } - // warnings, if required if (!illegalIcaoCodes.isEmpty()) { diff --git a/src/blackcore/vatsim/vatsimdatafilereader.h b/src/blackcore/vatsim/vatsimdatafilereader.h index 7a04c9dd7..2f7f890ef 100644 --- a/src/blackcore/vatsim/vatsimdatafilereader.h +++ b/src/blackcore/vatsim/vatsimdatafilereader.h @@ -109,6 +109,10 @@ namespace BlackCore //! \threadsafe BlackMisc::Network::CVoiceCapabilities getVoiceCapabilityForCallsign(const BlackMisc::Aviation::CCallsign &callsign); + //! Flight plan remarks for callsign + //! \threadsafe + QString getFlightPlanRemarksForCallsign(const BlackMisc::Aviation::CCallsign &callsign); + //! Update aircraft with VATSIM aircraft data from data file //! \threadsafe void updateWithVatsimDataFileData(BlackMisc::Simulation::CSimulatedAircraft &aircraftToBeUdpated) const; @@ -140,11 +144,12 @@ namespace BlackCore private: void reloadSettings(); - BlackMisc::Aviation::CAtcStationList m_atcStations; - BlackMisc::Simulation::CSimulatedAircraftList m_aircraft; + BlackMisc::Aviation::CAtcStationList m_atcStations; + BlackMisc::Simulation::CSimulatedAircraftList m_aircraft; BlackMisc::CData m_lastGoodSetup { this }; BlackMisc::CSettingReadOnly m_settings { this, &CVatsimDataFileReader::reloadSettings }; - QMap m_voiceCapabilities; + QMap m_voiceCapabilities; //!< voice capabilities + QMap m_flightPlanRemarks; //!< cache for flight plan remarks //! Split line and assign values to their corresponding attribute names //! \remark attributes expected as lower case