From cbd8f2681a796a6469dd41fb4df78d88c1e7c217 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 7 May 2014 23:23:20 +0200 Subject: [PATCH] refs #234, add methods to resolve user names from VATSIM file and display them in voice rooms --- src/blackcore/context_network_impl.cpp | 21 ++++++---- src/blackcore/vatsimdatafilereader.cpp | 55 ++++++++++++++++++++++++++ src/blackcore/vatsimdatafilereader.h | 20 ++++++++++ src/blackmisc/avaircraftlist.cpp | 14 +++++++ src/blackmisc/avaircraftlist.h | 3 ++ src/blackmisc/avatcstationlist.cpp | 16 +++++++- src/blackmisc/avatcstationlist.h | 3 ++ 7 files changed, 123 insertions(+), 9 deletions(-) diff --git a/src/blackcore/context_network_impl.cpp b/src/blackcore/context_network_impl.cpp index e581833de..ee084f402 100644 --- a/src/blackcore/context_network_impl.cpp +++ b/src/blackcore/context_network_impl.cpp @@ -339,11 +339,20 @@ namespace BlackCore } // we might have unresolved callsigns + // these are the ones not in range foreach(CCallsign callsign, searchList) { - CUser user; - user.setCallsign(callsign); - users.push_back(user); + CUserList usersByCallsign = this->m_vatsimDataFileReader->getUsersForCallsign(callsign); + if (usersByCallsign.isEmpty()) + { + CUser user; + user.setCallsign(callsign); + users.push_back(user); + } + else + { + users.push_back(usersByCallsign[0]); + } } return users; } @@ -365,11 +374,7 @@ namespace BlackCore if (callsigns.isEmpty()) return clients; foreach(CCallsign callsign, callsigns) { - CClientList clientsForCallsign = this->m_otherClients.findBy(&CClient::getCallsign, callsign); - foreach(CClient c, clientsForCallsign) - { - clients.push_back(c); - } + clients.push_back(this->m_otherClients.findBy(&CClient::getCallsign, callsign)); } return clients; } diff --git a/src/blackcore/vatsimdatafilereader.cpp b/src/blackcore/vatsimdatafilereader.cpp index 9a6876b2f..3195b36f9 100644 --- a/src/blackcore/vatsimdatafilereader.cpp +++ b/src/blackcore/vatsimdatafilereader.cpp @@ -44,6 +44,61 @@ namespace BlackCore this->m_updateTimer->start(updatePeriodMs); } + CUserList CVatsimDataFileReader::getPilotsForCallsigns(const CCallsignList &callsigns) + { + CUserList users; + if (callsigns.isEmpty()) return users; + foreach(CCallsign callsign, callsigns) + { + users.push_back(this->m_aircrafts.findByCallsign(callsign).getPilots()); + } + return users; + } + + CUserList CVatsimDataFileReader::getPilotsForCallsign(const CCallsign &callsign) + { + CCallsignList callsigns; + callsigns.push_back(callsign); + return this->getPilotsForCallsigns(callsigns); + } + + CUserList CVatsimDataFileReader::getControllersForCallsign(const CCallsign &callsign) + { + CCallsignList callsigns; + callsigns.push_back(callsign); + return this->getControllersForCallsigns(callsigns); + } + + CUserList CVatsimDataFileReader::getUsersForCallsign(const CCallsign &callsign) + { + CCallsignList callsigns; + callsigns.push_back(callsign); + return this->getUsersForCallsigns(callsigns); + } + + CUserList CVatsimDataFileReader::getControllersForCallsigns(const CCallsignList &callsigns) + { + CUserList users; + if (callsigns.isEmpty()) return users; + foreach(CCallsign callsign, callsigns) + { + users.push_back(this->m_atcStations.findByCallsign(callsign).getControllers()); + } + return users; + } + + CUserList CVatsimDataFileReader::getUsersForCallsigns(const CCallsignList &callsigns) + { + CUserList users; + if (callsigns.isEmpty()) return users; + foreach(CCallsign callsign, callsigns) + { + users.push_back(this->getPilotsForCallsign(callsign)); + users.push_back(this->getControllersForCallsign(callsign)); + } + return users; + } + /* * Data file read from XML */ diff --git a/src/blackcore/vatsimdatafilereader.h b/src/blackcore/vatsimdatafilereader.h index 771f2636b..478ad0a53 100644 --- a/src/blackcore/vatsimdatafilereader.h +++ b/src/blackcore/vatsimdatafilereader.h @@ -9,6 +9,9 @@ #include "blackmisc/avatcstationlist.h" #include "blackmisc/avaircraftlist.h" #include "blackmisc/nwserverlist.h" +#include "blackmisc/nwuserlist.h" +#include "blackmisc/avcallsignlist.h" + #include #include #include @@ -50,6 +53,23 @@ namespace BlackCore //! Get all voice servers const BlackMisc::Network::CServerList &getVoiceServers() { return this->m_voiceServers; } + //! Users for callsign(s) + BlackMisc::Network::CUserList getUsersForCallsigns(const BlackMisc::Aviation::CCallsignList &callsigns); + + //! User for callsign + BlackMisc::Network::CUserList getUsersForCallsign(const BlackMisc::Aviation::CCallsign &callsign); + + //! Controllers for callsigns + BlackMisc::Network::CUserList getControllersForCallsigns(const BlackMisc::Aviation::CCallsignList &callsigns); + + //! Controllers for callsign + BlackMisc::Network::CUserList getControllersForCallsign(const BlackMisc::Aviation::CCallsign &callsign); + + //! Users for callsigns + BlackMisc::Network::CUserList getPilotsForCallsigns(const BlackMisc::Aviation::CCallsignList &callsigns); + + //! Users for callsign + BlackMisc::Network::CUserList getPilotsForCallsign(const BlackMisc::Aviation::CCallsign &callsign); private slots: //! Data have been read diff --git a/src/blackmisc/avaircraftlist.cpp b/src/blackmisc/avaircraftlist.cpp index 3b66a0f2a..21b14ef9a 100644 --- a/src/blackmisc/avaircraftlist.cpp +++ b/src/blackmisc/avaircraftlist.cpp @@ -47,6 +47,20 @@ namespace BlackMisc return this->findBy(&CAircraft::getCallsign, callsign); } + /* + * All pilots + */ + CUserList CAircraftList::getPilots() const + { + CUserList users; + for (auto i = this->begin(); i != this->end(); ++i) + { + CAircraft aircraft = *i; + if (aircraft.getPilot().isValid()) users.push_back(aircraft.getPilot()); + } + return users; + } + /* * Aircrafts within range */ diff --git a/src/blackmisc/avaircraftlist.h b/src/blackmisc/avaircraftlist.h index 7a77f7504..424279ea6 100644 --- a/src/blackmisc/avaircraftlist.h +++ b/src/blackmisc/avaircraftlist.h @@ -11,6 +11,7 @@ #define BLACKMISC_AIRCRAFTLIST_H #include "avaircraft.h" +#include "nwuserlist.h" #include "collection.h" #include "sequence.h" #include @@ -43,6 +44,8 @@ namespace BlackMisc CAircraftList findByCallsign(const CCallsign &callsign) const; //! All pilots (with valid data) + BlackMisc::Network::CUserList getPilots() const; + /*! * Find 0..n stations within range of given coordinate * \param coordinate other position diff --git a/src/blackmisc/avatcstationlist.cpp b/src/blackmisc/avatcstationlist.cpp index ce7c935a0..7accf9dbf 100644 --- a/src/blackmisc/avatcstationlist.cpp +++ b/src/blackmisc/avatcstationlist.cpp @@ -79,6 +79,21 @@ namespace BlackMisc }); } + /* + * All pilots + */ + CUserList CAtcStationList::getControllers() const + { + CUserList users; + for (auto i = this->begin(); i != this->end(); ++i) + { + CAtcStation station = *i; + if (station.getController().isValid()) users.push_back(station.getController()); + } + return users; + } + + /* * Merge with booking */ @@ -160,7 +175,6 @@ namespace BlackMisc return c; } - /* * Merge with VATSIM data file */ diff --git a/src/blackmisc/avatcstationlist.h b/src/blackmisc/avatcstationlist.h index 8962b585d..a6b254980 100644 --- a/src/blackmisc/avatcstationlist.h +++ b/src/blackmisc/avatcstationlist.h @@ -10,6 +10,7 @@ #ifndef BLACKMISC_ATCSTATIONLIST_H #define BLACKMISC_ATCSTATIONLIST_H +#include "nwuserlist.h" #include "avatcstation.h" #include "collection.h" #include "sequence.h" @@ -49,6 +50,8 @@ namespace BlackMisc CAtcStationList findIfComUnitTunedIn25KHz(const BlackMisc::Aviation::CComSystem &comUnit) const; //! All controllers (with valid data) + BlackMisc::Network::CUserList getControllers() const; + //! Update distances to coordinate, usually own aircraft's position void calculateDistancesToPlane(const BlackMisc::Geo::CCoordinateGeodetic &position);