From 3e41a91455992db09d1f0753f044d49222c5861b Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 28 Feb 2018 23:46:49 +0100 Subject: [PATCH] Ref T131, verifyPrerequisites in simulator context (checking XP conflicts) --- src/blackcore/context/contextsimulator.h | 3 ++ src/blackcore/context/contextsimulatorempty.h | 7 ++++ .../context/contextsimulatorimpl.cpp | 33 +++++++++++++++++++ src/blackcore/context/contextsimulatorimpl.h | 13 +++++--- .../context/contextsimulatorproxy.cpp | 7 +++- src/blackcore/context/contextsimulatorproxy.h | 1 + 6 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index e9f60e533..9977660be 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -161,6 +161,9 @@ namespace BlackCore //! Simulators which have an initialized model set virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const = 0; + //! Verify prerequisites for simulation like an existing model set + virtual BlackMisc::CStatusMessageList verifyPrerequisites() const = 0; + //! Number of installed models in simulator eco system virtual int getModelSetCount() const = 0; diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 177289615..9be2e37d5 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -87,6 +87,13 @@ namespace BlackCore return BlackMisc::Simulation::CSimulatorInfo(); } + //! \copydoc IContextSimulator::verifyPrerequisites + virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override + { + logEmptyContextWarning(Q_FUNC_INFO); + return BlackMisc::CStatusMessageList(); + } + //! \copydoc IContextSimulator::getModelSetLoaderSimulator virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override { diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 3619475cf..5ff541bf3 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -17,6 +17,7 @@ #include "blackcore/application.h" #include "blackcore/pluginmanagersimulator.h" #include "blackcore/simulator.h" +#include "blackmisc/simulation/xplane/xplaneutil.h" #include "blackmisc/simulation/matchingutils.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/compare.h" @@ -44,6 +45,7 @@ using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Aviation; using namespace BlackMisc::Network; using namespace BlackMisc::Simulation; +using namespace BlackMisc::Simulation::XPlane; using namespace BlackMisc::Geo; using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation::Settings; @@ -184,6 +186,37 @@ namespace BlackCore return m_modelSetLoader.simulatorsWithInitializedModelSet(); } + CStatusMessageList CContextSimulator::verifyPrerequisites() const + { + if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } + CStatusMessageList msgs; + if (!sApp || !sApp->isNetworkAccessible()) + { + msgs.push_back(CStatusMessage(this).error("No network interface, simulation will not work properly")); + } + const CSimulatorInfo sims = this->simulatorsWithInitializedModelSet(); + if (sims.isNoSimulator()) + { + msgs.push_back(CStatusMessage(this).error("No model set so far, you need at least one model set. Hint: You can create a model set in the mapping tool, or copy an existing set in the launcher.")); + } + else if (sims.xplane() || CSimulatorInfo(m_enabledSimulators.get()).xplane()) + { + // ever used with XPlane + const QString pluginDir = CXPlaneUtil::pluginDirFromRootDir(m_simulatorSettings.getSimulatorDirectoryOrDefault(CSimulatorInfo::XPLANE)); + const QDir dir(pluginDir); + if (dir.exists()) + { + // only check if we are on a XP machine + const QStringList conflicts = CXPlaneUtil::findConflictingPlugins(pluginDir); + if (!conflicts.isEmpty()) + { + msgs.push_back(CStatusMessage(this).warning("Possible conflict with other XPlane plugins: '%1'") << (conflicts.join(", "))); + } + } + } + return msgs; + } + QStringList CContextSimulator::getModelSetStrings() const { if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index a316780e6..400db5586 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -26,13 +26,14 @@ #include "blackmisc/pq/length.h" #include "blackmisc/pq/time.h" #include "blackmisc/settingscache.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodelsetloader.h" #include "blackmisc/simulation/remoteaircraftprovider.h" #include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/simulation/simulatorplugininfolist.h" #include "blackmisc/simulation/simulatorinternals.h" -#include "blackmisc/simulation/settings/simulatorsettings.h" + #include "blackmisc/worker.h" #include @@ -87,6 +88,7 @@ namespace BlackCore virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override; virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override; virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override; + virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override; virtual QStringList getModelSetStrings() const override; virtual QStringList getModelSetCompleterStrings(bool sorted) const override; virtual int getModelSetCount() const override; @@ -225,12 +227,15 @@ namespace BlackCore CAircraftMatcher m_aircraftMatcher; //!< Model matcher BlackMisc::Simulation::CAircraftModelSetLoader m_modelSetLoader { this }; //!< load model set from caches QMap m_matchingMessages; - BlackMisc::CSettingReadOnly m_messageSettings { this }; //!< settings for messages - BlackMisc::CSettingReadOnly m_enabledSimulators { this, &CContextSimulator::changeEnabledSimulators }; - QString m_networkSessionId; //! Network session of CServer::getServerSessionId, if not connected empty bool m_initallyAddAircrafts = false; bool m_enableMatchingMessages = true; bool m_isWeatherActivated = false; + + // settings + BlackMisc::Simulation::Settings::CMultiSimulatorSettings m_simulatorSettings { this }; //!< for directories of XPlane + BlackMisc::CSettingReadOnly m_messageSettings { this }; //!< settings for messages + BlackMisc::CSettingReadOnly m_enabledSimulators { this, &CContextSimulator::changeEnabledSimulators }; + QString m_networkSessionId; //! Network session of CServer::getServerSessionId, if not connected empty }; } // namespace } // namespace diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index 7d07b2c03..6da9a9823 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -32,7 +32,7 @@ namespace BlackCore CContextSimulatorProxy::CContextSimulatorProxy(const QString &serviceName, QDBusConnection &connection, CCoreFacadeConfig::ContextMode mode, CCoreFacade *runtime) : IContextSimulator(mode, runtime), m_dBusInterface(nullptr) { this->m_dBusInterface = new BlackMisc::CGenericDBusInterface( - serviceName , IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), + serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), connection, this); this->relaySignals(serviceName, connection); } @@ -111,6 +111,11 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("simulatorsWithInitializedModelSet")); } + CStatusMessageList CContextSimulatorProxy::verifyPrerequisites() const + { + return m_dBusInterface->callDBusRet(QLatin1String("verifyPrerequisites")); + } + CSimulatorInfo CContextSimulatorProxy::getModelSetLoaderSimulator() const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSetLoaderSimulator")); diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index 4c785ac19..851a7c8a2 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -65,6 +65,7 @@ namespace BlackCore virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override; + virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override; virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override; virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override; virtual QStringList getModelSetStrings() const override;