From b1295cd4576cd1d4c7d4d74fb775e8a78a1eaf5c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 26 Jul 2017 14:05:12 +0200 Subject: [PATCH] Ref T111, added utility functions used for swift plugin (dummy driver) * new reader functions * plugin info --- src/blackcore/db/airportdatareader.cpp | 5 +++++ src/blackcore/db/airportdatareader.h | 4 ++++ src/blackcore/webdataservices.cpp | 10 +++++++-- src/blackcore/webdataservices.h | 6 +++++- .../simulation/aircraftmodellist.cpp | 7 +++++-- src/blackmisc/simulation/aircraftmodellist.h | 2 +- .../simulation/simulatorplugininfo.cpp | 21 +++++++++++++++++-- .../simulation/simulatorplugininfo.h | 10 +++++++++ .../simulation/simulatorplugininfolist.cpp | 9 ++++++++ .../simulation/simulatorplugininfolist.h | 6 +++++- src/blackmisc/stringutils.h | 8 +++---- 11 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/blackcore/db/airportdatareader.cpp b/src/blackcore/db/airportdatareader.cpp index e80652415..31555414d 100644 --- a/src/blackcore/db/airportdatareader.cpp +++ b/src/blackcore/db/airportdatareader.cpp @@ -34,6 +34,11 @@ namespace BlackCore return m_airportCache.get(); } + CAirport CAirportDataReader::getAirportForIcaoDesignator(const QString &designator) const + { + return getAirports().findByIcao(CAirportIcaoCode(designator)).frontOrDefault(); + } + int CAirportDataReader::getAirportsCount() const { return this->getAirports().size(); diff --git a/src/blackcore/db/airportdatareader.h b/src/blackcore/db/airportdatareader.h index 95bd94f8f..ad3aa5cd7 100644 --- a/src/blackcore/db/airportdatareader.h +++ b/src/blackcore/db/airportdatareader.h @@ -38,6 +38,10 @@ namespace BlackCore //! \threadsafe BlackMisc::Aviation::CAirportList getAirports() const; + //! Returns airport for designator (or default) + //! \threadsafe + BlackMisc::Aviation::CAirport getAirportForIcaoDesignator(const QString &designator) const; + //! Returns a list of all airports in the database. //! \threadsafe int getAirportsCount() const; diff --git a/src/blackcore/webdataservices.cpp b/src/blackcore/webdataservices.cpp index cc699f408..0b55642dd 100644 --- a/src/blackcore/webdataservices.cpp +++ b/src/blackcore/webdataservices.cpp @@ -523,9 +523,9 @@ namespace BlackCore return QStringList(); } - QStringList CWebDataServices::getModelCompleterStrings(bool sorted) const + QStringList CWebDataServices::getModelCompleterStrings(bool sorted, const CSimulatorInfo &simulator) const { - if (m_modelDataReader) { return m_modelDataReader->getModels().toCompleterStrings(sorted); } + if (m_modelDataReader) { return m_modelDataReader->getModels().toCompleterStrings(sorted, simulator); } return QStringList(); } @@ -666,6 +666,12 @@ namespace BlackCore return 0; } + CAirport CWebDataServices::getAirportForIcaoDesignator(const QString &icao) const + { + if (m_airportDataReader) { return m_airportDataReader->getAirportForIcaoDesignator(icao); } + return CAirport(); + } + CCountry CWebDataServices::getCountryForIsoCode(const QString &iso) const { if (m_icaoDataReader) { return m_icaoDataReader->getCountryForIsoCode(iso); } diff --git a/src/blackcore/webdataservices.h b/src/blackcore/webdataservices.h index 738f0c1c7..08150bc7f 100644 --- a/src/blackcore/webdataservices.h +++ b/src/blackcore/webdataservices.h @@ -223,7 +223,7 @@ namespace BlackCore //! Model completer string //! \threadsafe - QStringList getModelCompleterStrings(bool sorted = true) const; + QStringList getModelCompleterStrings(bool sorted = true, const BlackMisc::Simulation::CSimulatorInfo &simulator = { BlackMisc::Simulation::CSimulatorInfo::All }) const; //! Models for combined code and aircraft designator //! \threadsafe @@ -313,6 +313,10 @@ namespace BlackCore //! \threadsafe int getAirportsCount() const; + //! Get airport for ICAO designator + //! \threadsafe + BlackMisc::Aviation::CAirport getAirportForIcaoDesignator(const QString &icao) const; + //! Get METARs //! \threadsafe BlackMisc::Weather::CMetarList getMetars() const; diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index de53f620e..fcb0b3f69 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -693,13 +693,16 @@ namespace BlackMisc return scoreMap; } - QStringList CAircraftModelList::toCompleterStrings(bool sorted) const + QStringList CAircraftModelList::toCompleterStrings(bool sorted, const CSimulatorInfo &simulator) const { QStringList c; c.reserve(size()); for (const CAircraftModel &model : *this) { - c.append(model.getModelString()); + if (model.getSimulator().matchesAny(simulator)) + { + c.append(model.getModelString()); + } } if (sorted) { c.sort(); } return c; diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 92d5ce60f..aeb4cd7b9 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -259,7 +259,7 @@ namespace BlackMisc ScoredModels scoreFull(const CAircraftModel &remoteModel, bool preferColorLiveries, bool ignoreZeroScores = true, CStatusMessageList *log = nullptr) const; //! Completer strings - QStringList toCompleterStrings(bool sorted = true) const; + QStringList toCompleterStrings(bool sorted = true, const BlackMisc::Simulation::CSimulatorInfo &simulator = { BlackMisc::Simulation::CSimulatorInfo::All }) const; //! Validate for publishing CStatusMessageList validateForPublishing() const; diff --git a/src/blackmisc/simulation/simulatorplugininfo.cpp b/src/blackmisc/simulation/simulatorplugininfo.cpp index 209e087ea..021b4315a 100644 --- a/src/blackmisc/simulation/simulatorplugininfo.cpp +++ b/src/blackmisc/simulation/simulatorplugininfo.cpp @@ -24,7 +24,7 @@ namespace BlackMisc void CSimulatorPluginInfo::convertFromJson(const QJsonObject &json) { - if (json.contains("IID")) // comes from the plugin + if (json.contains("IID")) // comes from the plugin { if (! json.contains("MetaData")) { throw CJsonException("Missing 'MetaData'"); } @@ -45,6 +45,16 @@ namespace BlackMisc return m_identifier.isEmpty(); } + CSimulatorInfo CSimulatorPluginInfo::getSimulatorInfo() const + { + return CSimulatorInfo(getSimulator()); + } + + bool CSimulatorPluginInfo::isSwiftPlugin() const + { + return this->getIdentifier() == swiftPluginIndentifier(); + } + QString CSimulatorPluginInfo::convertToQString(bool i18n) const { Q_UNUSED(i18n); @@ -75,6 +85,12 @@ namespace BlackMisc return s; } + const QString &CSimulatorPluginInfo::swiftPluginIndentifier() + { + static const QString s("org.swift-project.plugins.simulator.swift"); + return s; + } + const QStringList &CSimulatorPluginInfo::allIdentifiers() { static const QStringList identifiers( @@ -82,7 +98,8 @@ namespace BlackMisc fsxPluginIndentifier(), p3dPluginIndentifier(), xplanePluginIndentifier(), - fs9PluginIndentifier() + fs9PluginIndentifier(), + swiftPluginIndentifier() }); return identifiers; } diff --git a/src/blackmisc/simulation/simulatorplugininfo.h b/src/blackmisc/simulation/simulatorplugininfo.h index 16683d12e..47a97fee2 100644 --- a/src/blackmisc/simulation/simulatorplugininfo.h +++ b/src/blackmisc/simulation/simulatorplugininfo.h @@ -12,6 +12,7 @@ #ifndef BLACKMISC_SIMULATION_SIMULATORPLUGININFO_H #define BLACKMISC_SIMULATION_SIMULATORPLUGININFO_H +#include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/blackmiscexport.h" #include "blackmisc/metaclass.h" #include "blackmisc/valueobject.h" @@ -58,6 +59,12 @@ namespace BlackMisc //! Simulator const QString &getSimulator() const { return m_simulator; } + //! Simulator info object + BlackMisc::Simulation::CSimulatorInfo getSimulatorInfo() const; + + //! Is this the pseudo swift driver? + bool isSwiftPlugin() const; + //! Description const QString &getDescription() const { return m_description; } @@ -76,6 +83,9 @@ namespace BlackMisc //! Plugin identifier (XPlane) static const QString &xplanePluginIndentifier(); + //! Plugin identifier (swift pseudo driver) + static const QString &swiftPluginIndentifier(); + //! All valid identifiers static const QStringList &allIdentifiers(); diff --git a/src/blackmisc/simulation/simulatorplugininfolist.cpp b/src/blackmisc/simulation/simulatorplugininfolist.cpp index 0740765a1..5a14a9c69 100644 --- a/src/blackmisc/simulation/simulatorplugininfolist.cpp +++ b/src/blackmisc/simulation/simulatorplugininfolist.cpp @@ -38,5 +38,14 @@ namespace BlackMisc { return this->findFirstByOrDefault(&CSimulatorPluginInfo::getIdentifier, identifier); } + + CSimulatorPluginInfo CSimulatorPluginInfoList::findBySimulator(const CSimulatorInfo &simulator) const + { + for (const CSimulatorPluginInfo &info : *this) + { + if (info.getSimulatorInfo() == simulator) { return info; } + } + return CSimulatorPluginInfo(); + } } // namespace } // namespace diff --git a/src/blackmisc/simulation/simulatorplugininfolist.h b/src/blackmisc/simulation/simulatorplugininfolist.h index 54c2d073e..f0b30d960 100644 --- a/src/blackmisc/simulation/simulatorplugininfolist.h +++ b/src/blackmisc/simulation/simulatorplugininfolist.h @@ -13,9 +13,10 @@ #define BLACKMISC_SIMULATION_SIMULATORPLUGININFOLIST_H #include "blackmisc/blackmiscexport.h" +#include "blackmisc/simulation/simulatorinfo.h" +#include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/collection.h" #include "blackmisc/sequence.h" -#include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/variant.h" #include @@ -50,6 +51,9 @@ namespace BlackMisc //! Find by identifier (unique) CSimulatorPluginInfo findByIdentifier(const QString &identifier) const; + + //! Find by simulator + CSimulatorPluginInfo findBySimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; }; } // ns } // ns diff --git a/src/blackmisc/stringutils.h b/src/blackmisc/stringutils.h index cb73be40c..41ac86aa8 100644 --- a/src/blackmisc/stringutils.h +++ b/src/blackmisc/stringutils.h @@ -234,10 +234,10 @@ namespace BlackMisc * the derived class uses this macro to disambiguate the inherited members. */ # define BLACKMISC_DECLARE_USING_MIXIN_STRING(DERIVED) \ - using ::BlackMisc::Mixin::String::toQString; \ - using ::BlackMisc::Mixin::String::toFormattedQString; \ - using ::BlackMisc::Mixin::String::toStdString; \ - using ::BlackMisc::Mixin::String::stringForStreaming; + using ::BlackMisc::Mixin::String::toQString; \ + using ::BlackMisc::Mixin::String::toFormattedQString; \ + using ::BlackMisc::Mixin::String::toStdString; \ + using ::BlackMisc::Mixin::String::stringForStreaming; } // ns } // ns