Ref T27, store flight plan remarks in VATSIM reader

This can be used in airspace monitor
This commit is contained in:
Klaus Basan
2017-06-25 19:45:10 +02:00
committed by Mathew Sutcliffe
parent 39bd8aa2bb
commit 042f725e54
4 changed files with 49 additions and 21 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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<CCallsign, CVoiceCapabilities> voiceCapabilities;
QMap<CCallsign, CVoiceCapabilities> voiceCapabilitiesMap;
QMap<CCallsign, QString> 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())
{

View File

@@ -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<BlackCore::Data::TVatsimSetup> m_lastGoodSetup { this };
BlackMisc::CSettingReadOnly<BlackCore::Vatsim::TVatsimDataFile> m_settings { this, &CVatsimDataFileReader::reloadSettings };
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Network::CVoiceCapabilities> m_voiceCapabilities;
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Network::CVoiceCapabilities> m_voiceCapabilities; //!< voice capabilities
QMap<BlackMisc::Aviation::CCallsign, QString> m_flightPlanRemarks; //!< cache for flight plan remarks
//! Split line and assign values to their corresponding attribute names
//! \remark attributes expected as lower case